Alibaba Cloud Container Service for Kubernetes is a certified Kubernetes-conformant service. This topic describes the major changes in the Kubernetes 1.35 release for ACK, including upgrade considerations, major changes, new features, deprecated features and APIs, and feature gates.
Component Version Guide
The following table shows the supported versions of core components in ACK clusters.
Core Component | Version Number |
Kubernetes | 1.35.1-aliyun.1 |
etcd | v3.5.21 |
containerd | 2.1.5 |
CoreDNS | v1.12.1.2 |
CSI | Upgrade to the latest supported version of the component. For more information, see the component change records for csi-plugin and csi-provisioner. |
CNI | Flannel v0.15.1.23-33d25c1-aliyun |
Terway and TerwayControlplane are v1.15.0 or later |
Major Changes
As of version 1.35, Kubernetes no longer supports cgroup v1. Support for cgroup v2 became stable in version 1.25. Node operating systems must support cgroup v2. Otherwise, the kubelet will not start.
For information about cgroup version support for ACK operating system images, see Operating System. For information about how to replace or upgrade an operating system, see Replace an Operating System.
Feature Changes
The
PreferSameNodeoption in thetrafficDistributionfield of a Service is now generally available (GA). This option prioritizes routing traffic to endpoints on the same node. It falls back to other nodes only when no endpoints are available on the current node.The
PreferSameTrafficDistributionfeature gate for this feature has been enabled by default since version 1.34. It supports bothPreferSameNodeandPreferSameZone. The originalPreferCloseoption has been renamed toPreferSameZone.PodObservedGenerationTrackingis now stable. When a Pod'sspecupdates, its.metadata.generationincrements. Kubelet records the processedspecversion in the Pod's.status.observedGenerationfield. This helps controllers and operators accurately determine if Pod changes (such as in-place scaling) have taken effect on the node. This avoids issues caused by delayed status updates.The node topology manager policy option
max-allowable-numa-nodes(max-allowable-numa-nodes) is now stable. The topology manager can 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.StorageVersionMigratoris now in Beta and disabled by default. This feature moves Storage Version Migration capabilities from external tools to an internal Kubernetes implementation. For more information, see Move Storage Version Migrator in-tree.MutableCSINodeAllocatableCountis now enabled by default. This feature allows CSI drivers to periodically update the number of allocatable volumes on a node. This helps prevent Pods from being scheduled on nodes with insufficient volume capacity and becoming stuck in theContainerCreatingstate, which can occur when a node's allocatable volume capacity is not updated promptly.The introduction of Opportunistic batching allows the scheduler to cache intermediate scheduling results. This significantly improves the scheduling throughput for similar Pods.
MaxUnavailableStatefulSetis now in Beta and enabled by default. This feature lets you set themaxUnavailablefield in the rolling update strategy for a StatefulSet. This field specifies the maximum number of unavailable Pods during an update.The Pod Certificates feature is now in Beta and disabled by default. This feature supports generating certificates for Pods to perform mutual authentication with the kube-apiserver. It also supports automatic certificate rotation, which provides a more secure authentication method than traditional ServiceAccount tokens. For more information, see KEP-4317: Pod Certificates.
kubectl now supports the KYAML format. KYAML is a subset of YAML designed for Kubernetes to resolve ambiguities and security issues that can occur during 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%. Now, you can configure the threshold flexibly to meet your requirements.User Namespaces (User Namespaces) is now in Beta. This feature allows Pods 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 a non-privileged, non-zero user ID on the host. This reduces the security risk of privilege escalation that can result from a container escape.
The
ImageVolumefeature is now enabled by default. It lets you useimagetype volumes in Pods. This volume type mounts the content of a container image as a read-only volume into the Pod. To use this feature, your containerd version must be 2.1 or later.KubeletEnsureSecretPulledImagesis now in Beta and enabled by default. This feature enhances multi-tenant cluster security by enforcing credential validation for Pods that useimagePullPolicy: IfNotPresent. This prevents a scenario where a Pod with credentials pulls a private image to a node, and then other Pods on the same node without credentials can access that sensitive image from the local cache.ContainerRestartRulesis now in Beta and enabled by default. This feature provides more granular, container-level restart policy configuration. You can override Pod-level restart policies by specifying therestartPolicyandrestartPolicyRulesfields for individual containers. For more information, see Individual container restart policy and rules.CSI drivers now support setting the
spec.serviceAccountTokenInSecretsfield totruein theCSIDriverobject. This setting mounts ServiceAccount tokens using Secrets instead of placing them directly in thevolume context. This helps prevent accidental credential leakage in logs and error messages. For more information, see CSI driver opt-in for service account tokens via secrets field.The Deployment object now includes the
terminatingReplicasfield. This field records the number of Pods that have a deletion timestamp but have not yet been fully removed from the system.
Deprecation Notes
As of version 1.35, the
ipvsmode for kube-proxy is deprecated and scheduled for removal in a future version. The official recommendation is to switch to nftables mode, which has been stable since v1.33. Becausenftablesmode is relatively new, ACK continues to useipvsmode by default when you create new clusters. ACK plans to supportnftablesmode in a subsequent version.You can use Terway Datapath V2, which does not rely on kube-proxy.
Version 1.35 is the last version that supports containerd 1.x. Before you upgrade to version 1.36 or later, you must upgrade containerd to version 2.x. ACK clusters have used containerd 2.x by default since version 1.33. For more information, see containerd 2.1 Introduction.
Reference Links
For the complete changelog for Kubernetes 1.35, see CHANGELOG-1.35 and Kubernetes v1.35: Timbernetes (The World Tree Release).