Container Service for Kubernetes (ACK) secara ketat mengikuti Program Kepatuhan Kubernetes Bersertifikat. Topik ini menjelaskan perubahan utama pada ACK dalam rilis Kubernetes 1.28, termasuk catatan peningkatan, perubahan besar, fitur, fitur dan API yang ditinggalkan, serta gerbang fitur.
Versi komponen
Tabel berikut mencantumkan versi komponen inti yang didukung dalam kluster ACK.
Komponen inti | Nomor 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 | |
CNI | Flannel v0.15.1.22-20a397e6-aliyun |
Terway dan TerwayControlplane v1.5.0 dan yang lebih baru | |
NVIDIA Container Runtime | v3.13.0 |
Ingress Controller | v1.8.0-aliyun.1 |
Catatan peningkatan
Komponen | Catatan |
Plugin volume penyimpanan CephFS dan Ceph RBD | Jika kluster Anda menggunakan plugin volume CephFS dan RBD, periksa apakah plugin tersebut tidak lagi bergantung pada driver in-tree yang disediakan oleh Kubernetes dan telah beralih ke driver off-tree. Evaluasi risiko terkait kompatibilitas, stabilitas, atau kinerja. |
Konsep
Pahami konsep berikut sebelum membaca tentang perubahan fitur dan sumber daya yang ditinggalkan dalam versi Kubernetes ini.
Perubahan besar
Dalam Kubernetes v1.28, logika penjadwal dioptimalkan untuk mengurangi pengulangan yang tidak valid, sehingga meningkatkan kinerja keseluruhan.
Jika kluster Anda menggunakan plugin penjadwal kustom, kami menyarankan Anda mengoptimalkan dan memperbarui plugin tersebut guna meningkatkan kinerja penjadwal. Untuk informasi selengkapnya, lihat Perubahan kerangka penjadwalan.
Untuk migrasi CSI, komunitas Kubernetes telah bekerja mengganti plugin penyimpanan in-tree dengan driver out-of-tree yang menerapkan antarmuka standar CSI. Migrasi ini mencapai GA pada Kubernetes v1.25. Dalam Kubernetes v1.27, API
storage.k8s.io/v1beta1dan plugin EBS dihapus. Dalam Kubernetes v1.28, kode untuk plugin volume CephFS dihapus,kubernetes.io/rbdditinggalkan, dan driver CSI CephFS digunakan sebagai gantinya. Selain itu, Anda tidak lagi dapat melakukan migrasi volume Ceph RBD ke driver CSI out-of-tree dalam Kubernetes 1.28.Versi 1.28.15-aliyun.1 memperbaiki CVE-2024-10220.
CVE berikut diperbaiki dalam versi 1.28.9-aliyun.1:
CVE-2023-45288
CVE-2024-24786
Fitur
Dalam Kubernetes 1.27
Status terminasi Pod dikoreksi. Pod yang dihapus dalam status Pending diatur menjadi Failed. Pod yang dihapus dalam status Running diatur menjadi Succeeded atau Failed, tergantung pada status keluar kontainer. Koreksi ini memperbaiki masalah di mana sebuah Pod mungkin tetap berada dalam status Pending saat Pod dengan kebijakan kegagalan yang dikonfigurasi dihapus.
Namun, jika sebuah Pod dikonfigurasi dengan
RestartPolicy=Always, Pod tersebut mungkin berakhir dengan status Succeeded setelah dihapus. Oleh karena itu, Anda mungkin perlu memodifikasi controller Anda. Untuk informasi selengkapnya, lihat Atur status terminasi untuk Pod yang tidak memerlukan restart.Fitur ReadWriteOncePod untuk volume persisten (PV) kini telah mencapai status Beta. Fitur ini membatasi akses volume hanya untuk satu Pod. Untuk informasi selengkapnya, lihat Mode Akses Pod Tunggal untuk PersistentVolumes Naik ke Beta.
Batasan penyebaran topologi Pod mengontrol bagaimana Pod tersebar di beberapa zona dalam kluster. Beberapa fitur yang ditingkatkan telah mencapai Beta, termasuk dukungan untuk menentukan jumlah minimum domain (
minDomains), mempertimbangkan taint (nodeTaintsPolicy) dan afinitas (nodeAffinityPolicy) selama penjadwalan, serta menentukan cara memperlakukan Pod yang tidak memenuhi batasan selama pembaruan bergulir (whenUnsatisfiable). Untuk informasi selengkapnya, lihat Kebijakan penyebaran topologi Pod yang lebih detail halus.
Fitur validasi bidang sisi server untuk memvalidasi sumber daya yang dikirim ke server API telah mencapai GA. kubectl akan melewatkan validasi sisi klien dan secara otomatis menggunakan validasi bidang sisi server dalam mode
Strict, serta melaporkan kesalahan jika validasi gagal. Untuk informasi selengkapnya, lihat Validasi Bidang Sisi Server dan OpenAPI V3 naik ke GA.OpenAPI V3 adalah standar OpenAPI baru. OpenAPI V3 diperkenalkan dalam Kubernetes 1.23 dan telah mencapai GA dalam Kubernetes 1.27. Untuk informasi selengkapnya, lihat Validasi Bidang Sisi Server dan OpenAPI V3 naik ke GA.
Horizontal Pod Autoscaler (HPA) memungkinkan Anda mengonfigurasi ContainerResource untuk kontainer dalam sebuah Pod guna mengaktifkan penskalaan otomatis berdasarkan penggunaan sumber daya setiap kontainer. Fitur ini mencapai Beta dalam Kubernetes 1.27. Berbeda dengan tipe Resource asli yang mempertimbangkan rata-rata penggunaan sumber daya seluruh Pod, pendekatan ini mengevaluasi penggunaan sumber daya setiap kontainer. Hal ini menyelesaikan masalah di mana sebuah Pod gagal melakukan scale-out karena berisi kontainer sidecar dengan penggunaan sumber daya rendah dan kontainer aplikasi dengan penggunaan sumber daya tinggi, sehingga rata-rata yang dihitung tetap di bawah ambang batas scale-out.
Beberapa fitur StatefulSet mencapai Beta. Ini mencakup dukungan untuk memulai ordinal Pod dari angka bukan nol dan dukungan untuk menghapus PVC yang dibuat secara otomatis selama penghapusan tertentu dan scale-in.
Fitur baru memungkinkan Anda mengubah ukuran sumber daya CPU dan memori yang ditentukan dalam bidang
resourcesuntuk kontainer Pod tanpa me-restart Pod atau kontainer tersebut. Sebuah node mengalokasikan sumber daya ke Pod berdasarkanrequestsdan membatasi penggunaan sumber dayanya berdasarkanlimits. Bidang baru ditambahkan ke Pod untuk mendukung fitur ini. Untuk informasi selengkapnya, lihat Ubah ukuran sumber daya CPU dan Memori yang ditetapkan untuk Kontainer. Fitur ini telah mencapai Alpha dalam Kubernetes 1.27 dan dinonaktifkan secara default.Anda dapat mengatur bidang
serializeImagePullskubelet kefalseuntuk mengaktifkan penarikan citra paralel alih-alih penarikan citra serial default. Bidang maxParallelImagePulls ditambahkan dalam v1.27 untuk membatasi jumlah citra yang dapat ditarik secara paralel. Hal ini mencegah penarikan citra mengonsumsi lebar pita jaringan atau I/O disk yang berlebihan.Selain API Volume Snapshot, API snapshot grup volume yang konsisten saat crash diperkenalkan dalam Kubernetes 1.27 yang memungkinkan Anda membuat snapshot untuk beberapa PV pada satu titik waktu. Untuk informasi selengkapnya, lihat Memperkenalkan API untuk Snapshot Grup Volume.
Dalam Kubernetes 1.28
Shutdown node non-graceful telah mencapai GA. Fitur ini memungkinkan StatefulSet membuat Pod dengan nama yang sama di node lain ketika node asli dimatikan secara tak terduga, misalnya karena kegagalan daya, yang membantu menghindari gangguan layanan.
Gerbang fitur NodeOutOfServiceVolumeDetach kini telah mencapai GA. Fitur ini memungkinkan pelepasan volume segera untuk Pod yang dihentikan pada node abnormal. Hal ini membantu Pod pulih dengan cepat di node lain.
Fitur Penetapan StorageClass default retroaktif telah mencapai GA. Sebelumnya, jika Anda membuat PVC tanpa
storageClassNamesaat tidak ada StorageClass default, PVC akan tetap berada dalam status Pending tanpa batas. Sekarang, ketika StorageClass default dibuat, setiap PVC tanpastorageClassNamesecara otomatis diperbarui untuk menggunakan StorageClass default.Dua fitur baru diperkenalkan untuk menangani kegagalan Job.
JobPodReplacementPolicy (gerbang fitur Alpha) memastikan bahwa sebuah Pod diganti hanya ketika mencapai fase Failed (
status.phase: Failed), bukan ketika memilikideletionTimestampdan sedang dalam proses terminasi, untuk mencegah dua Pod secara bersamaan menempati indeks dan sumber daya node yang sama.JobBackoffLimitPerIndex (gerbang fitur Alpha) memungkinkan Anda mengonfigurasi
.spec.backoffLimitPerIndexuntuk membatasi jumlah pengulangan kegagalan untuk indeks individual dari Indexed Job, mencegah seluruh job gagal ketika satu indeks terus-menerus gagal dan mencapai batas.spec.backoffLimit.
Jika jumlah
completiondari Indexed Job diatur lebih dari 100.000,parallelism-nya diatur lebih dari 10.000, dan banyak Pod gagal, Anda mungkin tidak dapat melacak status terminasi Job tersebut. Untuk mencegah masalah ini, peringatan akan ditampilkan jika Anda mengatur bidang tersebut ke nilai yang terlalu besar saat membuat Job.Bidang
reasondanfieldPathditambahkan ke aturan validasi CustomResourceDefinition (CRD) untuk mengembalikan alasan dan jalur bidang tertentu saat validasi gagal. Untuk informasi selengkapnya, lihat Bahasa Ekspresi Validasi CRD.Pencocokan permintaan webhook kini mendukung ekspresi Common Expression Language (CEL). Hingga 64 kondisi pencocokan didukung. Untuk informasi selengkapnya, lihat Pencocokan permintaan: matchConditions.
Bidang
.status.resizeStatusdari PVC diganti dengan bidang peta.status.allocatedResourceStatus, yang menunjukkan status sumber daya yang sedang diubah ukurannya untuk PVC tersebut. Untuk informasi selengkapnya, lihat PersistentVolumeClaimStatus.Pod bertipe Indexed Job dan StatefulSet kini memiliki indeks Pod (nomor ordinal) yang ditambahkan ke label mereka.
ValidatingAdmissionPolicy (dalam Beta) menyediakan cara deklaratif untuk memvalidasi permintaan sumber daya. Ini berfungsi sebagai alternatif untuk menerapkan webhook admission validasi dan memungkinkan Anda menggunakan ekspresi CEL untuk menulis aturan validasi kompleks. Server API memvalidasi permintaan sumber daya terhadap ekspresi CEL tersebut.
Kube Controller Manager memperkenalkan flag
--concurrent-cron-job-syncsuntuk mengonfigurasi konkurensi controller CronJob dan flag--concurrent-job-syncsuntuk mengonfigurasi konkurensi controller Job. Untuk informasi selengkapnya, lihat --concurrent-cron-job-syncs dan --concurrent-job-syncs.Optimasi API Server meliputi hal-hal berikut:
Penggunaan memori untuk mengambil daftar (GetList) dari cache dikurangi. Untuk informasi selengkapnya, lihat Data uji GetList.
Memperbaiki masalah di mana endpoint layanan Kubernetes tidak dihapus ketika hanya tersisa satu replika API Server. Hal ini memastikan endpoint dihapus segera selama shutdown yang mulus.
Controller OpenAPI v2 diatur untuk mengumpulkan informasi CRD secara malas, dan spesifikasi OpenAPI v2 dikurangi secara signifikan. Ketika tidak ada klien yang mengirim permintaan ke OpenAPI v2, penggunaan CPU dan memori server API berkurang. Selain itu, efisiensi pemasangan sejumlah besar CRD ditingkatkan. Namun, hal ini memperlambat pemrosesan permintaan pertama kali. Kami menyarankan Anda memperbarui klien Anda ke versi yang mendukung OpenAPI v3.
Gerbang fitur Pembacaan Konsisten dari Cache diperkenalkan yang memungkinkan Anda menggunakan cache watch untuk menjamin pembacaan konsisten untuk permintaan LIST.
Lebih banyak metrik pemantauan tersedia dan dapat diakses melalui endpoint metrik.
Fitur yang ditinggalkan
Dalam Kubernetes 1.27
Plugin penyimpanan AWS EBS in-tree diganti dengan plugin CSI out-of-tree. Untuk informasi selengkapnya, lihat cloud-provider-aws.
Bidang Node
spec.externalIDditinggalkan. Peringatan dikembalikan jika klien mengirim permintaan untuk memperbarui bidang ini. Untuk informasi selengkapnya tentang cara mengembalikan peringatan ke klien, lihat Peringatan Bermanfaat di Depan.Seccomp (Secure Computing Mode) mencapai GA dalam Kubernetes v1.19. Fitur ini meningkatkan keamanan beban kerja dengan membatasi panggilan sistem yang dapat dieksekusi oleh Pod atau kontainer. Anotasi tahap Alpha
seccomp.security.alpha.kubernetes.io/poddancontainer.seccomp.security.alpha.kubernetes.ioditinggalkan dalam v1.19 dan sepenuhnya dihapus dalam v1.27.Kami menyarankan Anda menggunakan bidang
securityContext.seccompProfileuntuk Pod atau kontainer.Kube Controller Manager (KCM) menghapus flag startup
--pod-eviction-timeout(periode graceful untuk eviction Pod dari node NotReady) dan--enable-taint-manager(eviction berbasis taint, diaktifkan secara default).Flag startup
--container-runtime,--container-runtime-endpoint, dan--image-service-endpointdihapus dari kubelet. Untuk flag--container-runtime, nilai defaultnya tetapremotesetelah penghapusan dockershim. Flag ini ditinggalkan dalam v1.24 dan dihapus dalam v1.27. Flag--container-runtime-endpointdan--image-service-endpointtidak lagi didukung sebagai perintah startup. Anda harus mengonfigurasi pengaturan ini dalam file konfigurasi kubelet.Controller admission SecurityContextDeny ditinggalkan dan akan dihapus dalam versi mendatang.
Dalam Kubernetes 1.28
Kode plugin volume CephFS in-tree telah dihapus.
Kami menyarankan Anda menggunakan driver CSI CephFS sebagai gantinya.
Dukungan untuk migrasi volume Ceph RBD ke plugin driver penyimpanan CSI out-of-tree ditinggalkan dan akan sepenuhnya dihapus dalam versi mendatang.
Selesaikan migrasi sebelum kode in-tree dihapus.
Plugin volume RBD (kubernetes.io/rbd) ditinggalkan dan akan dihapus dalam versi mendatang.
Kami menyarankan Anda menggunakan driver CSI CephFS sebagai gantinya.
Key Management Service (KMS) v1 ditinggalkan. Jika Anda ingin terus menggunakan KMSv1, atur
--feature-gates=KMSv1=true. Untuk informasi selengkapnya, lihat Tandai KMS v1beta1 sebagai ditinggalkan tanpa perbaikan lebih lanjut.Gunakan KMSv2.
Kubernetes Controller Manager (KCM) telah menghentikan flag startup
--volume-host-cidr-denylistdan--volume-host-allow-local-loopback.Flag
--azure-container-registry-configdalam kubelet ditinggalkan.Kami menyarankan Anda menggunakan flag
image-credential-provider-configdan--image-credential-provider-bin-dir.Membuat kelompok node Windows tidak lagi didukung.
Anda dapat membuat kelompok node yang menggunakan sistem operasi lain, seperti Alibaba Cloud Linux 3 dan ContainerOS 3.1. Untuk informasi selengkapnya, lihat Buat dan kelola kelompok node.
API yang ditinggalkan
API CSIStorageCapacity mengekspos kapasitas penyimpanan yang tersedia untuk memastikan bahwa Pod dijadwalkan ke node dengan kapasitas penyimpanan yang cukup. Versi API storage.k8s.io/v1beta1 dari CSIStorageCapacity ditinggalkan dalam v1.24 dan dihapus dalam v1.27.
Kami menyarankan Anda menggunakan storage.k8s.io/v1. API ini tersedia dalam Kubernetes v1.24 dan versi yang lebih baru. Untuk informasi selengkapnya, lihat KEP Batasan Kapasitas Penyimpanan untuk Penjadwalan Pod.
Gerbang fitur
Bagian ini hanya mencantumkan perubahan utama. Untuk informasi selengkapnya, lihat Gerbang Fitur.
Dalam Kubernetes 1.27
Gerbang fitur
NodeLogQuerytahap Alpha ditambahkan. Setelah Anda mengaturenableSystemLogHandlerdanenableSystemLogQueryketrueuntuk kubelet, Anda dapat menggunakan kubectl untuk mengkueri log node.Gerbang fitur
StatefulSetStartOrdinaltelah mencapai Beta. Gerbang fitur ini memungkinkan Anda menetapkan nomor urut ke Pod yang dibuat oleh StatefulSet dari angka selain nol. Secara default, gerbang fitur ini diaktifkan.Gerbang fitur
StatefulSetAutoDeletePVCtelah mencapai Beta. Kebijakan baru ini mengontrol apakah dan kapan StatefulSet menghapus PVC yang dibuat darivolumeClaimTemplate.IPv6DualStackdiaktifkan secara default setelah mencapai GA dalam v1.23 dan sepenuhnya dihapus dari semua kode komponen dalam v1.27.Jika Anda telah mengonfigurasi ini secara manual di kluster Anda, Anda harus menghapus konfigurasi tersebut sebelum meningkatkan kluster.
Gerbang fitur
ServiceNodePortStaticSubrangetahap Alpha ditambahkan untuk mengurangi konflik dalam menetapkan port ke Layanan NodePort. Gerbang fitur ini membagi rentang port untuk Layanan NodePort menjadi dua pita. Penetapan port dinamis menggunakan pita atas. Pita bawah dengan risiko konflik port yang lebih rendah dapat digunakan untuk menetapkan port secara statis ke Layanan NodePort. Untuk informasi selengkapnya, lihat Hindari Tabrakan Saat Menetapkan Port ke Layanan NodePort.Gerbang fitur Alpha
InPlacePodVerticalScalingditambahkan untuk memungkinkan Anda menyesuaikan sumber daya CPU dan memori Pod tanpa me-restart Pod atau kontainer.Gerbang fitur berikut untuk memperluas volume telah mencapai GA dan diaktifkan secara default:
ExpandCSIVolumes(memperluas volume CSI),ExpandInUsePersistentVolumes(memperluas PV yang sedang digunakan), danExpandPersistentVolumes(memperluas PV).Gerbang fitur
CSIMigration, yang melakukan migrasi plugin penyimpanan in-tree ke driver CSI out-of-tree, selalu diaktifkan secara default dan telah dihapus.CSIInlineVolume, gerbang fitur untuk volume inline, telah mencapai GA dalam Kubernetes 1.25 dan selalu diaktifkan secara default. Gerbang fitur ini dihapus dalam Kubernetes 1.27.Fitur
EphemeralContainerstelah mencapai GA dalam v1.25, selalu diaktifkan secara default, dan gerbang fiturnya telah dihapus.Gerbang fitur
LocalStorageCapacityIsolationmenyediakan dukungan untuk isolasi kapasitas penyimpanan sementara volumeemptyDir. Fitur ini memungkinkan Anda menetapkan batas keras pada penggunaan penyimpanan lokal Pod. Jika penggunaan melebihi batas, Pod akan dihentikan oleh kubelet. Gerbang fitur ini telah mencapai GA dalam Kubernetes 1.25 dan selalu diaktifkan secara default. Gerbang fitur ini dihapus dalam Kubernetes 1.27.NetworkPolicyEndPortadalah gerbang fitur yang memungkinkan Anda menetapkan bidangendPortdalam kebijakan jaringan untuk menentukan beberapa port. Sebelum gerbang fitur ini diperkenalkan, Anda hanya dapat menentukan satu port. Gerbang fitur ini telah mencapai GA dalam Kubernetes 1.25 dan selalu diaktifkan secara default. Gerbang fitur ini dihapus dalam Kubernetes 1.27.Gerbang fitur
StatefulSetMinReadySecondsmemungkinkan Anda mengonfigurasiminReadySecondsuntuk StatefulSet. Gerbang fitur ini telah mencapai GA dalam Kubernetes 1.25 dan selalu diaktifkan secara default. Gerbang fitur ini dihapus dalam Kubernetes 1.27.Gerbang fitur
DaemonSetUpdateSurgememungkinkan Anda mengonfigurasimaxSurgeuntuk DaemonSet. Gerbang fitur ini mencapai GA dalam v1.25 dan selalu diaktifkan secara default. Gerbang fitur ini telah dihapus.Gerbang fitur
IdentifyPodOSmemungkinkan Anda menentukan sistem operasi untuk Pod. Fitur ini mencapai GA dalam v1.25 dan selalu diaktifkan secara default. Gerbang fitur ini sejak itu telah dihapus.Gerbang fitur
ReadWriteOncePodtelah mencapai Beta dan diaktifkan secara default. Gerbang fitur ini memungkinkan Anda mengakses PV dalam modeReadWriteOncePod.
Dalam Kubernetes 1.28
Gerbang fitur
NodeOutOfServiceVolumeDetachtelah mencapai GA dalam Kubernetes 1.28 dan selalu diaktifkan secara default. Ketika taintnode.kubernetes.io/out-of-serviceditambahkan untuk menandai node sebagai out-of-service, Pod yang tidak mentolerir taint ini akan dihapus secara paksa, dan volumenya segera dilepas.Gerbang fitur
AdmissionWebhookMatchConditiondiaktifkan secara default dan memungkinkan Anda menggunakan ekspresi CEL sebagai kondisi pencocokan webhook.Gerbang fitur
UnknownVersionInteroperabilityProxytelah mencapai Alpha. Gerbang fitur ini dapat mengirim permintaan ke server API yang benar ketika terdapat beberapa versi server API. Untuk informasi selengkapnya, lihat Proxy Versi Campuran.Gerbang fitur
IPTablesOwnershipCleanuptelah mencapai GA dan tidak lagi membuat rantai iptables KUBE-MARK-DROP dan KUBE-MARK-MASQ.Gerbang fitur
ConsistentListFromCachetelah mencapai Alpha. Gerbang fitur ini memungkinkan server API menggunakan cache watch untuk melayani permintaan LIST, yang menjamin pembacaan konsisten.Gerbang fitur
ProbeTerminationGracePeriodtelah mencapai GA dan diaktifkan secara default. Gerbang fitur ini memungkinkan Anda menggunakan terminationGracePeriodSeconds tingkat probe.Gerbang fitur berikut dalam tahap GA dihapus:
DelegateFSGroupToCSIDriver,DevicePlugins,KubeletCredentialProviders,MixedProtocolLBService,ServiceInternalTrafficPolicy,ServiceIPStaticSubrange, danEndpointSliceTerminatingCondition.
Referensi
Untuk catatan perubahan lengkap Kubernetes 1.27 dan 1.28, lihat CHANGELOG-1.27 dan CHANGELOG-1.28.