All Products
Search
Document Center

Container Compute Service:Kubernetes 1.28 release notes

Last Updated:Mar 26, 2026

Container Service for Kubernetes (ACK) strictly abides by the terms of the Certified Kubernetes Conformance Program. This topic describes the Kubernetes 1.28 updates, including version updates, pre-upgrade actions, major changes, new features, deprecated features and APIs, and feature gates.

Version updates

The following key components are updated by Alibaba Cloud Container Compute Service (ACS) to support Kubernetes 1.28.

Key componentVersion
Kubernetesv1.28.3-aliyunacs.2
etcdv3.5.9
CoreDNSv1.9.3.10-7dfca203-aliyun
CRIcontainerd 1.6.22.1-20240524143336
CSIv1.30.1-1.acs-685ce77-aliyun
CNITerway 1.5.0 and later, and TerwayControlplane 1.5.0 and later

Before you upgrade

Read this section before upgrading to Kubernetes 1.28. It covers changes that require action.

Custom scheduler plugins: The scheduling framework's EnqueueExtension interface has changed. If your cluster uses a custom scheduler plugin, update the plugin to use ClusterEventWithHint instead of ClusterEvent. See Changes in the scheduling framework for migration details.

CephFS and Ceph RBD volume plugins: If your cluster uses CephFS or Ceph RBD volume plugins, verify that the plugins use an out-of-tree driver rather than the Kubernetes built-in plugin driver. Check the compatibility, stability, and performance of the out-of-tree driver before upgrading.

Terms

Feature gates

Feature gates control the activation state of features at different stages:

  • Alpha: Disabled by default.

  • Beta: Enabled by default.

  • GA: Enabled by default and cannot be disabled. The corresponding feature gate is no longer needed.

Major changes

Scheduler optimization

The scheduling logic is optimized in Kubernetes 1.28 to reduce invalid retries and improve performance. If your cluster uses a custom scheduler plugin, update the plugin to improve performance. See Changes in the scheduling framework.

CSI migration and CephFS removal

The Kubernetes community provides the CSI migration solution to replace in-tree storage plugin drivers with out-of-tree drivers that use standard CSI APIs. Key milestones:

  • Kubernetes 1.25: CSI migration reached GA.

  • Kubernetes 1.27: The storage.k8s.io/v1beta1 API and the Elastic Block Service (EBS) plugin were removed.

  • Kubernetes 1.28: The CephFS volume plugin code is removed. The kubernetes.io/rbd plugin is deprecated. Use the CephFS CSI driver instead. Migration of Ceph RBD volumes to an out-of-tree CSI driver is no longer supported in this version.

CVE fixes

The following CVE vulnerabilities are fixed in version 1.28.9-aliyun.1:

  • CVE-2023-45288

  • CVE-2024-3177

  • CVE-2024-24786

Features and capabilities

Non-graceful node shutdown (GA)

The non-graceful node shutdown feature has reached GA. When a node shuts down abnormally — for example, due to a power failure — StatefulSets can create pods with the same name on another node to prevent service interruption.

NodeOutOfServiceVolumeDetach (GA)

The NodeOutOfServiceVolumeDetach feature gate has reached GA. When a node shuts down abnormally, volume detach operations are immediately performed for terminated pods on that node, allowing pods to recover quickly on other nodes.

Retroactive default StorageClass assignment (GA)

The retroactive default StorageClass assignment feature has reached GA. Previously, a PersistentVolumeClaim (PVC) created without a storageClassName field remained in the Pending state if no default StorageClass existed. When a default StorageClass is created, such PVCs now automatically use it.

Sidecar containers (Alpha)

The SidecarContainers feature gate is introduced in Alpha and is disabled by default. It lets you specify when sidecar containers start — for example, starting log collection containers before other containers to improve log collection reliability. See Kubernetes v1.28: Introducing native sidecar containers.

Job improvements

JobPodReplacementPolicy (Alpha)

The JobPodReplacementPolicy feature gate is in Alpha. Unlike the deletionTimestamp approach that creates replacement pods immediately after deletion, this policy creates replacement pods only after pods reach the Failed phase (status.phase: Failed). This prevents two pods from simultaneously using the same index and node resources.

JobBackoffLimitPerIndex (Alpha)

The JobBackoffLimitPerIndex feature gate is in Alpha. Set .spec.backoffLimitPerIndex to limit the maximum number of retries for pod failures per index. Previously, if consecutive pod failures for an index reached .spec.backoffLimit, the entire indexed Job failed.

Job scale warnings

If the completion field of an indexed Job exceeds 100,000, or the parallelism field exceeds 10,000, and large numbers of pods fail, pod terminal phase tracing may fail. Kubernetes now displays warnings when you set these fields to excessively large values.

Pod indexes as labels

Pod indexes (sequence numbers) are added as labels to pods created by indexed Jobs and StatefulSets.

ValidatingAdmissionPolicy (Beta)

