Alibaba Cloud Container Service for Kubernetes is Kubernetes 1.30 conformant, with changes to upgrade requirements, features, deprecated APIs, and feature gates.
Component versions
Core component versions for ACK clusters.
Core component | Version |
Kubernetes | 1.30.7-aliyun.1, 1.30.1-aliyun.1 |
etcd | v3.5.9 |
containerd | 1.6.39 |
CoreDNS | v1.9.3.10-7dfca203-aliyun |
CSI | Upgrade to the latest supported version. For details, see the release notes for csi-pluginand csi-provisioner. |
CNI | Flannel v0.15.1.22-20a397e6-aliyun |
Terway and TerwayControlplane v1.9.0 and later Note From v1.30, new clusters with Terway NetworkPolicy use eBPF for network policy enforcement. Upgrading clusters or components does not change existing behavior. See Use network policies in ACK clusters. |
Upgrade considerations
Category | Consideration | Solution |
Operating system (OS) | CentOS and Alibaba Cloud Linux 2 are no longer supported for node pools. See [Product Changes] End of maintenance for Alibaba Cloud Linux 2 and CentOS 7. | To change a node pool's operating system, upgrade the node pool. Use ContainerOS or Alibaba Cloud Linux 3 as the replacement OS. |
kube-proxy component | From v1.29, kube-proxy recalculates the node's | If you customized the To verify sysctl modifications, use cluster inspection. |
Features
Version 1.30.7-aliyun.1 addresses the CVE-2024-10220 vulnerability.
In Kubernetes 1.29
The PreStop hook now includes a sleep action that pauses a container before termination, allowing in-flight requests to complete. See KEP-3960: Introducing Sleep Action for PreStop Hook.
The SidecarContainers feature (Beta, enabled by default) lets you set an init container's
restartPolicytoAlways, turning it into a sidecar container that starts, stops, and restarts independently of the main container and other init containers. See Sidecar Containers.Ensure the kubelet version on nodes matches the control plane version.
The new ServiceCIDR resource type dynamically configures the Service cluster IP range (Alpha, disabled by default). See KEP-1880: Multiple Service CIDRs.
PVCs and Containers previously shared the ResourceRequirements struct for
requestsandlimits, causing unwanted PVC API changes when the Containerresourcesstruct changed (e.g., whenclaimswas added). PVCs now use a separate VolumeResourceRequirements struct with onlyrequestsandlimits, excludingclaims. See Volume resource requirements.The
PodReadyToStartContainersfeature (Beta, enabled by default) indicates that a Pod's sandbox and network configuration are ready, helping the kubelet track Pod status. See Pod conditions.PodAffinity and PodAntiAffinity now support
matchLabelKeysandmismatchLabelKeysto distinguish new and old Pods during rolling updates. WithmatchLabelKeys, the Deployment'spod-template-hashlabel lets the scheduler evaluate only Pods with the samepod-template-hashvalue. See KEP-3633.ValidatingAdmissionPolicy type checking now supports CRDs and API Extension types in addition to core Kubernetes API resources. See type-checking.
The new
UserNamespacesPodSecurityStandardsfeature gate integrates user namespaces with Pod Security Standards, allowing containers to run with a non-root or specified user identity (Alpha,falseby default, may remainfalse). See KEP-127: Update PSS based on feature gate.The new DisableNodeKubeProxyVersion feature gate deprecates the
status.nodeInfo.kubeProxyVersionfield, disabling thekubeProxyVersionfield on nodes because the kubelet cannot always accurately identify the kube-proxy version (Alpha, disabled by default).The
JobBackoffLimitPerIndexfeature gate (Beta,trueby default) sets the maximum retries per index in an indexed job.
In Kubernetes 1.30
The ImageMaximumGCAge feature gate configures the maximum age for unused images before garbage collection (default:
"0s", no time limit). Introduced as Alpha in v1.29, promoted to Beta in v1.30.Kubelet adds the
image_pull_duration_secondsmetric to track image pull duration. See List of alpha Kubernetes metrics.The LegacyServiceAccountTokenCleanUp feature gate (GA, enabled by default) auto-cleans unused ServiceAccount Secrets. If an auto-generated Secret is unused and unmounted for one year, the kube-controller-manager labels it with
kubernetes.io/legacy-token-invalid-since. If still unused after another year, the kube-controller-manager deletes it. Remove thekubernetes.io/legacy-token-invalid-sincelabel to revalidate a Secret. See Auto-generated legacy ServiceAccount token clean up and Legacy ServiceAccount token cleaner.In v1.30, if the
--nodeport-addressesflag for kube-proxy is unset (default), NodePort Service updates apply only to the primary node IP, not all IPs. See #122724.The OIDC Issuer URL must differ from the API server's ServiceAccount Issuer URL to prevent configuration conflicts and security issues. See #123561.
The LoadBalancerIPMode feature gate (Beta) adds the
.status.loadBalancer.ingress.ipModefield to LoadBalancer Services to specify load balancer IP forwarding behavior. This field requires the.status.loadBalancer.ingress.ipfield. See Specifying IPMode of load balancer status and Load Balancer IP Mode for Services.Horizontal Pod Autoscaler (HPA) based on container resource metrics graduates to Stable in v1.30, enabling per-container scaling thresholds instead of pod-level only. See Container resource metrics.
The
AdmissionWebhookMatchConditionsfeature gate (GA, always enabled) lets you define match conditions for admission webhooks for granular trigger control. See Dynamic Admission Control.The new
JobSuccessPolicyfeature gate (Alpha) declares a Job complete based on a set of succeeded pods, specified by count or specific pod indexes (for example, pods with index x, y, and z). See Job success/completion policy.The RelaxedEnvironmentVariableValidation feature gate (Alpha, disabled by default) allows most printable ASCII characters (32–126, except
=) in environment variables. See #123385.The
CustomResourceFieldSelectorsfeature gate (Alpha, disabled by default) lets you configureselectableFieldsfor CRDs, enabling field selectors to filter List, Watch, and DeleteCollection requests. See Custom Resource Field Selectors.The
CRDValidationRatchetingfeature gate (Beta, enabled by default) allows the API server to accept updates to existing resources that fail new CRD validations, as long as the invalid parts remain unmodified. This enables safe rollout of new validation rules when migrating to OpenAPI v3 schemas. See CRD Validation ratcheting.The Downward API supports dual-stack (IPv4 and IPv6) via the
status.hostIPsfield. The first IP instatus.hostIPsalways matchesstatus.hostIP. See Downward API.The NodeLogQuery feature gate (Beta, disabled by default) enables querying node service logs via the
/logsendpoint. See Log Query.
Deprecated features
In Kubernetes 1.29
CronJob no longer supports
CRON_TZorTZin.spec.schedule. Use.spec.timeZoneinstead (available since v1.25). See CronJob limitations.The
networking/v1alpha1ClusterCIDR API has been removed. This API was in Alpha and considered controversial.
In Kubernetes 1.30
The
kubectl applycommand removes the--prune-whitelistflag. Use--prune-allowlistinstead. See --prune.v1.30 removes the
SecurityContextDenyadmission plugin (deprecated in v1.27). Use the PodSecurity admission plugin instead (Stable since v1.25, enabled by default).
Deprecated APIs
The flowcontrol.apiserver.k8s.io/v1beta2 API version of FlowSchema and PriorityLevelConfiguration is deprecated in v1.29. Use flowcontrol.apiserver.k8s.io/v1 (available since v1.29) or flowcontrol.apiserver.k8s.io/v1beta3 (available since v1.26) instead.
Notable changes in
flowcontrol.apiserver.k8s.io/v1include:In PriorityLevelConfiguration, the
spec.limited.assuredConcurrencySharesfield has been renamed tospec.limited.nominalConcurrencyShares. This field defaults to 30 only when not specified, and an explicit value of 0 is not changed to 30.Notable changes in
flowcontrol.apiserver.k8s.io/v1beta3include:The
spec.limited.assuredConcurrencySharesfield of PriorityLevelConfiguration has been renamed tospec.limited.nominalConcurrencyShares.
Feature gates
See Feature Gates for version support and descriptions.
Feature gates typically have three stages:
Alpha: The feature is disabled by default.
Beta: The feature is enabled by default.
GA (General Availability): The feature is enabled by default and cannot be disabled. The feature gate is no longer required.
References
Complete changelogs: CHANGELOG-1.29 and CHANGELOG-1.30.