Dokumen ini menunjukkan cara menyesuaikan konfigurasi node Google Kubernetes Engine (GKE) menggunakan file konfigurasi yang disebut konfigurasi sistem node.
Konfigurasi sistem node adalah file konfigurasi yang menyediakan cara untuk menyesuaikan serangkaian setelan sistem dalam jumlah terbatas. Di node pool, Anda dapat menggunakan konfigurasi sistem node untuk menentukan setelan kustom bagi agen node Kubernetes kubelet dan untuk konfigurasi kernel Linux level rendah sysctl.
Dokumen ini menjelaskan konfigurasi yang tersedia untuk konfigurasi sistem node dan cara menerapkannya ke node pool GKE Standard Anda. Perhatikan bahwa karena cluster GKE Autopilot memiliki lingkungan node yang lebih terkelola, opsi konfigurasi sistem node langsungnya terbatas dibandingkan dengan node pool GKE Standard.
Alasan menggunakan konfigurasi sistem node
Konfigurasi sistem node menawarkan manfaat berikut:
- Penyesuaian performa: mengoptimalkan performa stack jaringan, pengelolaan memori, penjadwalan CPU, atau perilaku I/O untuk aplikasi yang menuntut performa tinggi seperti pelatihan atau penayangan AI, database, server web dengan traffic tinggi, atau layanan yang sensitif terhadap latensi.
- Hardening keamanan: menerapkan setelan keamanan tingkat kernel tertentu atau membatasi perilaku sistem tertentu untuk mengurangi permukaan serangan.
- Pengelolaan resource: menyesuaikan cara
kubeletmengelola PID, kapasitas disk, pembersihan sampah memori image, atau resource CPU dan memori. - Kompatibilitas workload: membantu memastikan bahwa lingkungan node memenuhi prasyarat tertentu untuk software khusus atau aplikasi lama yang memerlukan setelan kernel tertentu.
Opsi lain untuk menyesuaikan konfigurasi node
Anda juga dapat menyesuaikan konfigurasi node menggunakan metode lain:
- File konfigurasi runtime: untuk menyesuaikan runtime container containerd di node GKE, Anda dapat menggunakan file lain yang disebut file konfigurasi runtime. Untuk mengetahui informasi selengkapnya, lihat Menyesuaikan konfigurasi containerd di node GKE.
- ComputeClass: Anda dapat menentukan atribut node dalam spesifikasi ComputeClass GKE. Anda dapat menggunakan ComputeClass, dalam mode GKE Autopilot dan mode Standard, di GKE versi 1.32.1-gke.1729000 dan yang lebih baru. Untuk mengetahui informasi selengkapnya, lihat Menyesuaikan konfigurasi sistem node.
- DaemonSets: Anda juga dapat menggunakan DaemonSets untuk menyesuaikan node. Untuk informasi selengkapnya, lihat Melakukan bootstrap node GKE secara otomatis dengan DaemonSets.
Konfigurasi sistem node tidak didukung di node Windows Server.
Sebelum memulai
Sebelum memulai, pastikan Anda melakukan hal berikut:
- Menginstal alat command line:
- Jika Anda menggunakan contoh gcloud CLI dalam dokumen ini, pastikan Anda menginstal dan mengonfigurasi Google Cloud CLI.
- Jika Anda menggunakan contoh Terraform, pastikan Anda menginstal dan mengonfigurasi Terraform.
- Memberikan izin: Anda memerlukan izin IAM yang sesuai untuk membuat dan mengupdate cluster dan node pool GKE, seperti
container.clusterAdminatau peran lain dengan izin yang setara. - Rencanakan potensi gangguan workload: konfigurasi node kustom diterapkan di tingkat node pool. Perubahan biasanya memicu update bertahap pada node di pool, yang melibatkan pembuatan ulang node. Rencanakan potensi gangguan workload dan gunakan Anggaran Gangguan Pod (PDB) jika sesuai.
- Cadangkan dan uji semua perubahan: selalu uji perubahan konfigurasi di lingkungan penyiapan atau lingkungan pengembangan sebelum Anda menerapkannya ke produksi. Setelan yang salah dapat menyebabkan ketidakstabilan node atau kegagalan workload.
- Tinjau setelan default GKE: Image node GKE dilengkapi dengan konfigurasi default yang dioptimalkan. Hanya sesuaikan parameter jika Anda memiliki kebutuhan khusus dan memahami dampak perubahan Anda.
Menambahkan konfigurasi sistem node
Anda dapat menyesuaikan konfigurasi sistem node menggunakan ComputeClass atau file konfigurasi.
Menggunakan ComputeClass untuk konfigurasi sistem node
Anda dapat menggunakan ComputeClass kustom untuk menyesuaikan parameter tertentu di kubelet dan kernel Linux. Metode ini tersedia di GKE versi 1.32.1-gke.1729000 dan yang lebih baru.
Untuk menggunakan ComputeClass guna menyesuaikan konfigurasi sistem node, lakukan hal berikut:
- Buat ComputeClass yang menyertakan pasangan nilai kolom
spec.nodePoolAutoCreation.enabled: truedan tentukan konfigurasi sistem di kolompriorityDefaults. - Deploy workload yang memilih ComputeClass.
Membuat ComputeClass
Tulis konfigurasi ComputeClass Anda di YAML. Gunakan kolom nodeSystemConfig di dalam spesifikasi priorityDefaults untuk menetapkan konfigurasi sistem di semua prioritas.
Contoh ComputeClass berikut mengonfigurasi kebijakan pengelola CPU statis dan parameter kernel kustom:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: custom-sysconfig
spec:
nodePoolAutoCreation:
enabled: true
priorityDefaults:
nodeSystemConfig:
kubeletConfig:
cpuManagerPolicy: static
linuxNodeConfig:
sysctls:
net.core.somaxconn: 2048
priorities:
- machineFamily: n4
Terapkan ComputeClass:
kubectl apply -f custom-sysconfig.yaml
Men-deploy workload yang memilih ComputeClass
Dalam spesifikasi Pod, tambahkan pemilih node untuk nama ComputeClass:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
nodeSelector:
cloud.google.com/compute-class: custom-sysconfig
containers:
- name: app-container
image: nginx
Terapkan workload:
kubectl apply -f my-app.yaml
Untuk mengetahui informasi selengkapnya, lihat Menyesuaikan konfigurasi sistem node.
Menggunakan file konfigurasi untuk konfigurasi sistem node
Saat menggunakan file konfigurasi sistem node, Anda menggunakan file YAML yang berisi parameter konfigurasi untuk kubelet dan kernel Linux. Meskipun konfigurasi sistem node juga tersedia dalam mode GKE Autopilot, langkah-langkah dalam dokumen ini menunjukkan cara membuat dan menggunakan file konfigurasi untuk mode GKE Standard.
Untuk menggunakan file konfigurasi sistem node dalam mode GKE Standard, lakukan hal berikut:
- Buat file konfigurasi. File ini berisi konfigurasi
kubeletdansysctlAnda. - Tambahkan konfigurasi saat membuat cluster, atau saat membuat atau memperbarui node pool.
Membuat file konfigurasi
Tulis konfigurasi sistem node Anda di YAML. Contoh berikut menambahkan konfigurasi untuk opsi kubelet dan sysctl:
kubeletConfig:
cpuManagerPolicy: static
allowedUnsafeSysctls:
- 'kernel.shm*'
- 'kernel.msg*'
- 'kernel.sem'
- 'fs.mqueue.*'
- 'net.*'
linuxConfig:
sysctl:
net.core.somaxconn: '2048'
net.ipv4.tcp_rmem: '4096 87380 6291456'
Dalam contoh ini, hal berikut berlaku:
- Kolom
cpuManagerPolicy: staticmengonfigurasikubeletuntuk menggunakan kebijakan pengelolaan CPU statis. - Kolom
net.core.somaxconn: '2048'membatasi backlogsocket listen()hingga 2.048 byte. - Kolom
net.ipv4.tcp_rmem: '4096 87380 6291456'menetapkan nilai minimum, default, dan maksimum soket TCP yang menerima buffer, berturut-turut, ke 4.096 byte, 87.380 byte, dan 6.291.456 byte.
Jika Anda hanya ingin menambahkan konfigurasi untuk kubelet atau sysctl, sertakan bagian itu saja dalam konfigurasi sistem node Anda. Misalnya, untuk menambahkan konfigurasi kubelet, buat file berikut:
kubeletConfig:
cpuManagerPolicy: static
Untuk mengetahui daftar lengkap kolom yang dapat Anda tambahkan ke konfigurasi sistem node, lihat bagian Opsi konfigurasi Kubelet dan Opsi konfigurasi Sysctl.
Menambahkan konfigurasi ke node pool Standard
Setelah Anda membuat konfigurasi sistem node, tambahkan flag --system-config-from-file menggunakan Google Cloud CLI. Anda dapat menambahkan tanda ini saat membuat cluster, atau saat membuat atau mengupdate node pool. Anda tidak dapat menambahkan konfigurasi sistem node menggunakan konsol Google Cloud .
Membuat cluster dengan konfigurasi sistem node
Anda dapat menambahkan konfigurasi sistem node selama pembuatan cluster menggunakan gcloud CLI atau Terraform. Petunjuk berikut menerapkan konfigurasi sistem node ke node pool default:
gcloud CLI
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Ganti kode berikut:
CLUSTER_NAME: nama cluster AndaLOCATION: zona atau region komputasi clusterSYSTEM_CONFIG_PATH: jalur ke file yang berisi konfigurasikubeletdansysctl
Setelah Anda menerapkan konfigurasi sistem node, node pool default cluster akan menggunakan setelan yang Anda tentukan.
Terraform
Untuk membuat cluster regional dengan konfigurasi sistem node yang disesuaikan menggunakan Terraform, lihat contoh berikut:
Untuk mengetahui informasi selengkapnya tentang penggunaan Terraform, lihat Dukungan Terraform untuk GKE.
Membuat node pool baru dengan konfigurasi sistem node
Anda dapat menambahkan konfigurasi sistem node saat menggunakan gcloud CLI atau Terraform untuk membuat node pool baru.
Petunjuk berikut menerapkan konfigurasi sistem node ke node pool baru:
gcloud CLI
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Ganti kode berikut:
POOL_NAME: nama node pool AndaCLUSTER_NAME: nama cluster yang ingin Anda tambahi node poolLOCATION: zona atau region komputasi clusterSYSTEM_CONFIG_PATH: jalur ke file yang berisi konfigurasikubeletdansysctl
Terraform
Untuk membuat node pool dengan konfigurasi sistem node yang disesuaikan menggunakan Terraform, lihat contoh berikut:
Untuk mengetahui informasi selengkapnya tentang penggunaan Terraform, lihat Dukungan Terraform untuk GKE.
Memperbarui konfigurasi sistem node untuk node pool yang ada
Anda dapat menetapkan atau memperbarui konfigurasi sistem node untuk node pool yang ada. Untuk mengetahui informasi selengkapnya tentang cara memperbarui konfigurasi yang ada, lihat Mengedit dengan memperbarui node pool yang ada.
Jalankan perintah berikut untuk mengupdate node pool yang ada:
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Ganti kode berikut:
POOL_NAME: nama node pool yang Anda ingin perbaruiCLUSTER_NAME: nama cluster yang ingin Anda updateLOCATION: zona atau region komputasi clusterSYSTEM_CONFIG_PATH: jalur ke file yang berisi konfigurasikubeletdansysctl
Perubahan ini memerlukan pembuatan ulang node, yang dapat menyebabkan gangguan pada workload yang sedang berjalan. Untuk mengetahui informasi selengkapnya tentang perubahan spesifik ini, temukan baris yang sesuai di tabel perubahan manual yang membuat ulang node menggunakan strategi upgrade node tanpa mematuhi kebijakan pemeliharaan.
Untuk mengetahui informasi selengkapnya tentang update node, lihat Merencanakan gangguan update node.
Mengedit konfigurasi sistem node
Anda dapat mengedit konfigurasi sistem node, bergantung pada apakah Anda menggunakan ComputeClass atau file konfigurasi.
Untuk ComputeClass
Untuk mengedit konfigurasi sistem node saat menggunakan ComputeClasses, pilih salah satu metode berikut:
Metode 1: Mengupdate ComputeClass yang ada
Jika Anda mengupdate nodeSystemConfig di ComputeClass yang ada, GKE akan menerapkan konfigurasi yang diupdate hanya ke node yang baru dibuat. Node yang ada tidak diperbarui secara otomatis.
Untuk memigrasikan workload ke node dengan konfigurasi baru, Anda dapat melakukan salah satu hal berikut:
- Konfigurasi migrasi aktif di ComputeClass Anda.
- Untuk memicu penskalaan node baru, mulai ulang atau buat ulang workload Anda secara manual.
Untuk memperbarui ComputeClass, edit file YAML dan terapkan:
kubectl apply -f custom-sysconfig.yaml
Metode 2: Membuat ComputeClass baru
Untuk membantu memastikan workload Anda dimigrasikan ke node baru dengan konfigurasi yang diupdate, lakukan hal berikut:
- Buat ComputeClass baru dengan nama yang berbeda dan konfigurasi yang diperbarui.
- Perbarui pemilih node dalam spesifikasi workload Anda untuk mereferensikan ComputeClass baru.
- Terapkan spesifikasi workload yang telah diperbarui. Cluster autoscaler akan menyediakan node baru dengan konfigurasi baru dan akhirnya memperkecil skala node lama.
- Hapus objek ComputeClass lama.
Untuk file konfigurasi
Untuk mengedit konfigurasi sistem node saat menggunakan file konfigurasi, Anda dapat membuat node pool baru dengan konfigurasi yang diinginkan, atau memperbarui konfigurasi sistem node untuk node pool yang ada.
Mengedit dengan membuat node pool
Untuk mengedit konfigurasi sistem node dengan membuat node pool, lakukan hal berikut:
- Buat file konfigurasi dengan konfigurasi yang Anda inginkan.
- Tambahkan konfigurasi ke node pool baru.
- Migrasikan workload Anda ke node pool baru.
- Hapus node pool lama.
Mengedit dengan memperbarui node pool yang ada
Untuk mengedit konfigurasi sistem node yang ada dari node pool yang ada, ikuti petunjuk di tab Update node pool untuk menambahkan konfigurasi ke node pool. Saat Anda memperbarui konfigurasi sistem node dan konfigurasi baru menggantikan konfigurasi sistem node pool yang ada, node harus dibuat ulang. Jika Anda menghilangkan parameter apa pun selama update, parameter tersebut akan ditetapkan ke nilai default-nya masing-masing.
Mendapatkan konfigurasi sistem node yang ada
Untuk mengambil konfigurasi sistem node yang ada di node pool Anda—misalnya, jika Anda telah menyesuaikan konfigurasi dan ingin menambahkannya—gunakan perintah gcloud container node-pools describe. Output perintah mencantumkan konfigurasi yang ada di bagian kubeletConfig dan linuxNodeConfig.
Misalnya, lihat cuplikan berikut yang menunjukkan format output dari perintah describe:
kubeletConfig:
allowedUnsafeSysctls:
- kernel.shm*
- kernel.msg*
- kernel.sem
- fs.mqueue.*
- net.*
cpuManagerPolicy: static
insecureKubeletReadonlyPortEnabled: false
maxParallelImagePulls: 2
linuxNodeConfig: # IMPORTANT: Use linuxConfig when updating these settings
sysctl:
net.core.somaxconn: '2048'
net.ipv4.tcp_rmem: 4096 87380 6291456
Jika Anda belum menetapkan konfigurasi sistem node, output tidak akan mencantumkan kubeletConfig atau linuxNodeConfig.
Mereset konfigurasi sistem node yang ada
Jika Anda ingin mereset konfigurasi sistem node kembali ke default-nya, update file konfigurasi Anda dengan nilai kosong untuk kolom kubelet dan sysctl, misalnya:
kubeletConfig: {}
linuxConfig:
sysctl: {}
Menghapus konfigurasi sistem node
Untuk menghapus konfigurasi sistem node, ikuti langkah-langkahnya, bergantung pada apakah Anda menggunakan ComputeClass atau file konfigurasi.
Untuk ComputeClass
Untuk menghapus konfigurasi sistem node kustom, lakukan hal berikut:
- Hapus pemilih node
cloud.google.com/compute-classdari spesifikasi workload Anda. - Terapkan spesifikasi workload yang telah diperbarui. GKE membuat ulang workload di node default. Autoscaler cluster pada akhirnya akan memperkecil skala dan menghapus node yang disediakan untuk ComputeClass.
Hapus objek ComputeClass dari cluster:
kubectl delete computeclass CUSTOM_COMPUTE_CLASS_NAME
Untuk file konfigurasi
Untuk menghapus konfigurasi sistem node yang diterapkan menggunakan file konfigurasi, lakukan langkah-langkah berikut:
- Buat node pool baru tanpa file konfigurasi.
- Migrasikan workload Anda ke node pool baru.
- Hapus node pool yang berisi konfigurasi sistem node lama.
Opsi konfigurasi untuk kubelet
Tabel di bagian ini menjelaskan opsi kubelet yang dapat Anda ubah.
Pengelolaan CPU
Tabel berikut menjelaskan opsi pengelolaan CPU untuk kubelet.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
cpuCFSQuota |
Harus berupa true atau false. |
true |
Setelan ini memberlakukan batas CPU Pod. Jika nilai ini ditetapkan ke false, batas CPU untuk Pod akan diabaikan.Mengabaikan batas CPU mungkin bermanfaat dalam skenario tertentu saat Pod sensitif terhadap batas CPU. Risiko menonaktifkan cpuCFSQuota adalah bahwa Pod yang bermasalah dapat memakai resource CPU lebih banyak daripada yang semestinya. |
cpuCFSQuotaPeriod |
Harus berupa durasi waktu. | "100ms" |
Setelan ini menetapkan nilai periode kuota CFS CPU, cpu.cfs_period_us, yang menentukan periode seberapa sering akses cgroup ke resource CPU harus dialokasikan ulang. Dengan opsi ini, Anda dapat menyesuaikan perilaku throttling CPU. |
reservedSystemCPUs
(Pratinjau)
|
Harus berupa daftar core CPU tertentu yang akan direservasi (misalnya,
0-1 atau 0,1 untuk mereservasi core 0 dan 1). Karena
core diindeks nol, nilainya harus kurang dari jumlah vCPU
pada jenis mesin. |
none |
Secara eksplisit mencadangkan core CPU tertentu untuk layanan sistem host,
seperti daemon OS dan layanan Mereservasi CPU sistem akan mengurangi keseluruhan kapasitas yang dapat dialokasikan dari node Anda. Meskipun Pod Pastikan Anda memesan core CPU yang cukup di
|
Manajemen memori dan penghapusan
Tabel berikut menjelaskan opsi yang dapat diubah untuk manajemen memori dan penghapusan. Bagian ini juga berisi tabel terpisah yang menjelaskan opsi yang dapat diubah untuk flag evictionSoft.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
evictionSoft |
Peta nama sinyal. Untuk batasan nilai, lihat tabel berikut. | none |
Setelan ini memetakan nama sinyal ke jumlah atau persentase yang menentukan batas pengeluaran ringan. Batas pengeluaran sementara harus memiliki masa tenggang. kubelet tidak mengeluarkan Pod hingga masa tenggang terlampaui. |
evictionSoftGracePeriod |
Peta nama sinyal. Untuk setiap nama sinyal, nilainya harus berupa durasi positif yang kurang dari 5m. Unit waktu yang valid adalah ns, us (atau µs), ms, s, atau m. |
none |
Setelan ini memetakan nama sinyal ke durasi yang menentukan masa tenggang untuk batas pengosongan ringan. Setiap batas pengosongan ringan harus memiliki masa tenggang yang sesuai. |
evictionMinimumReclaim |
Peta nama sinyal. Untuk setiap nama sinyal, nilainya harus berupa persentase positif yang kurang dari 10%. |
none |
Setelan ini memetakan nama sinyal ke persentase yang menentukan jumlah minimum resource tertentu yang diklaim kembali oleh kubelet saat melakukan pengeluaran Pod. |
evictionMaxPodGracePeriodSeconds |
Nilai harus berupa bilangan bulat antara 0 dan 300. |
0 |
Setelan ini menentukan, dalam detik, masa tenggang maksimum untuk penghentian Pod selama pengusiran. |
singleProcessOOMKill
|
Nilai harus berupa true atau false. |
true untuk node cgroupv1, false untuk node cgroupv2. |
Setelan ini menentukan apakah proses dalam container dihentikan karena kehabisan memori (OOMkilled) secara individual atau sebagai grup.
Tersedia di GKE versi 1.32.4-gke.1132000, 1.33.0-gke.1748000 atau yang lebih baru. |
Tabel berikut menunjukkan opsi yang dapat diubah untuk flag evictionSoft.
Opsi yang sama juga berlaku untuk flag evictionSoftGracePeriod dan
evictionMinimumReclaim dengan batasan yang berbeda.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
memoryAvailable |
Nilai harus berupa jumlah yang lebih besar dari 100Mi dan lebih kecil dari 50% memori node. |
none |
Setelan ini menunjukkan jumlah memori yang tersedia sebelum pengosongan ringan. Menentukan jumlah sinyal memory.available dalam kubelet . |
nodefsAvailable |
Nilai harus antara 10% dan 50%. |
none |
Setelan ini mewakili nodef yang tersedia sebelum pengeluaran sementara. Menentukan jumlah sinyal nodefs.available dalam kubelet . |
nodefsInodesFree |
Nilai harus antara 5% dan 50%. |
none |
Setelan ini mewakili inode nodefs yang kosong sebelum pengeluaran sementara. Menentukan jumlah sinyal nodefs.inodesFree dalam kubelet . |
imagefsAvailable |
Nilai harus antara 15% dan 50%. |
none |
Setelan ini mewakili imagefs yang tersedia sebelum pengusiran ringan. Menentukan jumlah sinyal imagefs.available dalam kubelet . |
imagefsInodesFree |
Nilai harus antara 5% dan 50%. |
none |
Setelan ini mewakili inode imagefs yang kosong sebelum pengusiran ringan. Menentukan jumlah sinyal imagefs.inodesFree dalam kubelet. |
pidAvailable |
Nilai harus antara 10% dan 50%. |
none |
Setelan ini mewakili PID yang tersedia sebelum pengeluaran ringan. Menentukan jumlah sinyal pid.available dalam kubelet. |
Pengelolaan PID
Tabel berikut menjelaskan opsi yang dapat diubah untuk pengelolaan PID.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
podPidsLimit |
Nilai harus antara 1024 dan 4194304. |
none |
Setelan ini menetapkan jumlah maksimum ID proses (PID) yang dapat digunakan oleh setiap Pod. |
Logging
Tabel berikut menjelaskan opsi yang dapat diubah untuk logging.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
containerLogMaxSize |
Nilai harus berupa angka positif dan akhiran unit antara 10Mi dan 500Mi, inklusif. |
10Mi |
Setelan ini mengontrol setelan containerLogMaxSize kebijakan rotasi log penampung, yang memungkinkan Anda mengonfigurasi ukuran maksimum untuk setiap file log. Nilai defaultnya adalah 10Mi. Satuan yang valid adalah Ki, Mi, dan Gi. |
containerLogMaxFiles |
Nilai harus berupa bilangan bulat antara 2 dan 10, inklusif. |
5 |
Setelan ini mengontrol setelan containerLogMaxFiles dari kebijakan rotasi file log container, yang memungkinkan Anda mengonfigurasi jumlah maksimum file yang diizinkan untuk setiap container. Nilai defaultnya adalah 5. Total ukuran log (container_log_max_size*container_log_max_files) per container tidak boleh melebihi 1% dari total penyimpanan node. |
Pembersihan sampah memori image
Tabel berikut menjelaskan opsi yang dapat diubah untuk pengumpulan sampah gambar.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
imageGcHighThresholdPercent |
Nilai harus berupa bilangan bulat antara 10 dan 85, inklusif, dan lebih tinggi dari imageGcLowThresholdPercent. |
85 |
Setelan ini menentukan persentase penggunaan disk yang akan memicu pembersihan sampah memori image. Nilai ini mewakili penggunaan disk tertinggi untuk pengumpulan sampah. Persentase dihitung dengan membagi nilai kolom ini dengan 100. |
imageGcLowThresholdPercent |
Nilai harus berupa bilangan bulat antara 10 dan 85, inklusif, dan lebih rendah dari imageGcHighThresholdPercent. |
80 |
Setelan ini menentukan persentase penggunaan disk sebelum pembersihan sampah memori image dijalankan. Nilai ini mewakili penggunaan disk terendah untuk pembersihan sampah memori. Persentase dihitung dengan membagi nilai kolom ini dengan 100. |
imageMinimumGcAge |
Nilai harus berupa durasi waktu yang tidak lebih dari 2m. Unit waktu yang valid adalah ns, us (atau µs), ms, s, m, atau h. |
2m |
Setelan ini menentukan usia minimum untuk image yang tidak digunakan sebelum dibersihkan. |
imageMaximumGcAge |
Nilai harus berupa durasi waktu. | 0s |
Setelan ini menentukan usia maksimum gambar yang tidak digunakan sebelum dibersihkan. Nilai default kolom ini adalah Tersedia di GKE versi 1.30.7-gke.1076000, 1.31.3-gke.1023000, atau yang lebih baru. |
Pengambilan image
Tabel berikut menjelaskan opsi yang dapat diubah untuk penarikan image.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
maxParallelImagePulls |
Nilai harus berupa bilangan bulat antara 2 dan 5, inklusif. | 2 atau 3 berdasarkan jenis disk. |
Setelan ini menentukan jumlah maksimum pengambilan image secara paralel. Nilai default ditentukan oleh jenis boot disk. |
Keamanan dan operasi yang tidak aman
Tabel berikut menjelaskan opsi yang dapat diubah untuk mengonfigurasi keamanan dan menangani operasi yang tidak aman.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
allowedUnsafeSysctls |
Daftar nama atau grup
|
none |
Setelan ini menentukan daftar yang diizinkan yang dipisahkan koma untuk nama sysctl atau grup sysctl yang tidak aman yang dapat ditetapkan di Pod. |
insecureKubeletReadonlyPortEnabled |
Nilai harus berupa nilai boolean, yaitu true atau false. |
false |
Setelan ini menonaktifkan kubelet port hanya baca 10255 yang tidak aman di setiap node pool baru di cluster Anda. Jika mengonfigurasi setelan ini dalam file ini, Anda tidak dapat menggunakan klien GKE API untuk mengubah setelan di level cluster. |
Pengelola Resource
Kubernetes menawarkan serangkaian Pengelola Resource. Anda dapat mengonfigurasi Pengelola Resource ini untuk mengoordinasikan dan mengoptimalkan keselarasan resource node untuk Pod yang dikonfigurasi dengan persyaratan khusus untuk CPU, perangkat, dan resource memori (hugepage).
Tabel berikut menjelaskan opsi yang dapat diubah untuk Pengelola Resource.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
cpuManagerPolicy |
Nilai harus berupa none atau static. |
none |
Setelan ini mengontrol kebijakan CPU Manager kubelet. Nilai default-nya adalah none, yang merupakan skema afinitas CPU default, yang tidak memberikan afinitas di luar apa yang dilakukan scheduler OS secara otomatis.Jika nilai ini ditetapkan ke static, Pod yang berada di class QoS Guaranteed dan memiliki permintaan CPU bilangan bulat akan ditetapkan untuk menggunakan CPU secara eksklusif. |
memoryManager.policy |
Nilai harus berupa None atau Static. |
None |
Setelan ini mengontrol kebijakan Pengelola Memori Jika Anda menetapkan nilai ini ke Setelan ini didukung untuk cluster dengan bidang kontrol yang menjalankan GKE versi 1.32.3-gke.1785000 atau yang lebih baru. |
topologyManager |
Nilai harus berupa salah satu setelan yang didukung untuk setiap kolom yang sesuai. Anda tidak dapat menetapkan kolom |
|
Setelan ini mengontrol konfigurasi Topology Manager Anda dapat menetapkan setelan kebijakan dan cakupan secara terpisah. Untuk mengetahui informasi selengkapnya tentang setelan ini, lihat Cakupan dan kebijakan pengelola topologi. Resource GKE berikut mendukung setelan ini:
|
Penundaan mulai ulang container
Setelan ini mengontrol waktu tunggu maksimum di antara upaya memulai ulang container saat container dalam status CrashLoopBackOff. Anda dapat mengonfigurasi
setelan ini untuk node pool Standard yang menjalankan GKE versi
1.35 atau yang lebih baru.
Tabel berikut menjelaskan opsi yang dapat diubah untuk crashLoopBackOff.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
crashLoopBackOff.maxContainerRestartPeriod |
Nilai harus berupa durasi positif yang kurang dari atau sama dengan 5 menit (5m). Satuan waktu yang valid adalah ns, us (atau µs), ms, s, atau m. |
none |
Durasi maksimum penundaan backoff yang dapat diakumulasikan untuk memulai ulang container. Penundaan antara mulai ulang meningkat secara eksponensial dari nilai awal hingga batas maksimum ini. Batas maksimum default untuk cluster Kubernetes adalah 5 menit. Untuk mengetahui informasi selengkapnya, lihat Penundaan mulai ulang container yang dapat dikonfigurasi. |
Penghentian tuntas Spot VM di GKE
Tabel berikut menjelaskan opsi yang dapat diubah untuk penghentian dan periode penghentian normal untuk Spot VM di GKE. Untuk menggunakan opsi ini, bidang kontrol cluster Anda harus menjalankan GKE versi 1.35.0-gke.1171000 atau yang lebih baru. Untuk mengetahui informasi selengkapnya, lihat Cara kerja Spot VM di GKE.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
shutdownGracePeriodSeconds |
Nilai harus berupa bilangan bulat yang mewakili durasi dalam detik. Nilai yang diizinkan adalah 0, 30, atau 120. |
30 |
Menentukan total durasi dalam detik yang digunakan node untuk menunda penonaktifan agar dapat menghentikan Pod secara tuntas. |
shutdownGracePeriodCriticalPodsSeconds |
Nilai harus berupa bilangan bulat antara 0 dan 120 (inklusif), dan harus kurang dari shutdownGracePeriodSeconds. Hanya berlaku jika shutdownGracePeriodSeconds juga ditetapkan. |
15 |
Menentukan durasi dalam detik yang digunakan untuk menghentikan Pod penting selama penonaktifan node. |
Reservasi resource sistem
Untuk node pool Standard yang menjalankan Linux dan GKE 1.37 atau yang lebih baru, Anda dapat menyesuaikan jumlah memori dan CPU yang dicadangkan untuk komponen sistem. Hal ini memungkinkan Anda menyesuaikan kapasitas yang dapat dialokasikan untuk skenario tertentu, seperti menangani penarikan gambar dalam volume tinggi atau menjalankan DaemonSet node yang disesuaikan. Untuk mengetahui informasi selengkapnya tentang reservasi default, lihat Tentang penentuan ukuran node GKE.
Tabel berikut menjelaskan opsi yang dapat diubah untuk pemesanan resource sistem.
Setelan konfigurasi kubelet |
Pembatasan | Setelan default | Deskripsi |
|---|---|---|---|
reservedResourcesConfig.memoryReservedMib |
Nilai harus berupa bilangan bulat. Harus lebih besar dari atau sama dengan pemesanan memori default untuk node pool yang dibuat yang menjalankan versi 1.37 atau yang lebih baru, dan kurang dari 50% total kapasitas memori node. | Lihat Reservasi memori. | Jumlah memori yang akan dicadangkan untuk komponen sistem, dalam mebibyte (MiB). |
reservedResourcesConfig.cpuReservedMillicore |
Nilai harus berupa bilangan bulat. Harus lebih besar dari atau sama dengan reservasi CPU default untuk node pool yang dibuat dengan menjalankan 1.37 atau yang lebih baru, dan kurang dari 50% dari total kapasitas CPU node. | Lihat Reservasi CPU. | Jumlah CPU yang akan dicadangkan untuk komponen sistem, dalam milicore. |
Memverifikasi reservasi yang efektif
Untuk memeriksa reservasi aktif yang diterapkan ke node pool Anda, periksa kolom output effectiveMemoryReservedMib dan effectiveCpuReservedMillicore:
gcloud container node-pools describe POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--format="yaml(config.kubeletConfig.reservedResourcesConfig)"
Opsi konfigurasi Sysctl
Untuk menyesuaikan performa sistem, Anda dapat mengubah parameter kernel Linux. Tabel di bagian ini menjelaskan berbagai parameter kernel yang dapat Anda konfigurasi.
Parameter sistem file (fs.*)
Tabel berikut menjelaskan parameter yang dapat diubah untuk sistem file Linux. Setelan ini mengontrol perilaku sistem file Linux, seperti batas handle file dan pemantauan peristiwa.
Parameter Sysctl |
Pembatasan | Deskripsi |
|---|---|---|
fs.aio-max-nr |
Harus antara [65536, 4194304]. | Setelan ini menentukan jumlah maksimum permintaan I/O asinkron di seluruh sistem. |
fs.file-max |
Harus antara [104857, 67108864]. | Setelan ini menentukan jumlah maksimum handle file yang dapat dialokasikan oleh kernel Linux. |
fs.inotify.max_user_instances |
Harus antara [8192, 1048576]. | Setelan ini menentukan jumlah maksimum instance inotify yang dapat dibuat pengguna. |
fs.inotify.max_user_watches |
Harus antara [8192, 1048576]. | Setelan ini menentukan jumlah maksimum pengamatan inotify yang dapat dibuat pengguna. |
fs.nr_open |
Harus antara [1048576, 2147483584]. | Setelan ini menentukan jumlah maksimum deskriptor file yang dapat dibuka oleh suatu proses. |
Parameter kernel (kernel.*)
Tabel berikut menjelaskan parameter yang dapat diubah untuk kernel Linux. Setelan ini mengonfigurasi fungsi kernel inti, termasuk alokasi memori bersama.
| Parameter sysctl | Pembatasan | Deskripsi |
|---|---|---|
kernel.shmmni |
Harus antara [4096, 32768]. | Setelan ini menentukan jumlah maksimum segmen memori bersama di seluruh sistem. Jika nilai ini tidak ditetapkan, nilai defaultnya adalah 4096. |
kernel.shmmax |
Harus antara [0, 18446744073692774399]. | Setelan ini menentukan ukuran maksimum, dalam byte, dari satu segmen memori bersama yang diizinkan oleh kernel. Nilai ini diabaikan jika lebih besar dari jumlah RAM sebenarnya, yang berarti semua RAM yang tersedia dapat dibagikan. |
kernel.shmall |
Harus antara [0, 18446744073692774399]. | Setelan ini menentukan jumlah total halaman memori bersama yang dapat digunakan di sistem dalam satu waktu. Halaman berukuran 4.096 byte pada arsitektur AMD64 dan Intel 64. |
kernel.perf_event_paranoid |
Harus antara [-1, 3]. | Setelan ini mengontrol penggunaan sistem peristiwa performa oleh pengguna yang tidak memiliki hak istimewa tanpa CAP_PERFMON. Nilai defaultnya adalah 2 di kernel. |
kernel.sched_rt_runtime_us |
Harus antara [-1, 1000000]. | Setelan ini menentukan batas global untuk jumlah waktu yang dapat digunakan penjadwalan real-time. |
kernel.softlockup_panic |
Opsional (boolean). | Setelan ini mengontrol apakah kernel mengalami error saat soft lockup terdeteksi. |
kernel.yama.ptrace_scope |
Harus antara [0, 3]. |
Setelan ini menentukan cakupan dan batasan untuk panggilan sistem
|
kernel.kptr_restrict |
Harus antara [0, 2]. | Setelan ini menunjukkan apakah pembatasan diterapkan pada pemaparan alamat kernel melalui /proc dan antarmuka lainnya. |
kernel.dmesg_restrict |
Opsional (boolean). | Setelan ini menunjukkan apakah pengguna yang tidak memiliki hak istimewa dicegah menggunakan dmesg(8) untuk melihat pesan dari buffer log kernel. |
kernel.sysrq |
Harus antara [0, 511]. |
Setelan ini mengontrol fungsi yang diizinkan untuk dipanggil melalui tombol SysRq. Nilai yang memungkinkan mencakup:
|
kernel.keys.maxbytes |
Harus antara [20000, 2097152]. | Setelan ini menentukan jumlah maksimum byte yang dapat disimpan pengguna non-root di bagian payload semua kuncinya. |
kernel.keys.maxkeys |
Harus antara [200, 1048576]. | Setelan ini menentukan jumlah maksimum kunci yang dapat dimiliki oleh pengguna non-root. |
Parameter jaringan (net.*)
Tabel berikut menjelaskan parameter yang dapat diubah untuk jaringan. Setelan ini menyesuaikan performa dan perilaku tumpukan jaringan, dari buffer soket hingga pelacakan koneksi.
| Parameter sysctl | Pembatasan | Deskripsi |
|---|---|---|
net.core.busy_poll |
Bilangan bulat positif apa pun, kurang dari 2147483647. | Setelan ini menentukan waktu tunggu polling sibuk latensi rendah untuk polling dan pemilihan. Nilai ini menunjukkan perkiraan waktu dalam µs untuk loop sibuk yang menunggu peristiwa. |
net.core.busy_read |
Bilangan bulat positif apa pun, kurang dari 2147483647. | Setelan ini menentukan waktu tunggu polling sibuk latensi rendah untuk pembacaan soket. Nilai ini menunjukkan perkiraan waktu dalam µs untuk loop sibuk yang menunggu paket di antrean perangkat. |
net.core.netdev_max_backlog |
Bilangan bulat positif apa pun, kurang dari 2147483647. | Setelan ini menentukan jumlah maksimum paket, yang diantrekan di sisi INPUT, saat antarmuka menerima paket lebih cepat daripada yang dapat diproses kernel. |
net.core.rmem_default |
Bilangan bulat positif apa pun, kurang dari 2147483647. | Setelan ini menentukan ukuran buffer soket penerima default, dalam byte. |
net.core.rmem_max |
Bilangan bulat positif apa pun, kurang dari 2147483647. | Setelan ini menentukan ukuran buffer soket penerimaan maksimum, dalam byte. |
net.core.wmem_default |
Bilangan bulat positif apa pun, kurang dari 2147483647. | Setelan ini menentukan setelan default, dalam byte, dari buffer pengiriman soket. |
net.core.wmem_max |
Bilangan bulat positif apa pun, kurang dari 2147483647. | Setelan ini menentukan ukuran buffer soket pengiriman maksimum, dalam byte. |
net.core.optmem_max |
Bilangan bulat positif apa pun, kurang dari 2147483647. | Setelan ini menentukan ukuran buffer tambahan maksimum yang diizinkan per soket. |
net.core.somaxconn |
Harus antara [128, 2147483647]. | Setelan ini menentukan batas backlog socket listen(), yang dikenal di userspace sebagai SOMAXCONN. Setelan ini secara default adalah 128. |
net.ipv4.tcp_rmem |
{min, default, max} (masing-masing > 0, memori dalam byte). | Setelan ini menentukan ukuran minimum, dalam byte, dari buffer penerimaan yang digunakan oleh soket UDP dalam moderasi. Setelan defaultnya adalah 1 halaman. |
net.ipv4.tcp_wmem |
{min, default, max} (masing-masing > 0, memori dalam byte). | Setelan ini menentukan ukuran minimal, dalam byte, buffering pengiriman yang digunakan oleh soket UDP dalam moderasi. Setelan defaultnya adalah 1 halaman. |
net.ipv4.tcp_tw_reuse |
Harus antara {0, 1}. | Setelan ini menentukan apakah akan mengizinkan penggunaan ulang soket dalam status TIME_WAIT untuk koneksi baru jika aman dari sudut pandang protokol. Nilai defaultnya adalah 0. |
net.ipv4.tcp_max_orphans |
Harus antara [16384, 262144]. | Setelan ini menentukan jumlah maksimum soket TCP yang tidak terpasang ke proses penanganan file pengguna mana pun. |
net.ipv4.tcp_max_tw_buckets |
Harus antara [4096, 2147483647]. | Setelan ini menentukan jumlah maksimum soket timewait yang disimpan oleh sistem secara bersamaan. Jika jumlah ini terlampaui, soket time-wait akan segera dihancurkan dan peringatan akan dicetak. |
net.ipv4.tcp_syn_retries |
Harus antara [1, 127]. | Setelan ini menentukan jumlah upaya transmisi ulang SYN awal untuk koneksi TCP aktif. |
net.ipv4.tcp_ecn |
Harus antara [0, 2]. | Setelan ini mengontrol penggunaan Explicit Congestion Notification (ECN) oleh TCP. ECN hanya digunakan jika kedua ujung koneksi TCP menunjukkan dukungan untuk ECN. |
net.ipv4.tcp_mtu_probing |
Harus antara [0, 2]. |
Setelan ini mengontrol Packetization-Layer Path MTU Discovery TCP. Nilai yang didukung adalah sebagai berikut:
|
net.ipv4.tcp_congestion_control |
Harus berupa salah satu nilai yang didukung dari kolom Deskripsi. | Setelan ini tidak didukung jika GKE Dataplane V2 diaktifkan di cluster. Nilai yang didukung berikut bergantung pada jenis gambar:
|
net.ipv6.conf.all.disable_ipv6 |
Boolean. | Mengubah nilai ini sama dengan mengubah setelan conf/default/disable_ipv6 dan juga semua setelan disable_ipv6 per antarmuka ke nilai yang sama. |
net.ipv6.conf.default.disable_ipv6 |
Boolean. | Setelan ini menonaktifkan operasi IPv6. |
net.netfilter.nf_conntrack_acct |
Harus antara {0, 1}. | Setelan ini mengaktifkan akuntansi alur pelacakan koneksi. Nilai defaultnya adalah 0, yang berarti setelan ini dinonaktifkan. Tersedia di GKE versi 1.32.0-gke.1448000 atau yang lebih baru. |
net.netfilter.nf_conntrack_max |
Harus antara [65536, 4194304]. | Setelan ini menentukan ukuran tabel pelacakan koneksi. Jika nilai maksimum tercapai, koneksi baru akan gagal. Tersedia di GKE versi 1.32.0-gke.1448000 atau yang lebih baru. |
net.netfilter.nf_conntrack_buckets |
Harus antara [65536, 524288]. |
Setelan ini menentukan ukuran tabel hash. Setelan yang direkomendasikan adalah hasil dari berikut ini: Tersedia di GKE versi 1.32.0-gke.1448000 atau yang lebih baru. |
net.netfilter.nf_conntrack_tcp_timeout_close_wait |
Harus antara [60, 3600]. |
Setelan ini menentukan periode, dalam detik, saat koneksi TCP dapat tetap dalam status Tersedia di GKE versi 1.32.0-gke.1448000 atau yang lebih baru. |
net.netfilter.nf_conntrack_tcp_timeout_established |
Harus antara [600, 86400]. |
Setelan ini menentukan durasi, dalam detik, koneksi tidak aktif sebelum dihapus secara otomatis dari tabel pelacakan koneksi. Tersedia di GKE versi 1.32.0-gke.1448000 atau yang lebih baru. |
net.netfilter.nf_conntrack_tcp_timeout_time_wait |
Harus antara [1, 600]. |
Setelan ini menentukan periode, dalam detik, saat koneksi TCP dapat tetap dalam status Tersedia di GKE versi 1.32.0-gke.1448000 atau yang lebih baru. |
net.ipv4.neigh.default.gc_thresh1 |
Harus antara [0, 262144]. | Setelan ini menentukan jumlah minimum entri yang akan disimpan dalam cache ARP. Pembersih sampah memori tidak akan berjalan jika jumlah entri di bawah setelan ini. Menetapkan nilai ini ke 0 dapat menyebabkan thrashing cache dan penurunan performa. |
net.ipv4.neigh.default.gc_thresh2 |
Harus antara [512, 524288]. | Setelan ini menentukan jumlah maksimum entri yang bisa dilewati untuk disimpan dalam cache ARP. Pengumpul sampah memungkinkan jumlah entri melebihi nilai ini selama 5 detik sebelum memulai pengumpulan sampah ringan. |
net.ipv4.neigh.default.gc_thresh3 |
Harus antara [1024, 1048576]. | Setelan ini menentukan jumlah maksimum entri yang harus disimpan di cache ARP. Pengumpul sampah dirancang untuk selalu berjalan jika jumlah entri melebihi setelan ini. |
Parameter Memori Virtual (vm.*)
Tabel berikut menjelaskan parameter yang dapat diubah untuk subsistem Memori Virtual. Setelan ini mengelola subsistem Memori Virtual, yang mengontrol cara kernel menangani memori, swapping, dan caching disk.
Parameter sysctl |
Pembatasan | Deskripsi |
|---|---|---|
vm.max_map_count |
Harus antara [65536, 2147483647]. | File ini menentukan jumlah maksimum area peta memori yang dapat dimiliki suatu proses. |
vm.dirty_background_ratio |
Harus antara [1, 100]. | Setelan ini menentukan persentase memori sistem yang dapat diisi dengan halaman kotor sebelum thread pembersih kernel latar belakang memulai penulisan balik. Nilai harus lebih kecil dari nilai kolom vm.dirty_ratio. |
vm.dirty_background_bytes |
Harus antara [0, 68719476736]. |
Setelan ini menentukan jumlah memori kotor yang digunakan thread flusher kernel latar belakang untuk memulai writeback. Perlu diketahui bahwa |
vm.dirty_expire_centisecs |
Harus antara [0, 6000]. | Setelan ini menentukan usia maksimum, dalam seperseratus detik, data kotor dapat tetap berada di memori sebelum thread flusher kernel menulisnya ke disk. |
vm.dirty_ratio |
Harus antara [1, 100]. | Setelan ini menentukan persentase memori sistem yang dapat diisi dengan halaman kotor sebelum proses yang melakukan penulisan dipaksa untuk memblokir dan menulis data kotor secara sinkron. |
vm.dirty_bytes |
Harus antara [0, 68719476736]. |
Setelan ini menentukan jumlah memori kotor yang digunakan oleh proses yang menghasilkan penulisan disk untuk memulai writeback itu sendiri. Nilai minimum yang diizinkan untuk Perhatikan bahwa |
vm.dirty_writeback_centisecs |
Harus antara [0, 1000]. | Setelan ini menentukan interval, dalam seperseratus detik, saat thread flusher kernel aktif untuk menulis data kotor lama ke disk. |
vm.overcommit_memory |
Harus antara {0, 1, 2}. |
Setelan ini menentukan strategi kernel untuk menangani overkomitmen memori. Nilainya adalah sebagai berikut:
Setelan ini tidak didukung di komputer dengan memori kurang dari 15 GB. |
vm.overcommit_ratio |
Harus antara [0, 100]. | Setelan ini menentukan persentase RAM fisik yang diizinkan untuk overcommit saat nilai kolom vm.overcommit_memory ditetapkan ke 2. |
vm.vfs_cache_pressure |
Harus antara [0, 100]. | Setelan ini menyesuaikan preferensi kernel untuk merebut kembali memori yang digunakan untuk cache dentry (direktori) dan inode. |
vm.swappiness |
Harus antara [0, 200]. | Setelan ini mengontrol kecenderungan kernel untuk memindahkan proses keluar dari memori fisik dan ke disk swap. Nilai defaultnya adalah 60. |
vm.watermark_scale_factor |
Harus antara [10, 3000]. | Setelan ini mengontrol agresivitas kswapd. Fungsi ini menentukan memori yang tersisa sebelum kswapd aktif dan memori yang akan dikosongkan sebelum kswapd tidur. Nilai defaultnya adalah 10. |
vm.min_free_kbytes |
Harus antara [67584, 1048576]. | Setelan ini menentukan memori kosong minimum sebelum OOM. Nilai defaultnya adalah 67584. |
Untuk mengetahui informasi selengkapnya tentang nilai yang didukung untuk setiap tanda sysctl, lihat
dokumentasi gcloud CLI --system-config-from-file.
Namespace Linux yang berbeda dapat memiliki nilai unik untuk flag sysctl tertentu, tetapi namespace lainnya mungkin bersifat global untuk keseluruhan node. Memperbarui opsi sysctl menggunakan konfigurasi sistem node membantu memastikan bahwa sysctl diterapkan secara global pada node dan di setiap namespace, sehingga setiap Pod memiliki nilai sysctl yang sama di setiap namespace Linux.
Opsi konfigurasi mode cgroup Linux
Runtime container dan kubelet menggunakan cgroup kernel Linux untuk pengelolaan resource, seperti membatasi jumlah CPU atau memori yang dapat diakses oleh setiap container di sebuah Pod. Ada dua versi subsistem cgroup dalam kernel: cgroupv1 dan cgroupv2.
Dukungan Kubernetes untuk cgroupv2 diperkenalkan sebagai alfa di Kubernetes versi 1.18, beta di 1.22, dan GA di 1.25. Untuk mengetahui informasi selengkapnya, lihat
dokumentasi cgroups v2 Kubernetes.
Dengan konfigurasi sistem node, Anda dapat menyesuaikan konfigurasi cgroup node pool. Anda dapat menggunakan cgroupv1 atau cgroupv2. GKE menggunakan
cgroupv2 untuk node pool Standard baru yang menjalankan versi 1.26 dan yang lebih baru,
serta cgroupv1 untuk node pool yang menjalankan versi yang lebih lama dari 1.26. Untuk node pool yang dibuat dengan node auto-provisioning, konfigurasi cgroup bergantung pada versi cluster awal, bukan versi node pool. cgroupv1 tidak
didukung di mesin Arm.
Anda dapat menggunakan konfigurasi sistem node untuk mengubah setelan node pool agar menggunakan cgroupv1 atau cgroupv2 secara eksplisit. Mengupgrade node pool yang sudah ada yang menggunakan cgroupv1 ke versi 1.26 tidak akan mengubah setelan ke cgroupv2.
Node pool yang ada yang menjalankan versi lebih awal dari 1.26—dan yang tidak menyertakan konfigurasi cgroup yang disesuaikan—akan terus menggunakan cgroupv1.
Untuk mengubah setelan, Anda harus menentukan cgroupv2 secara eksplisit untuk node pool yang ada.
Misalnya, untuk mengonfigurasi node pool agar menggunakan cgroupv2, gunakan file konfigurasi sistem node seperti berikut:
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
Opsi cgroupMode yang didukung adalah sebagai berikut:
CGROUP_MODE_V1: menggunakancgroupv1di node pool.CGROUP_MODE_V2: menggunakancgroupv2di node pool.CGROUP_MODE_UNSPECIFIED: menggunakan konfigurasi cgroup GKE default.
Untuk menggunakan cgroupv2, persyaratan dan batasan berikut berlaku:
- Untuk node pool yang menjalankan versi lebih lama dari 1.26, Anda harus menggunakan gcloud CLI versi 408.0.0 atau yang lebih baru. Atau, gunakan gcloud beta dengan versi 395.0.0 atau yang lebih baru.
- Cluster dan node pool Anda harus menjalankan GKE versi 1.24.2-gke.300 atau yang lebih baru.
- Anda harus menggunakan image node Container-Optimized OS dengan containerd atau Ubuntu dengan containerd.
- Jika ada workload yang bergantung pada pembacaan sistem file cgroup
(
/sys/fs/cgroup/...), pastikan workload tersebut kompatibel dengan APIcgroupv2. - Jika Anda menggunakan alat pemantauan atau alat pihak ketiga, pastikan alat tersebut kompatibel dengan
cgroupv2. - Jika Anda menggunakan workload Java (JDK), sebaiknya gunakan versi yang
mendukung cgroupv2 sepenuhnya,
termasuk JDK
8u372, JDK 11.0.16 atau yang lebih baru, atau JDK 15 atau yang lebih baru.
Memverifikasi konfigurasi cgroup
Saat Anda menambahkan konfigurasi sistem node, GKE harus membuat ulang node untuk menerapkan perubahan. Setelah Anda menambahkan konfigurasi ke node pool dan node dibuat ulang, Anda dapat memverifikasi konfigurasi baru.
Anda dapat memverifikasi konfigurasi cgroup untuk node dalam node pool menggunakan gcloud CLI atau alat command line kubectl:
gcloud CLI
Periksa konfigurasi cgroup untuk node pool:
gcloud container node-pools describe POOL_NAME \
--format='value(Config.effectiveCgroupMode)'
Ganti POOL_NAME dengan nama node pool Anda.
Kemungkinan outputnya adalah salah satu dari berikut:
EFFECTIVE_CGROUP_MODE_V1: node menggunakancgroupv1EFFECTIVE_CGROUP_MODE_V2: node menggunakancgroupv2
Output hanya menampilkan konfigurasi cgroup baru setelah node di node pool dibuat ulang. Output kosong untuk node pool server Windows, yang tidak mendukung cgroup.
kubectl
Untuk menggunakan kubectl guna memverifikasi konfigurasi cgroup untuk node di node pool ini, pilih node dan hubungkan menggunakan petunjuk berikut:
- Buat shell interaktif
dengan node mana pun di node pool. Dalam perintah, ganti
mynodedengan nama node mana pun di node pool. - Identifikasi versi cgroup di node Linux.
Opsi konfigurasi hugepage Linux
Anda dapat menggunakan hugepage yang dialokasikan sebelumnya secara manual atau hugepage transparan yang ditetapkan secara otomatis.
Hugepage yang dialokasikan sebelumnya
Anda dapat menggunakan file konfigurasi sistem node untuk mengalokasikan hugepages terlebih dahulu. Kubernetes mendukung hugepage yang telah dialokasikan sebelumnya sebagai jenis resource, mirip dengan CPU atau memori.
Untuk menggunakan hugepages, batasan dan persyaratan berikut berlaku:
- Untuk memastikan bahwa node tidak sepenuhnya ditempati oleh hugepage, ukuran keseluruhan hugepage yang dialokasikan tidak boleh melebihi salah satu dari berikut:
- Pada mesin dengan memori kurang dari 30 GB: 60% dari total memori. Misalnya, pada mesin e2-standard-2 dengan memori 8 GB, Anda tidak dapat mengalokasikan lebih dari 4,8 GB untuk hugepage.
- Pada mesin dengan memori lebih dari 30 GB: 80% dari total memori. Misalnya, pada mesin c4a-standard-8 dengan memori 32 GB, hugepage tidak boleh melebihi 25,6 GB.
- Hugepage 1 GB hanya tersedia di jenis mesin A3, C2D, C3, C3D, C4, C4A, C4D, C4N, CT5E, CT5LP, CT6E, H3, M2, M3, M4, Z3, atau Z4D.
Tabel berikut menjelaskan setelan yang dapat diubah untuk hugepage Linux.
| Parameter konfigurasi | Pembatasan | Nilai default | Deskripsi |
|---|---|---|---|
hugepage_size2m |
Jumlah bilangan bulat. Tunduk pada batas alokasi memori yang dijelaskan sebelumnya. | 0 |
Setelan ini mengalokasikan terlebih dahulu sejumlah hugepage 2 MB tertentu. |
hugepage_size1g |
Jumlah bilangan bulat. Tunduk pada batasan memori dan jenis mesin yang telah dijelaskan sebelumnya. | 0 |
Setelan ini mengalokasikan terlebih dahulu sejumlah hugepage 1 GB tertentu. |
Huge page transparan (THP)
Anda dapat menggunakan file konfigurasi sistem node untuk mengaktifkan Dukungan Transparent HugePage kernel Linux. Dengan THP, kernel secara otomatis menetapkan hugepage ke proses tanpa pra-alokasi manual.
Tabel berikut menjelaskan parameter yang dapat diubah untuk THP.
| Parameter konfigurasi | Nilai yang didukung | Nilai default | Deskripsi |
|---|---|---|---|
transparentHugepageEnabled |
|
UNSPECIFIED |
Setelan ini mengontrol apakah THP diaktifkan untuk memori anonim. |
transparentHugepageDefrag |
|
UNSPECIFIED |
Setelan ini menentukan konfigurasi defragmentasi untuk THP. |
THP tersedia di GKE versi 1.33.2-gke.4655000 atau yang lebih baru. Fitur ini juga diaktifkan secara default di node pool TPU baru pada GKE versi 1.33.2-gke.4655000 atau yang lebih baru. THP tidak diaktifkan saat Anda mengupgrade node pool yang ada ke versi yang didukung atau yang lebih baru.
Opsi sinkronisasi waktu akurat Linux
Jika sinkronisasi waktu yang akurat dan pemantauan akurasi sinkronisasi waktu
penting untuk workload Anda, Anda dapat mengonfigurasi waktu
yang akurat untuk menyinkronkan jam VM dengan jam host menggunakan chrony dan
ptp_kvm. Sinkronisasi waktu yang akurat tersedia di GKE
versi 1.36.0-gke.3241000 dan yang lebih baru. Konfigurasi ini dirancang untuk mencapai akurasi dalam 1 md untuk penyiapan yang didukung. Untuk mengetahui informasi selengkapnya tentang
jenis mesin yang didukung, sistem operasi yang didukung, dan zona yang didukung, lihat
Mengonfigurasi waktu yang akurat untuk VM Compute Engine.
Tabel berikut menjelaskan parameter untuk mengonfigurasi sinkronisasi waktu yang akurat dengan GKE:
| Parameter konfigurasi | Nilai yang didukung | Nilai default | Deskripsi |
|---|---|---|---|
|
true atau false |
false |
Setelan ini memungkinkan sinkronisasi waktu yang akurat. Fitur ini hanya didukung dengan jenis mesin, sistem operasi, dan zona tertentu. |
Setelah Anda mengaktifkan sinkronisasi waktu yang akurat, GKE akan mengumpulkan dan mengekspor informasi berikut:
- Metrik
compute.googleapis.com/instance/clock_accuracy/ptp_kvm/nanosecond_accuracy, yang menunjukkan akurasi jam host VM terhadap UTC. - Log
projects/PROJECT_ID/logs/chrony.tracking, yang berisi log pelacakan darichrony. Log ini memberikan informasi seperti rasio perolehan atau kehilangan jam sistem.
Anda dapat menggunakan informasi ini untuk membuat metrik berbasis log dan dasbor di Cloud Monitoring guna menganalisis performa dan keandalan sinkronisasi waktu.
Misalnya, konfigurasi gke-clock-metric.json berikut menentukan metrik berbasis log untuk error clock host maksimum:
{
"name": "phc-clock-max-error",
"description": "Maximum error of the VM clock from the host clock exposed by ptp_kvm",
"filter": "resource.type=\"k8s_node\" AND log_id(\"chrony.tracking\")",
"metricDescriptor": {
"metricKind": "DELTA",
"valueType": "DISTRIBUTION",
"unit": "s",
"labels": []
},
"valueExtractor": "REGEXP_EXTRACT(textPayload, \"^.*PHC0.* ([-\\\\d\\\\.eE]+)$\")",
"bucketOptions": {
"explicitBuckets": {
"bounds": [
0.0, 5.0E-7, 1.0E-6, 2.0E-6, 4.0E-6, 5.0E-6, 8.0E-6, 1.0E-5, 2.0E-5,
1.0E-4, 0.001, 0.01, 0.1, 1.0
]
}
}
}
Konfigurasi gke-metrics-dashboard.json berikut menentukan dasbor Monitoring yang menggabungkan data error dari metrik berbasis log dan metrik akurasi UTC:
{
"displayName": "Overall Clock Accuracy",
"dashboardFilters": [],
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"width": 28,
"height": 28,
"widget": {
"xyChart": {
"dataSets": [
{
"plotType": "LINE",
"targetAxis": "Y1",
"timeSeriesQuery": {
"prometheusQuery": "(\n histogram_quantile(1, sum by (le, node_name) (\n increase(logging_googleapis_com:user_phc_clock_max_error_bucket{monitored_resource=\"k8s_node\"}[1m])\n )) * 1000000000\n)\n+ on(node_name) group_left()\nlabel_replace(\n compute_googleapis_com:instance_clock_accuracy_ptp_kvm_nanosecond_accuracy{monitored_resource=\"gce_instance\"},\n \"node_name\", \"$1\", \"instance_name\", \"(.*)\"\n)\n",
"unitOverride": "ns"
}
}
],
"chartOptions": {
"displayHorizontal": false,
"mode": "COLOR"
},
"thresholds": [],
"yAxis": {
"label": "Clock Accuracy",
"scale": "LINEAR"
}
}
}
}
]
}
}
Opsi konfigurasi VFIO Linux
Tabel berikut menjelaskan parameter untuk mengonfigurasi VFIO (Virtual Function I/O) pada node. VFIO memungkinkan driver userspace yang aman dan tanpa hak istimewa untuk mengakses perangkat I/O.
| Parameter konfigurasi | Pembatasan | Nilai default | Deskripsi |
|---|---|---|---|
nodeVfioConfig.dmaEntryLimit |
Harus berupa bilangan bulat antara 65535 dan 4194304. |
65535 |
Menentukan jumlah maksimum entri DMA (halaman) yang dapat dipetakan oleh driver VFIO IOMMU jenis 1 untuk container. Batas ini memengaruhi total jumlah memori host yang dapat disematkan untuk akses perangkat langsung, yang sering kali penting untuk perangkat berperforma tinggi seperti TPU dan GPU. Setelan ini sesuai dengan parameter kernel berikut: /sys/module/vfio_iommu_type1/parameters/dma_entry_limit. Nilai yang lebih tinggi mungkin diperlukan untuk workload yang memetakan region memori besar.Tersedia di GKE versi 1.36.0-gke.3009000 atau yang lebih baru. |
Opsi konfigurasi penjadwal I/O disk Linux
Tabel berikut menjelaskan parameter untuk mengonfigurasi penjadwal I/O disk untuk node pool.
| Parameter konfigurasi | Nilai yang didukung | Nilai default | Deskripsi |
|---|---|---|---|
diskIoScheduler.nodeSystemIoScheduler |
mq-deadline, bfq, kyber, none |
bfq untuk image Container-Optimized OS, none untuk image Ubuntu |
Mengonfigurasi penjadwal I/O untuk boot disk atau SSD lokal efemeral yang menjalankan workload sistem node. Tersedia di GKE versi 1.36.0-gke.3009000 atau yang lebih baru. |
diskIoScheduler.nodeAttachedDiskIoScheduler |
mq-deadline, bfq, kyber, none |
none |
Mengonfigurasi penjadwal I/O untuk disk yang terpasang. Tersedia di GKE versi 1.36.0-gke.3009000 atau yang lebih baru. |
Langkah berikutnya
- Pelajari cara memigrasikan node ke cgroupv2 Linux.
- Pelajari cara menambahkan dan mengelola node pool.
- Pelajari cara menyesuaikan konfigurasi containerd di node GKE.
- Pelajari cara melakukan bootstrap node GKE secara otomatis dengan DaemonSets.