Dokumen ini menunjukkan cara menyesuaikan konfigurasi node Google Kubernetes Engine (GKE) menggunakan file konfigurasi yang disebut konfigurasi sistem node.
Ringkasan
Anda dapat menyesuaikan konfigurasi node menggunakan berbagai metode. Misalnya, Anda dapat menentukan parameter seperti jenis mesin dan platform CPU minimum saat membuat node pool.
Konfigurasi sistem node adalah file konfigurasi yang menyediakan cara untuk menyesuaikan serangkaian setelan sistem dalam jumlah terbatas. Anda dapat menggunakan konfigurasi sistem node untuk menentukan setelan kustom untuk agen node Kubernetes (kubelet
) dan konfigurasi kernel Linux level rendah (sysctl
) di node pool.
Anda juga dapat menyesuaikan runtime penampung containerd di node GKE menggunakan file lain yang disebut file konfigurasi runtime. Untuk mengetahui petunjuknya, lihat Menyesuaikan konfigurasi containerd di node GKE.
Anda juga dapat menggunakan DaemonSets untuk menyesuaikan node, seperti dalam Melakukan bootstrap node GKE secara otomatis dengan DaemonSets.
Menggunakan konfigurasi sistem node
Untuk menggunakan konfigurasi sistem node:
- Buat file konfigurasi. File ini berisi konfigurasi
kubelet
dansysctl
Anda. - Tambahkan konfigurasi saat membuat cluster, atau saat membuat atau memperbarui node pool.
Membuat file konfigurasi
Tulis file konfigurasi sistem node Anda di YAML. Contoh berikut menunjukkan cara menambahkan konfigurasi untuk opsi kubelet
dan sysctl
:
kubeletConfig:
cpuManagerPolicy: static
linuxConfig:
sysctl:
net.core.somaxconn: '2048'
net.ipv4.tcp_rmem: '4096 87380 6291456'
Dalam contoh ini:
cpuManagerPolicy: static
mengonfigurasikubelet
untuk menggunakan kebijakan pengelolaan CPU statis.net.core.somaxconn: '2048'
membatasi backlogsocket listen()
ke 2.048 byte.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 file konfigurasi Anda. Misalnya, untuk menambahkan konfigurasi kubelet
, buat file berikut:
kubeletConfig:
cpuManagerPolicy: static
Untuk mengetahui daftar lengkap kolom yang dapat Anda tambahkan ke file konfigurasi, lihat bagian Opsi konfigurasi Kubelet dan Opsi konfigurasi Sysctl.
Menambahkan konfigurasi ke node pool
Setelah Anda membuat file konfigurasi, tambahkan flag --system-config-from-file
menggunakan Google Cloud CLI. Anda dapat menambahkan flag ini saat membuat cluster, atau saat membuat atau mengupdate node pool. Anda tidak dapat menambahkan konfigurasi sistem node dengan Konsol Google Cloud.
Untuk menambahkan konfigurasi sistem node, jalankan perintah berikut:
Membuat cluster
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Ganti kode berikut:
CLUSTER_NAME
: nama cluster AndaLOCATION
: zona komputasi atau region clusterSYSTEM_CONFIG_PATH
: jalur ke file yang berisi konfigurasikubelet
dansysctl
Setelah Anda menerapkan konfigurasi sistem node, node pool default cluster akan menggunakan setelan yang Anda tentukan.
Membuat node pool
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
``` Replace the following:
POOL_NAME
: nama node pool AndaCLUSTER_NAME
: nama cluster yang ingin Anda tambahi node poolLOCATION
: zona komputasi atau region clusterSYSTEM_CONFIG_PATH
: jalur ke file yang berisi konfigurasikubelet
dansysctl
Memperbarui node pool
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 ingin Anda perbaruiCLUSTER_NAME
: nama cluster yang ingin Anda perbaruiLOCATION
: zona komputasi atau region clusterSYSTEM_CONFIG_PATH
: jalur ke file yang berisi konfigurasikubelet
dansysctl
Perubahan ini memerlukan pembuatan ulang node, yang dapat menyebabkan gangguan pada workload yang sedang berjalan. Untuk mengetahui detail tentang perubahan khusus ini, temukan baris yang sesuai dalam tabel perubahan manual yang membuat ulang node menggunakan strategi upgrade node tanpa mematuhi kebijakan pemeliharaan. Untuk mempelajari update node lebih lanjut, lihat Merencanakan gangguan update node.
Mengedit konfigurasi sistem node
Untuk mengedit konfigurasi sistem node, 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:
- 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 dari node pool yang ada, ikuti petunjuk di tab Update node pool untuk menambahkan konfigurasi ke node pool. Memperbarui konfigurasi sistem node akan mengganti konfigurasi sistem node pool dengan konfigurasi baru, yang memerlukan pembuatan ulang node. Parameter apa pun yang Anda hilangkan selama update akan ditetapkan ke nilai default-nya masing-masing.
Jika Anda ingin mereset konfigurasi sistem node kembali ke default-nya, update file konfigurasi Anda dengan nilai kosong untuk kubelet
dan sysctl
. Misalnya:
kubeletConfig: {}
linuxConfig:
sysctl: {}
Menghapus konfigurasi sistem node
Untuk menghapus konfigurasi sistem node:
- Buat node pool.
- Migrasikan workload Anda ke node pool baru.
- Hapus node pool yang berisi konfigurasi sistem node lama.
Opsi konfigurasi Kubelet
Tabel berikut menampilkan opsi kubelet
yang dapat Anda ubah.
Setelan konfigurasi Kubelet | Pembatasan | Setelan default | Deskripsi |
---|---|---|---|
cpuManagerPolicy |
Nilai harus 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 dalam class Guaranteed QoS dengan permintaan CPU bilangan bulat akan ditetapkan untuk menggunakan CPU secara eksklusif. |
cpuCFSQuota |
Nilai harus true atau false
|
true
|
Setelan ini memberlakukan batas CPU Pod. Jika nilai ini ditetapkan ke false , batas CPU untuk Pod akan diabaikan.Dalam skenario tertentu, batas CPU dapat diabaikan jika Pod sensitif terhadap batas CPU. Risiko menonaktifkan cpuCFSQuota adalah bahwa Pod yang bermasalah dapat memakai resource CPU lebih banyak daripada yang semestinya.
|
cpuCFSQuotaPeriod | Nilai 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. |
insecureKubeletReadonlyPortEnabled |
Nilai harus berupa nilai boolean (true atau false ) |
true |
Setelan ini menonaktifkan port hanya baca kubelet yang tidak aman 10255
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 tingkat cluster. |
podPidsLimit | Nilai harus antara 1024 dan 4194304 |
none
|
Setelan ini menetapkan jumlah maksimum ID proses (PID) yang dapat digunakan oleh setiap Pod. |
Opsi konfigurasi Sysctl
Untuk menyesuaikan performa sistem, Anda dapat mengubah atribut Kernel berikut:
kernel.shmmni
kernel.shmmax
kernel.shmall
net.core.busy_poll
net.core.busy_read
net.core.netdev_max_backlog
net.core.rmem_max
net.core.wmem_default
net.core.wmem_max
net.core.optmem_max
net.core.somaxconn
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.ipv4.tcp_tw_reuse
net.ipv6.conf.all.disable_ipv6
net.ipv6.conf.default.disable_ipv6
vm.max_map_count
Namespace Linux yang berbeda dapat memiliki nilai unik untuk sysctl
tertentu, sementara namespace lainnya bersifat global untuk keseluruhan node. Memperbarui opsi sysctl
dengan menggunakan konfigurasi sistem node akan 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
Kubelet dan runtime container menggunakan cgroups kernel Linux untuk pengelolaan resource, seperti
membatasi jumlah CPU atau memori yang dapat diakses oleh setiap container di 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 detail 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 Standar baru yang menjalankan versi 1.26 dan yang lebih baru, serta cgroupv1
untuk versi yang lebih lama dari 1.26. Untuk kumpulan node yang dibuat dengan penyediaan otomatis node, konfigurasi cgroup bergantung pada versi cluster awal, bukan versi kumpulan node.
Anda dapat menggunakan konfigurasi sistem node untuk mengubah setelan node pool agar menggunakan cgroupv1
atau cgroupv2
secara eksplisit. Mengupgrade node pool yang ada ke
1.26 saja tidak akan mengubah setelan ke cgroupv2
, karena node pool yang ada dibuat
untuk menjalankan versi yang lebih lama dari 1.26—tanpa konfigurasi cgroup
yang disesuaikan—akan terus menggunakan cgroupv1
kecuali jika Anda secara eksplisit menentukan
hal lain.
Misalnya, untuk mengonfigurasi node pool agar menggunakan cgroupv2
, gunakan file konfigurasi sistem node seperti:
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
Opsi cgroupMode
yang didukung adalah:
CGROUP_MODE_V1
: Menggunakancgroupv1
di node pool.CGROUP_MODE_V2
: Menggunakancgroupv2
di 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 Container-Optimized OS dengan node image dalam container.
- Jika ada workload yang bergantung pada pembacaan sistem file cgroup (
/sys/fs/cgroup/...
), pastikan workload tersebut kompatibel dengancgroupv2
API.- Pastikan alat pemantauan atau alat pihak ketiga apa pun kompatibel dengan
cgroupv2
.
- Pastikan alat pemantauan atau alat pihak ketiga apa pun kompatibel dengan
- Jika Anda menggunakan JDK (workload Java), sebaiknya gunakan versi yang
sepenuhnya mendukung cgroupv2,
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 menambahkan konfigurasi ke node pool dan node telah dibuat ulang, Anda dapat memverifikasi konfigurasi baru.
Anda dapat memverifikasi konfigurasi cgroup untuk node di node pool dengan 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 output-nya adalah salah satu dari berikut:
EFFECTIVE_CGROUP_MODE_V1
: node menggunakancgroupv1
EFFECTIVE_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 memverifikasi konfigurasi cgroup untuk node di node pool ini dengan kubectl
,
pilih node dan hubungkan ke node tersebut menggunakan petunjuk berikut:
- Buat shell
interaktif
dengan node apa pun di node pool. Ganti
mynode
dalam perintah dengan nama node apa pun dalam node pool. - Mengidentifikasi versi cgroup di node Linux.
Opsi konfigurasi halaman besar Linux
Anda dapat menggunakan file konfigurasi sistem node untuk menggunakan fitur kernel Linux huge pages.
Kubernetes mendukung huge page di node sebagai jenis resource, mirip dengan CPU atau memori. Gunakan parameter berikut untuk menginstruksikan node Kubernetes Anda untuk pra-mengalokasikan huge page untuk digunakan oleh Pod. Untuk mengelola konsumsi halaman besar Pod, lihat Mengelola HugePages.
Untuk mengalokasikan halaman besar terlebih dahulu untuk node Anda, tentukan jumlah dan ukurannya. Misalnya, untuk mengonfigurasi node agar mengalokasikan tiga huge page berukuran 1 gigabyte, dan 1.024 huge page berukuran 2 megabyte, gunakan konfigurasi sistem node seperti berikut:
linuxConfig:
hugepageConfig:
hugepage_size2m: 1024
hugepage_size1g: 3
Untuk menggunakan huge page, batasan dan persyaratan berikut berlaku:
- Untuk memastikan bahwa node tidak sepenuhnya ditempati oleh huge page, ukuran keseluruhan huge page yang dialokasikan tidak boleh melebihi 60% dari total memori. Misalnya, dengan mesin e2-standard-2, yang memiliki memori 8 GB, Anda tidak dapat mengalokasikan lebih dari 4,8 GB untuk huge page.
- Huge page berukuran 1 gigabyte hanya tersedia di jenis mesin A3, C2D, C3, C3A, C3D, C4, CT5E, CT5L, CT5LP, CT6E, H3, M2, M3, atau Z3.