The ValidatingAdmissionPolicy feature gate is in Beta. It provides a declarative alternative to admission webhooks for validating resource requests. Write complex validation rules using Common Expression Language (CEL) expressions. The API server validates resource requests against these CEL expressions.

CRD validation enhancements

The reason and fieldPath fields are added to CustomResourceDefinition (CRD) validation rules. When CRD validation fails, the API server returns the reason and field path of the failure. See CRD Validation Expression Language.

CEL webhook matching

CEL expressions can now be used in webhook matching conditions. Up to 64 matching conditions are supported per webhook. See Matching requests: matchConditions.

PVC resize status field update

The .status.resizeStatus field of a PVC is replaced with the .status.allocatedResourceStatus map field to store the resize states of resources. See PersistentVolumeClaimStatus.

Controller manager concurrency flags

Two new flags are added to the Kubernetes controller manager:

API server optimizations

  • Reduced memory usage for GetList: Memory usage when getting a list (GetList) from the cache is reduced. See GetList test data.

  • Endpoint cleanup on graceful shutdown: The issue where a Kubernetes Service endpoint was not removed when only one replicated API server existed is fixed. Endpoints are now correctly removed during graceful shutdown.

  • Lazy OpenAPI v2 controller: The OpenAPI v2 controller is made lazy and OpenAPI v2 specs are reduced. When no clients request OpenAPI v2, the API server's CPU and memory usage is reduced and installing large numbers of CRDs is more efficient. Note that this slows down processing of first-time requests. Update your client to a version that supports OpenAPI v3.

  • ConsistentListFromCache (Alpha): The Consistent Reads from Cache feature gate is in Alpha. It allows the API server to use the watch cache to guarantee consistent reads for LIST requests.

  • Expanded metrics collection: A wider range of metrics can be collected by calling the metrics API.

Deprecated features

Kubernetes 1.28

The following features and plugins are deprecated or removed in Kubernetes 1.28.

In-tree CephFS plugin removed

The in-tree CephFS plugin code is removed in Kubernetes 1.28. Use the CephFS CSI driver.

Ceph RBD migration deprecated

Support for migrating Ceph RBD volumes to an out-of-tree CSI driver is deprecated and will be removed in a later version. Complete the migration before the in-tree plugin code is removed.

`kubernetes.io/rbd` RBD volume plugin deprecated

The kubernetes.io/rbd RBD volume plugin is deprecated and will be removed in a later version. Use the CephFS CSI driver.

KMSv1 deprecated

KMSv1 is deprecated and will only receive security updates. To continue using KMSv1, set --feature-gates=KMSv1=true. Use KMSv2 instead. See Mark KMS v1beta1 as deprecated.

Deprecated controller manager flags

The following flags are deprecated in Kubernetes controller manager commands:

  • --volume-host-cidr-denylist

  • --volume-host-allow-local-loopback

Deprecated kubelet flag

The --azure-container-registry-config flag is deprecated in kubelet commands. Use the image-credential-provider-config and --image-credential-provider-bin-dir flags instead.

Windows node pools

Creating Windows node pools is no longer supported.

Deprecated APIs

The storage.k8s.io/v1beta1 version of the CSIStorageCapacity API was deprecated in Kubernetes 1.24 and removed in Kubernetes 1.27. The CSIStorageCapacity API lets you query available storage capacity to ensure pods are scheduled to nodes with sufficient resources.

Use the storage.k8s.io/v1 version, available in Kubernetes 1.24 and later. See Storage Capacity Constraints for Pod Scheduling KEP.

Feature gates

This section lists the major feature gate changes in Kubernetes 1.28. For the full list, see Feature Gates.

Kubernetes 1.28

Feature gateStageDefaultDescription
NodeOutOfServiceVolumeDetachGAAlways enabledAdds the node.kubernetes.io/out-of-service taint to mark a node as out-of-service. Pods that do not match tolerations are forcefully evicted and volumes are immediately detached.
AdmissionWebhookMatchConditionBetaEnabledAllows CEL expressions as webhook matching conditions.
UnknownVersionInteroperabilityProxyAlphaDisabledRoutes requests to the correct API server when multiple API server versions exist. See Mixed Version Proxy.
IPTablesOwnershipCleanupGAAlways enabledCauses kubelet to no longer create KUBE-MARK-DROP and KUBE-MARK-MASQ iptables rules.
ConsistentListFromCacheAlphaDisabledAllows the API server to use the watch cache to guarantee consistent reads for LIST requests.
ProbeTerminationGracePeriodGAEnabledAllows probe-level terminationGracePeriodSeconds.

Removed GA feature gates

The following feature gates reached GA and are removed in Kubernetes 1.28 (always enabled, no longer configurable):

DelegateFSGroupToCSIDriver, DevicePlugins, KubeletCredentialProviders, MixedProtocolLBService, ServiceInternalTrafficPolicy, ServiceIPStaticSubrange, and EndpointSliceTerminatingCondition.

References

For the complete release notes, see CHANGELOG-1.27 and CHANGELOG-1.28.