Alibaba Cloud Container Service for Kubernetes is a certified Kubernetes distribution. This topic describes the major changes in the ACK release of Kubernetes 1.35, covering upgrade considerations, breaking changes, feature updates, deprecations and API removals, and feature gates.
Component versions
The following table lists the supported versions of core components in ACK clusters.
Core component | Version |
Kubernetes | 1.35.1-aliyun.1, 1.35.2-aliyun.1 |
etcd | v3.5.21 |
containerd | 2.1.6 |
CoreDNS | v1.12.1.2 |
CSI | Upgraded to the latest supported version. For details, see the changelogs for csi-plugin and csi-provisioner. |
CNI | Flannel v0.28.0.6 |
Terway and TerwayControlplane are v1.15.0 or later |
Breaking changes
Starting with version 1.35, Kubernetes no longer supports cgroup v1. Support for cgroup v2 graduated to Stable in version 1.25. The node operating system must be upgraded to support cgroup v2, or the kubelet will fail to start.
For information about cgroup version support in ACK OS images, see Operating systems. To learn how to change or upgrade the operating system, see Change operating systems.
Feature updates
The
PreferSameNodeoption for the ServicetrafficDistributionfield has graduated to General Availability (GA). This option prioritizes routing traffic to endpoints on the same node, falling back to other nodes only when no local endpoints are available.The feature gate for this feature,
PreferSameTrafficDistribution, has been enabled by default since version 1.34 and supports bothPreferSameNodeandPreferSameZone. The originalPreferCloseoption has been renamed toPreferSameZone.PodObservedGenerationTrackinghas graduated to GA. When a Pod'sspecis updated, its.metadata.generationis incremented. The kubelet now records thespecversion it has processed in the Pod's.status.observedGenerationfield. This allows controllers and Operators to accurately determine if changes to a Pod, such as in-place scaling, have taken effect on the node, preventing issues caused by status update delays.The node topology manager policy option
max-allowable-numa-nodes(max-allowable-numa-nodes) has graduated to GA. The topology manager can now correctly calculate affinity on servers with more than 8 NUMA nodes.The Downward API now supports injecting node topology labels, such as
topology.kubernetes.io/zoneandtopology.kubernetes.io/region, into Pods.StorageVersionMigrator, promoted to Beta and disabled by default, moves the storage version migration capability from an external tool into the Kubernetes core. For more information, see Move Storage Version Migrator in-tree.MutableCSINodeAllocatableCountis now enabled by default. It allows CSI drivers to periodically update the number of allocatable volumes on a node. This helps resolve an issue where Pods could be scheduled to nodes with insufficient volume capacity and get stuck in theContainerCreatingstate.Opportunistic batching allows the scheduler to cache intermediate scheduling results, significantly improving scheduling throughput for similar Pods.
MaxUnavailableStatefulSetis promoted to Beta and is enabled by default. This feature allows you to set themaxUnavailablefield in a StatefulSet's rolling update strategy to specify the maximum number of unavailable Pods during an update.Pod Certificates is promoted to Beta and is disabled by default. This feature supports generating certificates for Pods to perform mutual TLS authentication with the kube-apiserver. It also supports automatic certificate rotation, providing a more secure authentication method than traditional ServiceAccount tokens. For details, see KEP-4317: Pod Certificates.
Kubectl now supports the KYAML format. KYAML is a subset of YAML designed for Kubernetes that aims to resolve certain ambiguities and security issues found in standard YAML parsing. You can disable this feature by setting the
KUBECTL_KYAML=falseenvironment variable. For more information, see Introducing KYAML.The
behaviorfield of the HorizontalPodAutoscaler (HPA) now supports configurable tolerance thresholds. Previously, scaling decisions relied on a fixed global tolerance of 10%, which is now configurable.User namespaces is promoted to Beta. This feature allows a Pod to run in a user namespace that is isolated from the host. Container processes can run as root (UID 0) within their namespace but are mapped to an unprivileged, non-zero user ID on the host. This reduces the security risk of privilege escalation from a container escape.
ImageVolumeis now enabled by default, allowing you to use volumes of typeimagein a Pod. This type of volume mounts the contents of a container image as a read-only volume. This feature requires containerd v2.1 or later.KubeletEnsureSecretPulledImagesis promoted to Beta and is enabled by default. This feature improves security in multi-tenant clusters by enforcing credential checks for Pods that useimagePullPolicy: IfNotPresent. It prevents a scenario where one Pod with credentials pulls a private image, allowing other Pods on the same node without credentials to access the sensitive image from the local cache.ContainerRestartRules, promoted to Beta and enabled by default, enables more granular, container-level restart policy configuration. It allows you to override the Pod-level restart policy by specifyingrestartPolicyandrestartPolicyRulesfor individual containers. For details, see Individual container restart policy and rules.CSI drivers can now set the
CSIDriverobject'sspec.serviceAccountTokenInSecretsfield totrueto mount ServiceAccount tokens via a Secret instead of placing them directly in thevolume context. This helps prevent credentials from being accidentally exposed in logs and error messages. For more information, see CSI driver opt-in for service account tokens via secrets field.A new
terminatingReplicasfield has been added to Deployments. It records the number of Pods that have a deletion timestamp set but have not yet been completely removed from the system.Fixed CVE-2024-61732 and CVE-2024-68121 in version 1.35.2-aliyun.1.
Deprecations
Starting from version 1.35, the kube-proxy
ipvs modehas been deprecated and is scheduled for removal in a future release. The official recommendation is to switch to nftables mode, which has been stable since v1.33. Becausenftables modeis relatively new, ACK clusters created with version 1.35 still default toipvs mode. However, you can now selectnftablesas the Service Forwarding Mode when creating a new cluster.We recommend using Terway Datapath V2, which operates independently of kube-proxy.
Version 1.35 is the last release to support containerd 1.x. Before upgrading to Kubernetes 1.36 or later, you must upgrade containerd to a 2.x version. ACK clusters have been using containerd 2.x by default since version 1.33. For details, see Introduction to containerd 2.1.
References
For the complete changelog for Kubernetes 1.35, see CHANGELOG-1.35 and Kubernetes v1.35: Timbernetes (The World Tree Release).