All Products
Search
Document Center

Container Service for Kubernetes:(Deprecated) ACK Release Notes for Kubernetes 1.31

Last Updated:Mar 26, 2026

Container Service for Kubernetes (ACK) strictly abides by the terms of the Certified Kubernetes Conformance Program. This topic covers component versions, breaking changes, new features, and security fixes in Kubernetes 1.31.

Component versions

Component Version
Kubernetes 1.31.9-aliyun.1 and 1.31.1-aliyun.1
etcd v3.5.15
containerd 1.6.34
CoreDNS v1.11.3.2-f57ea7ed6-aliyun
CSI csi-plugin and csi-provisioner updated to the latest versions. See csi-plugin and csi-provisioner release notes.
CNI Flannel v0.15.1.22-20a397e6-aliyun
Terway and TerwayControlplane 1.10.0 and later
The Trunk ENI feature is enabled by default for newly created ACK managed clusters that use Terway as the network plug-in and run Kubernetes 1.31 or later.

Breaking changes

These changes require action before or immediately after upgrading to 1.31.

CephFS volume plug-in removed

The built-in CephFS volume plug-in kubernetes.io/cephfs is removed in 1.31. Use the CephFS CSI driver instead.

If your cluster uses the CephFS volume plug-in, re-deploy your application to use the CephFS CSI driver after upgrading to 1.31.

CephRBD volume plug-in removed

The built-in CephRBD volume plug-in kubernetes.io/rbd is removed in 1.31. Use the RBD CSI driver instead.

If your cluster uses the CephRBD volume plug-in, re-deploy your application to use the RBD CSI driver after upgrading to 1.31.

CSIMigrationPortworx enabled by default

The CSIMigrationPortworx feature gate is enabled by default, migrating volumes from the legacy embedded Portworx plug-in to the Portworx CSI plug-in.

If you use Portworx as a storage solution, install and configure the Portworx CSI plug-in before upgrading to 1.31.

New features

Workload scheduling

MatchLabelKeysInPodAffinity promoted to beta (enabled by default)

To resolve scheduling conflicts during rolling updates where pods violate affinity and anti-affinity rules, specify the new matchLabelKeys and mismatchLabelKeys fields in podAffinity and podAntiAffinity. The scheduler uses these fields to distinguish old pods from new pods during a rollout. See matchLabelKeys and mismatchLabelKeys.

Storage

RecursiveReadOnlyMounts promoted to beta (enabled by default)

Volumes mounted to pods can now be made recursively read-only. All subdirectories and files under the mount are set to read-only mode. See Recursive read-only mounts.

HonorPVReclaimPolicy promoted to beta (enabled by default)

Finalizers can now be added to a PersistentVolume (PV) to ensure that a PV with the Delete reclaim policy is deleted only after the associated backing storage is deleted. See PersistentVolume deletion protection finalizer.

Workloads

JobSuccessPolicy promoted to beta (enabled by default)

A success policy can now be configured for Indexed Jobs. See Job success policy.

kubelet no longer restarts containers on non-image spec changes

If the spec field of a pod changes but the image field is unchanged, the kubelet does not restart the container. This prevents unnecessary pod restarts caused by non-functional configuration updates.

Security and authentication

ServiceAccountTokenNodeBinding promoted to beta (enabled by default)

A ServiceAccount token can now be bound to a specific node. The token is invalidated if it expires, or if the associated node or ServiceAccount is deleted.

API and tooling

DisableNodeKubeProxyVersion promoted to beta (enabled by default)

The status.nodeInfo.kubeProxyVersion field no longer displays the kube-proxy version. The value in this field was inaccurate and did not reflect the actual kube-proxy version running on the node.

kubectl debug custom profiling promoted to beta

kubectl debug now supports custom profiling configuration for troubleshooting pods. See Kubernetes 1.31: Custom Profiling in Kubectl Debug Graduates to Beta.

kubectl streaming migrated from SPDY to WebSocket

kubectl cp, kubectl attach, kubectl exec, and kubectl port-forward now use WebSocket for streaming instead of SPDY. WebSocket is the default streaming protocol for Kubernetes clients including kubectl.

Consistent reads from cache promoted to beta

The Kubernetes API server can now serve consistent reads from cache instead of fetching the full dataset from etcd, improving the efficiency of List requests. See Consistent reads from cache.

CRD validation

caBundle validation enforced

If the caBundle field in a CustomResourceDefinition (CRD) is non-empty but contains an invalid value or no CA certificates, the CRD stops serving requests. Once a valid caBundle is established, updates that would render it invalid or empty are rejected to prevent service disruption.

Security fixes

The following CVEs are fixed in 1.31.9-aliyun.1:

References