ACK telah tersertifikasi sesuai standar Kubernetes. Topik ini merangkum patch, fitur, API yang ditinggalkan, serta perubahan feature gate untuk ACK pada Kubernetes 1.27 dan 1.28.
Changelog upstream: CHANGELOG-1.27, CHANGELOG-1.28.
Sebelum melakukan upgrade ke Kubernetes 1.28, tinjau perubahan breaking berikut:
-
Plugin volume CephFS in-tree dihapus: Plugin volume CephFS in-tree telah dihapus pada versi 1.28. Kluster yang menggunakan driver in-tree akan mengalami gangguan setelah upgrade. Lakukan migrasi ke driver CSI CephFS sebelum upgrade dan evaluasi risiko terkait kompatibilitas, stabilitas, atau performa.
-
Migrasi CSI Ceph RBD tidak lagi memungkinkan: Migrasi volume Ceph RBD (
kubernetes.io/rbd) ke driver CSI out-of-tree tidak lagi dimungkinkan di Kubernetes 1.28 dan akan sepenuhnya dihapus pada rilis mendatang. Selesaikan migrasi sebelum penghapusan tersebut. -
Feature gate IPv6DualStack dihapus: Feature gate
IPv6DualStacktelah dihapus di Kubernetes 1.27. Jika Anda mengatur ini secara manual dalam konfigurasi kluster, hapus pengaturan tersebut sebelum upgrade. -
Flag endpoint kubelet dipindahkan ke file konfigurasi: Flag
--container-runtime-endpointdan--image-service-endpointtidak dapat lagi diberikan sebagai argumen baris perintah kubelet. Pindahkan pengaturan ini ke file konfigurasi kubelet sebelum upgrade.
Versi komponen
Versi komponen inti untuk kluster ACK pada Kubernetes 1.28.
| Komponen inti | Versi |
|---|---|
| Kubernetes | 1.28.15-aliyun.1, 1.28.9-aliyun.1, dan 1.28.3-aliyun.1 |
| etcd | v3.5.9 |
| CoreDNS | v1.9.3.10-7dfca203-aliyun |
| CRI | containerd 1.6.20 |
| CSI | Upgrade ke versi terbaru yang didukung. Changelog: csi-plugin, csi-provisioner. |
| CNI | Flannel v0.15.1.22-20a397e6-aliyun |
| CNI (Terway) | Terway dan TerwayControlplane v1.5.0 dan versi lebih baru |
| NVIDIA Container Runtime | v3.13.0 |
| Ingress Controller | v1.8.0-aliyun.1 |
Patch keamanan
| Versi | CVE yang diperbaiki |
|---|---|
| 1.28.15-aliyun.1 | CVE-2024-10220 |
| 1.28.9-aliyun.1 | CVE-2023-45288, CVE-2024-3177, CVE-2024-24786 |
Fitur baru
Kubernetes 1.28
Pematian node tidak mulus (GA)
Ketika sebuah node mati secara tak terduga—misalnya karena gangguan listrik—Kubernetes secara otomatis menjadwalkan ulang Pod StatefulSet dengan nama yang sama di node lain, mencegah gangguan layanan. Fitur ini kini telah mencapai GA.
Penugasan StorageClass default retroaktif (GA)
Sebelumnya, PVC tanpa storageClassName tetap berstatus Pending selamanya jika tidak ada StorageClass default. Kubernetes kini menetapkan StorageClass default yang dibuat belakangan kepada PVC yang belum terikat dan tidak memiliki storageClassName. Fitur ini kini telah mencapai GA.
Performa penjadwal
Logika retry penjadwal mengurangi upaya penjadwalan yang tidak valid, sehingga meningkatkan performa. Jika kluster Anda menggunakan plugin penjadwal kustom, perbarui plugin tersebut agar sesuai dengan framework penjadwalan baru. Lihat Perubahan framework penjadwalan.
Penanganan kegagalan Job
Dua feature gate Alpha baru meningkatkan cara Job yang gagal ditangani:
-
`JobPodReplacementPolicy`: Pod pengganti hanya dibuat ketika pod asli mencapai fase
Failed(status.phase: Failed), bukan saat memilikideletionTimestamp. Hal ini mencegah dua pod secara bersamaan menempati indeks yang sama dan mengonsumsi sumber daya node. -
`JobBackoffLimitPerIndex`: Tetapkan
.spec.backoffLimitPerIndexpada Indexed Job untuk membatasi jumlah percobaan ulang per indeks, alih-alih menghitung semua kegagalan terhadap satu.spec.backoffLimitbersama. Indeks yang terus-menerus gagal tidak lagi menyebabkan seluruh Job gagal.
Peringatan Tugas Terindeks Besar
Jika sebuah Job memiliki completion di atas 100.000 dan parallelism di atas 10.000 dengan banyak kegagalan pod, Kubernetes menampilkan peringatan—status terminasi mungkin tidak dapat dilacak secara andal pada skala tersebut.
Penyempurnaan validasi CRD
Field reason dan fieldPath ditambahkan ke aturan validasi CRD. Ketika ekspresi CEL gagal, server API mengembalikan kode reason dan path field yang gagal. Lihat CRD Validation Expression Language.
Pencocokan webhook dengan ekspresi CEL
matchConditions webhook kini mendukung ekspresi CEL (maksimal 64 per webhook), memberikan kontrol detail halus terhadap permintaan mana yang memicu webhook tanpa memerlukan admission controller penuh. Lihat Matching requests: matchConditions.
ValidatingAdmissionPolicy (Beta)
ValidatingAdmissionPolicy menyediakan alternatif deklaratif dalam kluster terhadap validating admission webhook. Tulis ekspresi CEL langsung dalam objek kebijakan; server API mengevaluasinya pada setiap permintaan yang cocok—tanpa infrastruktur webhook. Lihat ValidatingAdmissionPolicy.
Resize status field of PVC has been replaced
Field .status.resizeStatus pada PVC diganti dengan .status.allocatedResourceStatus, sebuah map yang melacak status resize setiap resource secara independen. Perbarui semua tool yang membaca .status.resizeStatus. Lihat PersistentVolumeClaimStatus.
Label indeks Pod untuk Indexed Job dan StatefulSet
Pod dari Indexed Job dan StatefulSet kini menyertakan indeks ordinal mereka sebagai label, mempermudah pemilihan pod berdasarkan posisi.
Flag konkurensi Kube Controller Manager
Dua flag baru mengontrol konkurensi controller:
-
--concurrent-cron-job-syncs: Menetapkan jumlah worker rekonsiliasi CronJob yang berjalan secara konkuren. -
--concurrent-job-syncs: Menetapkan jumlah worker rekonsiliasi Job yang berjalan secara konkuren.
Lihat --concurrent-cron-job-syncs dan --concurrent-job-syncs.
Optimisasi server API
-
Penggunaan memori GetList berkurang: Permintaan daftar yang dilayani dari cache menggunakan lebih sedikit memori. Lihat Data uji GetList.
-
Perbaikan pembersihan endpoint: Memperbaiki bug di mana endpoint Service Kubernetes tidak dihapus saat hanya tersisa satu replika server API selama shutdown yang mulus.
-
Agregasi malas OpenAPI v2: Controller OpenAPI v2 kini hanya mengumpulkan informasi CRD saat diminta, mengurangi beban CPU dan memori ketika tidak ada klien yang mengakses endpoint tersebut. Hal ini mempercepat waktu instalasi untuk jumlah CRD yang besar, tetapi mungkin memperlambat permintaan pertama. Migrasikan klien ke OpenAPI v3.
-
ConsistentListFromCache (Alpha): Feature gate
ConsistentListFromCachememungkinkan server API melayani permintaan LIST dari watch cache dengan jaminan konsistensi, mengurangi beban etcd. -
Metrik pemantauan tambahan: Lebih banyak metrik tersedia melalui endpoint metrik.
Kubernetes 1.27
Status terminasi Pod diperbaiki
-
Pod yang dihapus saat berstatus
Pendingkini diatur menjadiFailed. -
Pod yang dihapus saat berstatus
Runningdiatur menjadiSucceededatauFailedberdasarkan kode keluar kontainer.
Ini memperbaiki bug di mana pod dengan kebijakan kegagalan bisa terjebak di status Pending. Jika sebuah pod memiliki RestartPolicy=Always, pod tersebut mungkin menunjukkan status Succeeded setelah dihapus—tinjau controller Anda jika hal ini relevan. Lihat Setel status terminasi untuk pod yang tidak memerlukan restart.
ReadWriteOncePod untuk PersistentVolumes (Beta)
ReadWriteOncePod membatasi volume hanya untuk satu pod—lebih restriktif daripada ReadWriteOnce, yang memungkinkan beberapa pod pada node yang sama. Lihat Single Pod Access Mode for PersistentVolumes naik ke Beta.
Batasan penyebaran topologi Pod (Beta)
Beberapa opsi batasan penyebaran topologi kini berstatus Beta dan diaktifkan secara default: minDomains (domain memenuhi syarat minimum), nodeTaintsPolicy (menghitung node yang memiliki taint), nodeAffinityPolicy (menghitung node yang dikecualikan oleh afinitas), dan whenUnsatisfiable (perilaku saat batasan tidak dapat dipenuhi). Lihat Kebijakan penyebaran topologi pod yang lebih detail halus.
Validasi field sisi server (GA)
Server API kini memvalidasi field resource di sisi server. kubectl secara otomatis menggunakan mode Strict dan melewati validasi sisi klien, mengembalikan error jika server menolak suatu field. Lihat Server Side Field Validation and OpenAPI V3 move to GA.
OpenAPI v3 (GA)
OpenAPI v3, yang diperkenalkan di Kubernetes 1.23, kini telah mencapai GA. Lihat Server-side field validation and OpenAPI v3 move to GA.
Tipe metrik HPA ContainerResource (Beta)
HPA kini mendukung tipe metrik ContainerResource, melakukan scaling berdasarkan penggunaan resource kontainer individual alih-alih rata-rata pod. Ini memperbaiki masalah umum di mana sidecar dengan penggunaan rendah menurunkan rata-rata di bawah ambang batas, mencegah scale-out meskipun kontainer aplikasi kehabisan resource. Lihat Container resource metrics.
Penyempurnaan StatefulSet (Beta)
Dua fitur StatefulSet mencapai Beta:
-
`StatefulSetStartOrdinal`: Mulai ordinal pod dari angka selain nol menggunakan field
ordinals.start. -
`StatefulSetAutoDeletePVC`: Kontrol apakah StatefulSet menghapus PVC yang dibuat dari
volumeClaimTemplatesaat pod dihapus atau StatefulSet diskalakan turun.
Scaling vertikal pod in-place (Alpha)
InPlacePodVerticalScaling (Alpha, dinonaktifkan secara default) memungkinkan Anda mengubah requests dan limits CPU serta memori untuk kontainer yang sedang berjalan tanpa me-restart pod. Lihat Ubah ukuran resource CPU dan memori yang dialokasikan ke kontainer.
Penarikan gambar paralel
Tetapkan serializeImagePulls: false dalam konfigurasi kubelet untuk menarik gambar secara paralel. Gunakan maxParallelImagePulls (ditambahkan di 1.27) untuk membatasi jumlah maksimum penarikan konkuren dan menghindari saturasi lebar pita jaringan atau I/O disk. Lihat Serial and parallel image pulls.
Snapshot grup volume (Alpha)
API snapshot grup volume memungkinkan Anda membuat snapshot konsisten crash dari beberapa PersistentVolume sekaligus. Lihat Memperkenalkan API untuk snapshot grup volume.
Fitur dan API yang ditinggalkan
Kubernetes 1.28
| Fitur yang Ditinggalkan | Dampak | Tindakan yang Diperlukan |
|---|---|---|
| Plugin volume CephFS in-tree | Kode dihapus di 1.28. Workload yang menggunakan driver in-tree akan rusak. | Migrasikan ke driver CSI CephFS sebelum upgrade. |
| Migrasi CSI Ceph RBD | Migrasi volume Ceph RBD ke driver CSI out-of-tree tidak lagi dimungkinkan di 1.28 dan akan sepenuhnya dihapus pada rilis mendatang. | Selesaikan migrasi sebelum penghapusan. |
Plugin volume RBD (kubernetes.io/rbd) |
Ditinggalkan; akan dihapus pada rilis mendatang. | Beralihlah ke driver CSI CephFS. |
| Key Management Service (KMS) v1 | Ditinggalkan. | Gunakan KMSv2. Untuk terus menggunakan KMSv1 sementara, atur --feature-gates=KMSv1=true. Lihat Tandai KMS v1beta1 sebagai deprecated. |
Flag KCM --volume-host-cidr-denylist dan --volume-host-allow-local-loopback |
Ditinggalkan; akan dihapus pada rilis mendatang. | Hapus flag ini dari konfigurasi Kube Controller Manager Anda. |
Flag kubelet --azure-container-registry-config |
Ditinggalkan; akan dihapus pada rilis mendatang. | Gunakan image-credential-provider-config dan --image-credential-provider-bin-dir sebagai gantinya. |
| Kelompok node Windows | Pembuatan kelompok node Windows tidak lagi didukung. | Gunakan kelompok node Alibaba Cloud Linux 3 atau ContainerOS 3.1. Lihat Buat dan kelola kelompok node. |
Kubernetes 1.27
| Fitur yang Ditinggalkan | Dampak | Tindakan yang Diperlukan |
|---|---|---|
| Plugin penyimpanan AWS EBS in-tree | Digantikan oleh plugin CSI out-of-tree. | Lihat cloud-provider-aws. |
Field spec.externalID pada Node |
Ditinggalkan; klien yang memperbarui field ini akan menerima peringatan. | Berhenti memperbarui spec.externalID. |
Anotasi seccomp Alpha (seccomp.security.alpha.kubernetes.io/pod, container.seccomp.security.alpha.kubernetes.io) |
Dihapus di v1.27. Workload yang bergantung pada anotasi ini diam-diam kehilangan pengaturan seccomp. | Gunakan field securityContext.seccompProfile sebagai gantinya. |
Flag KCM --pod-eviction-timeout dan --enable-taint-manager |
Dihapus di 1.27. | Hapus flag ini dari konfigurasi Kube Controller Manager Anda. |
Flag kubelet --container-runtime |
Dihapus di 1.27 (ditinggalkan sejak 1.24). | Tidak perlu tindakan; nilai default remote tetap dipertahankan. |
Flag kubelet --container-runtime-endpoint dan --image-service-endpoint (sebagai flag CLI) |
Tidak dapat lagi diatur sebagai flag baris perintah. | Pindahkan ke file konfigurasi kubelet. |
SecurityContextDeny admission controller |
Ditinggalkan; akan dihapus pada rilis mendatang. | Migrasikan ke Pod Security Admission atau validating webhook. |
API yang ditinggalkan
API storage.k8s.io/v1beta1 CSIStorageCapacity ditinggalkan di 1.24 dan dihapus di 1.27. Gunakan storage.k8s.io/v1 (tersedia sejak 1.24). Lihat Storage Capacity Constraints for Pod Scheduling KEP.
Perubahan feature gate
Feature gate menentukan tingkat kematangan fitur Kubernetes:
-
Alpha: Dinonaktifkan secara default. Bersifat eksperimental dan dapat berubah.
-
Beta: Diaktifkan secara default. Cukup stabil untuk sebagian besar kluster.
-
GA (Generally Available): Selalu diaktifkan. Feature gate dihapus.
Dinaikkan ke GA
Feature gate berikut telah mencapai GA dan diaktifkan secara permanen. Gate tersebut dihapus.
Di Kubernetes 1.28:
| Feature gate | Fungsinya |
|---|---|
NodeOutOfServiceVolumeDetach |
Ketika node.kubernetes.io/out-of-service ditambahkan ke sebuah node, pod yang tidak mentolerir kondisi tersebut dihapus secara paksa dan volumenya segera dilepas, memungkinkan pemulihan cepat di node lain. |
IPTablesOwnershipCleanup |
Kubernetes tidak lagi membuat rantai iptables KUBE-MARK-DROP dan KUBE-MARK-MASQ. |
ProbeTerminationGracePeriod |
Mengaktifkan terminationGracePeriodSeconds tingkat probe untuk menggantikan periode tenggang tingkat pod pada probe liveness dan startup. |
DelegateFSGroupToCSIDriver, DevicePlugins, KubeletCredentialProviders, MixedProtocolLBService, ServiceInternalTrafficPolicy, ServiceIPStaticSubrange, EndpointSliceTerminatingCondition |
Berbagai fitur stabil kini selalu diaktifkan. Feature gate dihapus. |
Di Kubernetes 1.27:
| Feature gate | Fungsinya |
|---|---|
ExpandCSIVolumes, ExpandInUsePersistentVolumes, ExpandPersistentVolumes |
Ekspansi volume untuk volume CSI, PV yang sedang digunakan, dan PV secara umum. Ketiganya kini selalu diaktifkan. |
CSIInlineVolume |
Volume CSI inline dalam spesifikasi pod. GA sejak 1.25, dihapus di 1.27. |
EphemeralContainers |
Kontainer debug ephemeral. GA sejak 1.25, feature gate dihapus. |
LocalStorageCapacityIsolation |
Batas ketat penggunaan emptyDir per pod; kubelet menghapus pod yang melebihi batas tersebut. GA sejak 1.25, dihapus di 1.27. |
NetworkPolicyEndPort |
endPort dalam aturan NetworkPolicy untuk menentukan range port. GA sejak 1.25, dihapus di 1.27. |
StatefulSetMinReadySeconds |
minReadySeconds pada StatefulSet. GA sejak 1.25, dihapus di 1.27. |
DaemonSetUpdateSurge |
maxSurge pada rolling update DaemonSet. GA sejak 1.25, dihapus. |
IdentifyPodOS |
os pada pod untuk menentukan sistem operasi. GA sejak 1.25, dihapus. |
CSIMigration |
Migrasi in-tree ke CSI out-of-tree mencapai GA di v1.25. Feature gate selalu diaktifkan dan dihapus. |
Dinaikkan ke Beta (diaktifkan secara default)
Di Kubernetes 1.28:
| Feature gate | Fungsinya |
|---|---|
AdmissionWebhookMatchCondition |
Ekspresi CEL dalam matchConditions webhook. Maksimal 64 kondisi per webhook. |
Di Kubernetes 1.27:
| Feature gate | Fungsinya |
|---|---|
StatefulSetStartOrdinal |
Mulai ordinal pod StatefulSet dari angka bukan nol. |
StatefulSetAutoDeletePVC |
Kontrol penghapusan PVC otomatis saat pod StatefulSet dihapus. |
ReadWriteOncePod |
ReadWriteOncePod sebagai mode akses untuk PersistentVolumes. |
Baru dalam Alpha (dinonaktifkan secara default)
Di Kubernetes 1.28:
| Feature gate | Fungsinya |
|---|---|
UnknownVersionInteroperabilityProxy |
Mengarahkan permintaan ke server API yang tepat saat beberapa versi server API berjalan bersamaan dalam kluster. Lihat Mixed version proxy. |
ConsistentListFromCache |
Memungkinkan server API menggunakan watch cache untuk melayani permintaan LIST dengan jaminan konsistensi. |
Di Kubernetes 1.27:
| Feature gate | Fungsinya |
|---|---|
NodeLogQuery |
Kueri log node dengan kubectl setelah mengatur enableSystemLogHandler: true dan enableSystemLogQuery: true dalam konfigurasi kubelet. |
ServiceNodePortStaticSubrange |
Membagi rentang NodePort menjadi dua bagian. Alokasi dinamis menggunakan bagian atas; bagian bawah dicadangkan untuk alokasi statis, mengurangi konflik port. Lihat Hindari tabrakan saat menetapkan port untuk Service NodePort. |
InPlacePodVerticalScaling |
Ubah ukuran CPU dan memori kontainer tanpa me-restart pod. |
Dihapus (tidak perlu dikonfigurasi lagi)
Di Kubernetes 1.27:
Feature gate IPv6DualStack telah dihapus setelah mencapai GA di v1.23. Jika Anda mengatur ini secara manual dalam konfigurasi kluster, hapus pengaturan tersebut sebelum upgrade.