LWKD: Week Ending April 21, 2024
Last Week in Kubernetes Development
Week ending 2024-04-21
Developer News
Kubernetes v1.30: Uwubernetes was released! Major features includes Go workspaces, Pod Scheduling Readiness, VolumeManager reconstruction after kubelet restart, Node log query and more. Read more in the announcement blog post and the release notes.
If you use minikube, please fill out their quick survey.
SIG-CLI has new leadership: Arda Guclu is a new chair, and Katrina and Eddie are stepping down. SIG Autoscaling is replacing Marcin with Maciek Pytel.
Kat Cosgrove and Grace Nguyen are Release Team subproject leads, and Marko Mudrinić is the Release Engineering subproject lead.
Release Schedule
Next Deadline: 1.31 Cycle Begins, April 2024
We are in the period between releases right now. Dates for 1.31 have not been published yet.
Featured PR
#123905: # Field selector for Services based on ClusterIP and Type
In clusters with unusually large numbers of headless Services (i.e. Services without a cluster IP), it can cause memory bloat in the Kubelet as it has to cache these as part of the API informer. This PR extends the Service API to allow filtering on both clusterIP
and type
, both improving the memory usage of the Kubelet and decreasing load on the API. While this specific optimization only helps a niche audience, it's worth reinforcing how this technique can be applied elsewhere. When optimizing any controller, always keep an eye open for how API watch traffic could be mitigated with server-side logic or filters. Creating field selectors is easy and streamlined, and can likely be used in many more such optimizations.
KEP of the Week
KEP 3521: Pod Scheduling Readiness
This KEP proposes to add an API to mark Pods as ready or paused for scheduling so that the scheduler is not wasting cycles retrying to schedule Pods that are determined to be unschedulable. The KEP adds APIs for users and controllers to control when a Pod is ready to be considered for scheduling. This is done with the new .spec.schedulingGate
field to the Pod API. Pods will only be attempted to be scheduled to a Node by the scheduler when .spec.schedulingGate
key is nil. A new Enqueue extension point is also added to customize Pod queueing behaviour.
This KEP graduated to stable in the v1.30 release.
Other Merges
make
works without go binaries in PATH- kube-proxy
--nodeport-addresses primary
implements backwards-compatible nodeport behavior - kubeadm stops mounting the entire pki directory, or storing ResolverConfig globally
- Use the generic ptr package for all pointers
- Stop deep copying the Controller object
- Prevent DRA crash on nil NodePreparedness
- You can override the openAPI schema during codegen
- client-gen fake clients give the same errors as real clients
- client-go REST client supports WatchList
- DisableServiceLinks admission controller does what it says on the tin
- InterpodAffinity scheduler plugin takes scheduling hints
- Stop spamming the logs when recreating statefulset pods, or when a swap controller is not present
- Allow conversions between values in CEL fields
- Don't use a global variable for E2E test image locations
- Our APIServer span name is KubernetesAPI
- kube-proxy IPv6 bind defaults are properly IPv6
- Make workqueue objects generic and replaceable
- Display complete NetworkPolicy port ranges
- kubelet's read-only endpoint supports tracing
- Figure out slog logger automatically
- Contextual logging migration: pkg/proxy, apimachinery runtime
Promotions
Deprecated
- Remove deprecated
DefaultHostNetworkHostPortsInPodTemplates
feature gate - kubeadm: Remove
update-status
- Remove deprecated v1alpha2 Kubelet gRPC API
- Remove GCE-only
SkipReadOnlyValidationGCE
feature gate - Remove deprecated kubelet iptables switches,
keep-terminated-pod-volumes
Version Updates
Subprojects and Dependency Updates
- cloud-provider-aws to v1.30.0: InstancesV2 interface, include zone information for topology
- cloud-provider-vsphere to v1.30.0: update many dependency versions
- minikube to v1.33.0: multi-control-plane HA clusters, Kubernetes 1.30, ARM64 support