Container Service for Kubernetes (ACK) mematuhi ketentuan Certified Kubernetes Conformance Program secara ketat. Topik ini menjelaskan perubahan yang diterapkan oleh ACK Lingjun untuk mendukung Kubernetes 1.22.
Versi komponen
Semua komponen dalam kluster ACK Lingjun telah diperbarui guna mendukung Kubernetes 1.22.
| Komponen | Versi | Catatan |
|---|---|---|
| Kubernetes | 1.22.15-aliyun.1 | Lihat Perubahan yang mengganggu dan Fitur baru di bawah ini |
| etcd | 3.5.1 | — |
| CoreDNS | v1.9.3.6-32932850-aliyun | Pembaruan non-disruptif. Menambahkan pemantauan EndpointSlice dan resolusi DNS IPv6 |
| CRI | containerd 1.5.13 | — |
| CSI | v1.26.3-fc2ba2a-aliyun | — |
| CNI | Terway v1.5.7 | — |
| NVIDIA Container Runtime | 3.13.0 | — |
| Ingress controller | v1.8.0-aliyun.1 | Dapat mengganggu workload secara sementara dan menyebabkan masalah kompatibilitas. Evaluasi dampaknya sebelum melakukan upgrade |
Perubahan yang mengganggu
Perubahan berikut memerlukan tindakan sebelum melakukan upgrade ke Kubernetes 1.22. Melewatkan langkah-langkah ini dapat menyebabkan kegagalan workload setelah upgrade.
API beta yang tidak lagi didukung
Kubernetes 1.22 menghapus serangkaian API beta demi versi stabil (v1) yang bersangkutan. Resource yang sudah ada yang dibuat melalui API beta tetap dipertahankan dan masih dapat diakses melalui API stabil—namun controller, operator, dan alat yang memanggil versi API beta yang dihapus akan berhenti berfungsi setelah upgrade.
Sebelum melakukan upgrade, perbarui manifes dan klien API ke versi API stabil yang tercantum dalam tabel di bawah ini, lalu redeploy controller dan aplikasi yang memanggil API beta yang dihapus tersebut.
API beta berikut tidak lagi didukung di Kubernetes 1.22:
| Resource | API yang tidak lagi didukung | API stabil (gunakan sebagai gantinya) |
|---|---|---|
| MutatingWebhookConfiguration, ValidatingWebhookConfiguration | admissionregistration.k8s.io/v1beta1 | admissionregistration.k8s.io/v1 |
| CustomResourceDefinition (CRD) | apiextensions.k8s.io/v1beta1 | apiextensions.k8s.io/v1 |
| APIService | apiregistration.k8s.io/v1beta1 | apiregistration.k8s.io/v1 |
| TokenReview | authentication.k8s.io/v1beta1 | authentication.k8s.io/v1 |
| SubjectAccessReview | authorization.k8s.io/v1beta1 | authorization.k8s.io/v1 |
| CertificateSigningRequest (CSR) | certificates.k8s.io/v1beta1 | certificates.k8s.io/v1 |
| Lease | coordination.k8s.io/v1beta1 | coordination.k8s.io/v1 |
| Ingress, IngressClass | networking.k8s.io/v1beta1, extensions/v1beta1 | networking.k8s.io/v1 |
| ClusterRole, ClusterRoleBinding, Role, RoleBinding | rbac.authorization.k8s.io/v1beta1 | rbac.authorization.k8s.io/v1 |
| CSIDriver, CSINode, StorageClass, VolumeAttachment | storage.k8s.io/v1beta1 | storage.k8s.io/v1 |
| PriorityClass | scheduling.k8s.io/v1beta1 | scheduling.k8s.io/v1 |
Penghapusan dockershim
dockershim, yang telah ditinggalkan sejak Kubernetes 1.20, dihapus sepenuhnya di Kubernetes 1.22. Kluster yang masih menggunakan Docker sebagai runtime kontainer harus melakukan migrasi ke containerd sebelum upgrade.
Langkah migrasi:
Hitung jumlah node baru yang dibutuhkan berdasarkan workload Docker saat ini.
Tambahkan node baru yang menjalankan containerd ke kluster selama jam sepi. Untuk mengubah runtime kontainer pada kelompok node, lihat Mengubah runtime kontainer dari Docker ke containerd.
Drain node Docker satu per satu. Setelah setiap drain, verifikasi bahwa semua pod telah berhasil dimigrasikan sebelum melakukan drain pada node berikutnya.
Hapus node Docker yang telah didrain setelah tidak ada lagi pod yang tersisa di dalamnya.
Perubahan perilaku NodePort (Kubernetes 1.22.10 dan versi lebih baru)
kube-proxy tidak lagi mendengarkan pada port layanan NodePort. Jika range port layanan NodePort (dikonfigurasi melalui ServiceNodePortRange pada server API) tumpang tindih dengan range port ephemeral yang ditentukan oleh parameter kernel net.ipv4.ip_local_port_range, koneksi TCP dapat gagal secara intermiten, menyebabkan kegagalan pemeriksaan kesehatan dan gangguan layanan.
Sebelum melakukan upgrade ke 1.22.10 atau versi lebih baru, pastikan range port layanan NodePort Anda tidak bentrok dengan net.ipv4.ip_local_port_range. Untuk panduan konfigurasi, lihat Bagaimana cara mengonfigurasi range port node yang tepat? atau PR komunitas Kubernetes.
Kadaluarsa token akun layanan
Di Kubernetes 1.22 dan versi lebih baru, token akun layanan memiliki periode validitas satu tahun. kubelet secara berkala memperpanjang token sebelum masa berlakunya habis.
client-go >= 11.0.0 atau >= 0.15.0: Token dimuat ulang secara otomatis dari disk.
client-go < 11.0.0 atau < 0.15.0: Token tidak diperpanjang secara otomatis. Setelah token kadaluarsa, akses ke server API dari dalam kluster akan gagal. Lakukan upgrade client-go ke versi 11.0.0 atau lebih baru (atau 0.15.0 atau lebih baru) untuk menghindari hal ini.
Untuk detail mengenai dampak dan solusinya, lihat [Perubahan Produk] Solusi untuk kadaluarsa token akun layanan di Kubernetes 1.22 dan versi lebih baru.
Hal lain yang perlu diperhatikan sebelum upgrade
Backup data node bidang kontrol: Semua kontainer pada node bidang kontrol akan dibuat ulang selama proses upgrade versi. Backup data kontainer apa pun sebelum memulai upgrade.
CVE-2022-3172: Kerentanan ini dapat memengaruhi kluster Anda. Tinjau detailnya dan terapkan perbaikan yang dijelaskan dalam CVE-2022-3172.
PodSecurityPolicy (PSP): PSP telah ditinggalkan sejak Kubernetes 1.21 dan akan dihapus di Kubernetes 1.25. PSP masih berfungsi di versi 1.22. Mulailah merencanakan migrasi ke admission controller PodSecurity. Untuk detailnya, lihat Pod security admission dan Depresiasi PodSecurityPolicy: masa lalu, kini, dan masa depan.
Fitur baru
Feature gate yang diaktifkan secara default
Feature gate berikut diaktifkan secara default di Kubernetes 1.22 (atau sejak versi yang disebutkan).
Diaktifkan sejak Kubernetes 1.21:
| Feature gate | Deskripsi |
|---|---|
| ImmutableEphemeralVolumes | Tandai ConfigMap dan Secret sebagai immutable, sehingga secara signifikan mengurangi beban server API |
| IPv6DualStack | Aktifkan jaringan dual-stack IPv4/IPv6. Memerlukan Blok CIDR yang sesuai dan plug-in CNI yang mendukung dual-stack |
| GracefulNodeShutdown | kubelet mendeteksi event shutdown node dan mengeluarkan pod dalam periode tenggang shutdown. Hanya untuk node Linux |
| EfficientWatchResumption | Lanjutkan cache watch server API secara efisien setelah restart. Berguna untuk kluster berskala besar |
Diaktifkan sejak Kubernetes 1.22:
| Feature gate | Deskripsi |
|---|---|
| CSIStorageCapacity | kube-scheduler menempatkan pod pada node yang memiliki kapasitas penyimpanan mencukupi untuk volume yang dibutuhkan |
| DaemonSetUpdateSurge | Gunakan .spec.strategy.rollingUpdate.maxSurge untuk mengizinkan pod tambahan selama pembaruan rolling DaemonSet |
| IndexedJob | Atur .spec.completionMode=Indexed pada Pekerjaan untuk memberikan indeks unik kepada setiap pod melalui anotasi batch.kubernetes.io/job-completion-index dan variabel lingkungan JOB_COMPLETION_INDEX |
| MemoryManager | Aktifkan manajemen memori yang sadar akses memori non-seragam (NUMA) untuk aplikasi dengan kebutuhan memori terjamin. Hanya untuk node Linux. ACK tidak mengonfigurasi reservasi memori untuk fitur ini |
| PodAffinityNamespaceSelector | Terapkan pemilih label afinitas pod lintas namespace, bukan hanya dalam namespace yang sama |
| PodDeletionCost | Pod dengan pemanfaatan resource lebih rendah memiliki biaya penghapusan lebih kecil selama skala turun |
| PreferNominatedNode | kube-scheduler memprioritaskan node yang dinominasikan; hanya mengevaluasi node lain jika node yang dinominasikan tidak tersedia |
| ProbeTerminationGracePeriod | Atur terminationGracePeriodSeconds tingkat probe atau tingkat pod untuk memperpendek waktu restart pod setelah pemeriksaan kelangsungan hidup gagal |
| NetworkPolicyEndPort | Tentukan range port dalam aturan NetworkPolicy |
| LogarithmicScaleDown | Gunakan pemilihan pod acak selama skala-masuk untuk mengurangi dampak batasan penyebaran topologi pod |
| SuspendJob | Menangguhkan dan melanjutkan Pekerjaan untuk mengelola siklus hidup secara lebih fleksibel |
| ServiceInternalTrafficPolicy | Rutekan trafik internal Layanan ke endpoint lokal-node atau semua endpoint siap di kluster |
| ServiceLoadBalancerClass | Sesuaikan implementasi load balancer menggunakan .spec.loadBalancerClass |
| ServiceLBNodePortControl | Nonaktifkan alokasi NodePort untuk Layanan LoadBalancer dengan mengatur .spec.allocateLoadBalancerNodePorts=false, sehingga trafik langsung diarahkan ke pod |
| SizeMemoryBackedVolumes | Atur ukuran volume berbasis memori emptyDir menggunakan emptyDir.sizeLimit. Hanya untuk node Linux |
| Server-side Apply | Lacak perubahan konfigurasi resource tingkat field, termasuk sumber, stempel waktu, dan operasi |
| CSRDuration | Atur masa berlaku sertifikat menjadi nilai yang lebih kecil antara .spec.expirationSeconds dalam CSR dan --cluster-signing-duration dalam kube-controller-manager. Nilai default ACK untuk --cluster-signing-duration adalah 10 tahun |
| BoundServiceAccountTokenVolume | GA di Kubernetes 1.22. Masa berlaku default token akun layanan adalah satu tahun untuk token yang tidak dipasang sebagai projected volume |
Integrasi CSI dengan kontainer Windows (distabilkan di 1.22):
Integrasi Container Storage Interface (CSI) dengan kontainer Windows kini sudah stabil. Gunakan CSI Proxy untuk menjalankan operasi penyimpanan pada node Windows yang tidak mendukung kontainer hak istimewa (seperti Windows Server 2019 dan Windows Server versi 2004). Plug-in CSI yang Anda gunakan harus mendukung fitur ini. Untuk detailnya, lihat CSI Proxy.
Fitur baru
| Fitur | ACK status | Deskripsi |
|---|---|---|
| Pemantauan kesehatan volume | Diaktifkan secara default | Mendeteksi status kesehatan volume persisten (PV) yang disediakan oleh plug-in CSI untuk mencegah pembacaan dan penulisan ke volume yang tidak sehat. Memerlukan dukungan plug-in CSI. Lihat Pemantauan kesehatan volume |
| Memory QoS (cgroups v2) | Diaktifkan secara default | Menerapkan pembatasan kecepatan memori di bawah konflik sumber daya menggunakan antarmuka cgroups v2 yang dioptimalkan. Hanya untuk node Linux. Memerlukan dukungan kernel OS. Lihat Fitur Memcg QoS antarmuka cgroup v1 |
| Kontainer Windows HostProcess | Diaktifkan secara default | Buat kontainer Windows hak istimewa menggunakan kontainer HostProcess. Memerlukan dukungan kernel OS. Lihat Buat Pod Windows HostProcess |
| Memori swap | Dinonaktifkan di ACK | Jalankan workload menggunakan memori swap untuk meningkatkan stabilitas node di bawah konflik memori. Hanya untuk node Linux. Lihat Manajemen memori swap |
| Profil seccomp default | Dinonaktifkan di ACK | Terapkan profil seccomp RuntimeDefault secara default. Workload dengan pembatasan syscall yang lebih sedikit dapat gagal saat fitur ini diaktifkan. Hanya untuk node Linux |
Pembaruan fitur
PodSecurityPolicy (PSP): PSP telah ditinggalkan sejak Kubernetes 1.21 dan akan dihapus di Kubernetes 1.25. ACK menyediakan kebijakan keamanan pod sebagai alternatif. Lihat Pod security admission.
Topology Aware Hints: Field
topologyKeystelah ditinggalkan sejak Kubernetes 1.21. Gunakan fitur Topology Aware Hints sebagai gantinya untuk mengaktifkan routing layanan yang sadar topologi. Topologi layanan dinonaktifkan secara default di kluster ACK 1.22. Lihat Topology Aware Hints.
Peningkatan ACK Lingjun
Observabilitas
Metrik tambahan untuk akses server API Kubernetes dan pola permintaan meningkatkan observabilitas server API.
Metrik utama untuk komponen bidang kontrol kini dapat dikumpulkan dari kluster ACK Lingjun.
Stabilitas
Proteksi resource penyimpanan mengurangi beban etcd selama cold start.
Pembatasan kecepatan trafik server API berdasarkan sumber, jenis, dan entri rute permintaan mengurangi beban etcd selama cold start.
Peningkatan performa
kubelet: Selama upgrade kubelet in-place, sistem mencegah restart pod sebaik mungkin. Lihat issue Kubernetes terkait.
kube-proxy: kube-proxy kini kompatibel dengan Alibaba Cloud Linux 2 (kernel 4.19.91-23 dan versi lebih baru). Saat mode IP Virtual Server (IPVS) diaktifkan,
conn_reuse_modetidak lagi diatur ke0. Lihat issue Kubernetes terkait.
Masalah yang telah diperbaiki
Memperbaiki kebocoran EndpointSlice di kube-controller-manager yang terjadi dalam skenario tertentu. Lihat Memperbaiki cara pencermatan EndpointSlice menangani transisi pemilih Layanan.