Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Node Hardening adalah fitur opsional untuk kumpulan simpul Linux yang melindungi stabilitas simpul saat beban kerja memberikan tekanan pada simpul dalam hal CPU, memori, atau disk. Saat Anda mengaktifkan Node Hardening pada kluster, AKS mengubah cara setiap node mencadangkan dan memberlakukan sumber daya untuk komponen Kubernetes dan layanan host, dan bagaimana kubelet mengusir pod ketika sumber daya menipis.
Artikel ini menjelaskan perubahan apa saja pada Node Hardening, membandingkan default yang diperkeras dengan default AKS standar, dan menunjukkan kepada Anda cara mengaktifkan, memverifikasi, menyesuaikan, dan menonaktifkan fitur.
Important
Fitur pratinjau AKS tersedia atas dasar layanan mandiri dan pendaftaran sukarela. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan pratinjau tersebut dikecualikan dari perjanjian tingkat layanan (SLA) serta garansi terbatas. Fitur pratinjau AKS sebagian didukung oleh dukungan pelanggan sebatas upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:
Manfaat Pengerasan Node
Pada simpul yang sibuk atau bursty, beban kerja dapat menggunakan sumber daya yang dibutuhkan kubelet, runtime kontainer, dan layanan host. Ketika itu terjadi, simpul dapat menjadi tidak responsif, melaporkan status NotReady, atau mengakhiri pod secara tiba-tiba. Pengerasan Node mengurangi risiko ini dengan cara berikut:
-
Reservasi yang diberlakukan: Secara default, AKS menggunakan nilai kube-reserved hanya untuk menghitung berapa banyak kapasitas yang dapat dialokasikan oleh penjadwal ke pod. Dengan menggunakan Node Hardening, kubelet juga memberlakukan kapasitas kube-reserved dan system-reserved melalui grup kontrol Linux (cgroup). Kubelet dan containerd berjalan dalam cgroup khusus
kubereserved.slice, sehingga mereka tetap mempertahankan jatah CPU dan memori yang dicadangkan bahkan ketika pod membebani node hingga kapasitas penuh. -
Kapasitas khusus untuk layanan host: Hardening Node menambahkan alokasi yang dicadangkan sistem untuk layanan sistem operasi host, yang berjalan di node
system.slice. - Cadangan memori lebih besar: Ambang penggusuran paksa untuk memori yang tersedia bertambah sesuai dengan memori node, sehingga kubelet mengeluarkan pod sebelum memori node menjadi sangat rendah.
- Penggusuran graceful: Ambang penggusuran lunak memungkinkan kubelet menggusur pod secara graceful, dengan masa tenggang penghentian, ketika memori atau ruang disk hampir habis. Eviksi paksa, yang segera mengakhiri pod, lalu digunakan sebagai pilihan terakhir.
- Reservasi yang diskalakan dengan kepadatan pod: Perhitungan memori yang dicadangkan kube meningkat seiring dengan jumlah maksimum pod per simpul, yang memperhitungkan overhead kubelet dan containerd untuk menjalankan lebih banyak pod.
Apa yang berubah saat Anda mengaktifkan Node Hardening
Tabel berikut membandingkan default standar untuk node Linux yang menjalankan Kubernetes 1.29 atau yang lebih baru dengan default yang diterapkan AKS saat Node Hardening diaktifkan.
Reservasi sumber daya
| Setting | Tanpa hardening node | Dengan Hardening Node |
|---|---|---|
| CPU yang direservasi untuk Kube | Berdasarkan jumlah inti CPU. Untuk informasi selengkapnya, lihat pemesanan CPU. | Tidak diubah |
| Memori yang direservasi untuk Kube |
min(20 × maxPods + 50, 25% of node memory) MiB |
min(35 × maxPods + max(250, 2% of node memory), 25% of node memory) MiB |
| ID proses (PID) yang dicadangkan untuk Kube | 1000 |
Tidak dipesan |
| CPU yang dialokasikan untuk sistem | None | 100m |
| Memori yang dicadangkan sistem | None | 200 MiB, ditambah 100 MiB untuk setiap memori node 32 GiB penuh, ditambah 100 MiB untuk kluster yang menggunakan Azure CNI |
| Penyimpanan sementara yang dicadangkan oleh sistem | None | 1Gi |
Ambang penggusuran
| Setting | Tanpa Node Hardening | Dengan hardening Node |
|---|---|---|
Penggusuran paksa: memory.available |
100Mi |
250Mi untuk simpul dengan memori 8 GiB atau kurang, 375Mi untuk simpul dengan lebih dari 8 GiB dan kurang dari 32 GiB, dan 512Mi untuk simpul dengan 32 GiB atau lebih |
Eviksi paksa: nodefs.available dan nodefs.inodesFree |
10% dan 5% |
Tidak diubah |
Eviksi paksa: pid.available |
2000 |
Belum diatur |
Eviksi lunak: memory.available |
None |
500Mi, 750Mi, atau 1Gi, menggunakan tingkat memori node yang sama dengan eviksi paksa, dengan masa tenggang 30 detik |
eviksi lunak: nodefs.available dan nodefs.inodesFree |
None |
12% dan 7%, masing-masing dengan masa tenggang 2 menit |
| Masa tenggang penghentian pod maksimum selama eviksi lunak | Belum diatur | 60 detik |
Penegakan Cgroup
| Setting | Tanpa hardening Node | Dengan Hardening Node |
|---|---|---|
| Alokasi simpul yang diterapkan | pods |
pods, kube-reserved, dan system-reserved |
| Kubelet dan cgroup containerd |
system.slice, tanpa batasan |
kubereserved.slice, dengan memori terbatas pada memori yang dicadangkan kube dan berbagi CPU yang proporsional dengan CPU yang dicadangkan kube |
| grup kontrol (cgroup) layanan host |
system.slice, tanpa batasan |
system.slice, dengan memori terbatas pada memori yang dicadangkan sistem dan porsi CPU yang sebanding dengan CPU yang dicadangkan sistem |
Karena Node Hardening mencadangkan lebih banyak kapasitas, simpul melaporkan kapasitas yang kurang dapat dialokasikan untuk pod. Misalnya, pada node dengan 4 vCPU dan memori 16 GiB yang menggunakan Azure CNI, mengaktifkan Node Hardening mengurangi kapasitas yang dapat dialokasikan sebagai berikut:
- Dengan maksimum default 250 pod per node, secara default dibutuhkan sekitar 570 MiB memori, 100 millicore CPU, dan 1 GiB penyimpanan efemeral.
- Dengan maksimum 30 pod per simpul, sekitar 1,3 GiB memori, 100 milicore CPU, dan 1 GiB penyimpanan ephemeral.
Ambang eviction lunak tidak mengurangi kapasitas yang dapat dialokasikan. Mereka hanya berubah ketika kubelet mulai mengusir pod.
Considerations
Ingatlah pertimbangan berikut sebelum Anda mengaktifkan Node Hardening:
- Anda mengaktifkan Node Hardening di tingkat kluster, dan ini berlaku untuk semua kumpulan simpul Linux di kluster. Anda tidak dapat mengaktifkannya untuk kumpulan simpul individual, dan itu tidak memengaruhi kumpulan simpul Windows.
- Node melaporkan kapasitas yang kurang dapat dialokasikan, sehingga pod yang pas pada node sebelum Anda mengaktifkan Node Hardening mungkin tidak pas setelahnya. Tinjau permintaan sumber daya pod dan ukuran kumpulan simpul Anda.
- Layanan host di
system.sliceberbagi batas memori keras yang sama dengan memori yang dicadangkan sistem. Jika Anda menjalankan agen Anda sendiri pada simpul sebagai layanan systemd, seperti agen keamanan, pemantauan, atau penerusan log, agen tersebut diperhitungkan dalam batas ini. Validasi penggunaan memori mereka dan stabilitasnya sebelum Anda menggunakan Node Hardening dalam produksi. - Nilai yang Anda tetapkan dalam konfigurasi kubelet kustom kumpulan simpul akan menggantikan nilai default Node Hardening yang sesuai. Untuk informasi selengkapnya, lihat Menyesuaikan pengaturan Node Hardening.
- Jika Anda menonaktifkan Node Hardening nanti, pool node yang ada tetap menyimpan setelan soft eviction yang diperkeras, bahkan setelah node-nya di-image ulang. Untuk menghapus pengaturan ini, Anda perlu membuat pool node baru. Untuk informasi selengkapnya, lihat Menonaktifkan Penguatan Keamanan Node.
- Nilai default mungkin berubah saat fitur dalam pratinjau. Mulailah dengan kluster nonproduksi, dan validasi beban kerja Anda dalam kondisi tekanan simpul yang representatif.
Prerequisites
- Sebuah langganan Azure. Jika Anda tidak memilikinya, buat akun gratis.
- Kluster AKS dengan kumpulan simpul Linux, atau izin untuk membuatnya.
- Ekstensi
aks-previewAzure CLI danCustomNodeConfigPreviewbendera fitur yang dijelaskan di bagian berikut.
Memasang ekstensi aks-preview Azure CLI
Instal ekstensi menggunakan perintah
az extension add.az extension add --name aks-previewPerbarui ke versi terbaru ekstensi dengan menggunakan perintah
az extension update.az extension update --name aks-preview
Daftarkan CustomNodeConfigPreview penanda fitur
Daftarkan
CustomNodeConfigPreviewbendera fitur dengan menggunakanaz feature registerperintah .az feature register --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"Dibutuhkan beberapa menit agar status menampilkan Terdaftar.
Verifikasi status pendaftaran dengan menggunakan
az feature showperintah .az feature show --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"Saat status menunjukkan Terdaftar, segarkan pendaftaran penyedia sumber daya Microsoft.ContainerService dengan menggunakan perintah
az provider register.az provider register --namespace "Microsoft.ContainerService"
Aktifkan Pengamanan Node
Selama pratinjau, Node Hardening tidak diaktifkan secara default.
Mengaktifkan Node Hardening pada kluster baru
Buat kluster dengan Node Hardening diaktifkan dengan menggunakan perintah az aks create dengan parameter --enable-node-hardening.
Perintah ini memerlukan aks-preview ekstensi dan CustomNodeConfigPreview bendera fitur. Untuk informasi selengkapnya, lihat Prasyarat.
az aks create \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-node-hardening \
--generate-ssh-keys
Untuk mengonfirmasi perubahan, lihat Memverifikasi pengaturan hardening node.
Aktifkan hardening node pada kluster yang ada
Aktifkan Pengerasan Node pada kluster yang ada dengan menggunakan perintah az aks update dengan parameter --enable-node-hardening.
Perintah ini memerlukan ekstensi aks-preview dan flag fitur CustomNodeConfigPreview. Untuk informasi selengkapnya, lihat Prasyarat.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-node-hardening
Untuk mengonfirmasi perubahan, lihat Verifikasi setelan hardening node.
Verifikasi pengaturan Hardening Node
Dapatkan kredensial untuk kluster Anda dengan menggunakan perintah
az aks get-credentials.az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>Tinjau pengaturan reservasi dan eviction kubelet yang efektif pada simpul dengan mengkueri titik akhir konfigurasi kubelet.
kubectl get --raw "/api/v1/nodes/<node-name>/proxy/configz" | jq '.kubeletconfig | {kubeReserved, systemReserved, evictionHard, evictionSoft, evictionSoftGracePeriod, evictionMaxPodGracePeriod, enforceNodeAllocatable}'Pada node yang dikeraskan,
systemReserveddanevictionSoftberisi nilai, sertaenforceNodeAllocatablemenyertakankube-reserveddansystem-reserved.Bandingkan kapasitas node dengan sumber daya yang dapat dialokasikan.
kubectl get node <node-name> -o jsonpath='{.status.capacity}{"\n"}{.status.allocatable}{"\n"}'Pada node yang diperkeras, CPU yang dapat dialokasikan, memori, dan penyimpanan ephemeral lebih rendah dari kapasitas. Perbedaannya sama dengan nilai yang dicadangkan kube dan dicadangkan sistem dalam Reservasi resource, ditambah ambang eviction keras dalam Ambang eviction. Misalnya, pada simpul dengan 4 vCPU dan memori 16 GiB yang menggunakan CNI Azure, CPU yang dapat dialokasikan adalah 240 milikore lebih rendah dari kapasitas: 140 milikore CPU cadangan kube dan 100 milikore CPU yang dicadangkan untuk sistem.
Sesuaikan pengaturan hardening node
Anda dapat mengambil alih default kube-reserved dan eviction untuk kumpulan simpul Linux dengan menggunakan konfigurasi kubelet kustom. Pengaturan ini memerlukan CustomNodeConfigPreview flag fitur. Anda dapat menggunakannya apakah Node Hardening diaktifkan pada kluster atau tidak. AKS mengelola nilai yang dicadangkan sistem dan penerapan cgroup, dan Anda tidak dapat menyesuaikannya.
Setiap pengaturan mengambil alih baris dalam tabel reservasi Sumber Daya atau ambang penggusuran. Baris yang dicadangkan untuk Kube sesuai dengan pengaturan kubeReserved. Baris hard eviction sesuai dengan pengaturan hardEvictionThreshold. Baris soft eviction sesuai dengan pengaturan softEvictionThreshold dan softEvictionGracePeriod. Masa tenggang penghentian pod maksimum sesuai dengan evictionMaxPodGracePeriodInSeconds.
Anda dapat mengonfigurasi pengaturan berikut:
| Setting | Overrides | Description |
|---|---|---|
kubeReserved.cpuMillicores |
CPU yang dicadangkan Kube | CPU yang dicadangkan untuk daemon sistem Kubernetes, dalam milikore. |
kubeReserved.memoryMB |
Memori yang dicadangkan untuk Kube | Memori yang dicadangkan untuk daemon sistem Kubernetes, di MiB. |
hardEvictionThreshold.memoryAvailable |
Penggusuran paksa: memory.available |
Ambang eviksi keras untuk memori yang tersedia. |
hardEvictionThreshold.nodeFsAvailable |
Penggusuran paksa: nodefs.available |
Ambang penggusuran keras untuk ruang sistem file simpul yang tersedia. |
hardEvictionThreshold.nodeFsInodesFree |
Penggusuran paksa: nodefs.inodesFree |
Ambang eviksi keras untuk inode sistem berkas node yang tersedia. |
softEvictionThreshold.memoryAvailable |
Eviksi lunak: memory.available |
Ambang penggusuran lunak untuk memori yang tersedia. |
softEvictionThreshold.nodeFsAvailable |
Pengusiran lunak: nodefs.available |
Ambang penggusuran lunak untuk ruang sistem berkas node yang tersedia. |
softEvictionThreshold.nodeFsInodesFree |
Soft eviction: nodefs.inodesFree |
Ambang penggusuran lunak untuk inode sistem berkas node yang tersedia. |
softEvictionGracePeriod.memoryAvailable |
eviksi lunak: memory.available masa tenggang |
Berapa lama memori yang tersedia harus berada di bawah ambang batas lunaknya sebelum kubelet mengeluarkan pod. |
softEvictionGracePeriod.nodeFsAvailable |
Penggusuran sementara: nodefs.available masa tenggang |
Berapa lama ruang sistem file simpul yang tersedia harus tetap berada di bawah ambang batas lunaknya sebelum kubelet mengeluarkan pod. |
softEvictionGracePeriod.nodeFsInodesFree |
soft eviction: nodefs.inodesFree masa tenggang |
Lamanya inode bebas pada sistem file node harus tetap berada di bawah ambang batas lunaknya sebelum kubelet mengeluarkan pod. |
evictionMaxPodGracePeriodInSeconds |
Masa tenggang maksimum penghentian pod saat eviction lunak | Jumlah detik maksimum yang diizinkan kubelet agar pod dihentikan selama eviksi lunak. |
- Untuk nilai, minimum, dan aturan validasi yang diizinkan untuk setiap pengaturan, lihat Parameter konfigurasi simpul kustom untuk AKS.
- Untuk setiap sinyal eviksi, atur ambang batas eviksi lunak dan masa tenggang yang sesuai, dan pastikan setiap ambang eviksi lunak lebih besar dari ambang eviksi keras untuk sinyal yang sama.
Buat file konfigurasi kubelet, seperti
nodehardening-kubelet.json, dengan pengaturan yang ingin Anda kustomisasi. Contoh berikut menetapkan setiap nilai yang dapat dikonfigurasi. Ini menetapkan kube-reserved ke 200 miicore CPU dan 1.024 MiB memori. Ini menetapkan ambang penggusuran keras untuk512Mimemori yang tersedia,10%ruang sistem file yang tersedia, dan5%inode bebas. Ini mengatur ambang eviction lunak dari1Gi,12%, dan7%dengan masa tenggang 30 detik, 2 menit, dan 2 menit. Ini juga menetapkan masa tenggang penghentian pod maksimum 60 detik.{ "kubeReserved": { "cpuMillicores": 200, "memoryMB": 1024 }, "hardEvictionThreshold": { "memoryAvailable": "512Mi", "nodeFsAvailable": "10%", "nodeFsInodesFree": "5%" }, "softEvictionThreshold": { "memoryAvailable": "1Gi", "nodeFsAvailable": "12%", "nodeFsInodesFree": "7%" }, "softEvictionGracePeriod": { "memoryAvailable": "30s", "nodeFsAvailable": "2m", "nodeFsInodesFree": "2m" }, "evictionMaxPodGracePeriodInSeconds": 60 }Buat kumpulan simpul Linux yang menggunakan file konfigurasi dengan menggunakan perintah
az aks nodepool adddengan parameter--kubelet-config.az aks nodepool add \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --kubelet-config ./nodehardening-kubelet.jsonAnda juga dapat menggunakan parameter
--kubelet-configdengan perintahaz aks createuntuk menerapkan konfigurasi ke kumpulan simpul awal kluster.
Nonaktifkan Hardening Node
Nonaktifkan Node Hardening dengan menggunakan perintah az aks update dengan parameter --disable-node-hardening.
Perintah ini memerlukan aks-preview ekstensi dan CustomNodeConfigPreview bendera fitur. Untuk informasi selengkapnya, lihat Prasyarat.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--disable-node-hardening
Menonaktifkan Node Hardening menonaktifkan pengaturan tingkat kluster, tetapi tidak segera mengubah node yang ada. Simpul yang ada menyimpan semua pengaturan yang diperkuat hingga di-reimage, misalnya, selama upgrade image node. Setelah node di-image ulang, perubahan berikut berlaku:
- Dikembalikan ke default standar AKS: Sumber daya yang dicadangkan kube dan dicadangkan sistem, ambang penggusuran ketat, dan penegakan cgroup. Kapasitas node yang dapat dialokasikan meningkat sesuai dengan itu.
- Dipertahankan: Ambang batas eviksi lunak, masa tenggang eviksi lunak, dan masa tenggang penghentian pod maksimum selama eviksi lunak.
Anda dapat mengatur konfigurasi kubelet kustom hanya saat membuat kluster atau kumpulan simpul, sehingga Anda tidak dapat menghapus setelan soft eviction yang dipertahankan dari kumpulan simpul yang ada. Untuk menghapusnya, buat kumpulan simpul baru yang secara eksplisit meniadakan setelan tersebut, pindahkan beban kerja Anda ke kumpulan simpul baru, lalu hapus kumpulan simpul lama.
Buat file konfigurasi kubelet, seperti
remove-soft-eviction.json. Contoh berikut menetapkan setiap ambang batas soft eviction dan masa tenggang ke string kosong, yang menonaktifkan soft eviction untuk sinyal tersebut. Ini juga mengatur masa tenggang penghentian pod maksimum ke0, yang merupakan default AKS standar.{ "softEvictionThreshold": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "softEvictionGracePeriod": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "evictionMaxPodGracePeriodInSeconds": 0 }Buat kumpulan simpul Linux yang menggunakan file konfigurasi dengan menggunakan perintah
az aks nodepool adddengan parameter--kubelet-config.az aks nodepool add \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --kubelet-config ./remove-soft-eviction.jsonPindahkan beban kerja Anda ke kumpulan simpul baru, lalu hapus kumpulan simpul lama. Untuk informasi selengkapnya, lihat Mengubah ukuran kumpulan simpul di AKS.
Untuk mengonfirmasi pengaturan pada node, lihat Memverifikasi pengaturan hardening node. Pada node di pool node baru, evictionSoft kosong.