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 guna menentukan setelan kustom untuk agen node Kubernetes (
kubelet
)
dan konfigurasi kernel Linux level rendah
(sysctl
) di kumpulan node Anda.
Anda juga dapat menyesuaikan runtime container dalam container di node GKE menggunakan file lain yang disebut file konfigurasi runtime. Untuk mengetahui petunjuknya, lihat Menyesuaikan konfigurasi dalam container di node GKE.
Anda juga dapat melakukan penyesuaian tambahan menggunakan metode berikut:
- Ganti komponen sistem, seperti dalam Menyesuaikan log Cloud Logging untuk GKE dengan Fluentd
- Gunakan 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 \
--system-config-from-file=SYSTEM_CONFIG_PATH
Ganti kode berikut:
CLUSTER_NAME
: nama cluster AndaSYSTEM_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 \
--system-config-from-file=SYSTEM_CONFIG_PATH
Ganti kode berikut:
POOL_NAME
: nama node pool AndaCLUSTER_NAME
: nama cluster yang ingin Anda tambahi node poolSYSTEM_CONFIG_PATH
: jalur ke file yang berisi konfigurasikubelet
dansysctl
Memperbarui node pool
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--system-config-from-file=SYSTEM_CONFIG_PATH
Ganti kode berikut:
POOL_NAME
: nama node pool yang Anda ingin perbaruiCLUSTER_NAME
: Nama cluster yang Anda ingin perbarui.SYSTEM_CONFIG_PATH
: jalur ke file yang berisi konfigurasikubelet
dansysctl
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 dengan memperbarui node pool yang ada, perbarui konfigurasi sistem node dengan nilai yang Anda inginkan. Memperbarui konfigurasi sistem node akan mengganti konfigurasi sistem node pool tersebut dengan konfigurasi baru. 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. |
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:
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
menggunakan konfigurasi sistem node akan memastikan bahwa sysctl
diterapkan secara global pada node dan di setiap namespace, sehingga setiap Pod memiliki nilai sysctl
yang identik 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 dalam 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 detail selengkapnya, lihat dokumentasi Kubernetes cgroups v2.
Dengan konfigurasi sistem node, Anda dapat menyesuaikan konfigurasi cgroup node pool. Anda dapat menggunakan cgroupv1
atau cgroupv2
. GKE menggunakan cgroupv2
untuk node pool baru yang menjalankan versi 1.26 dan yang lebih baru, serta cgroupv1
untuk versi sebelum 1.26.
Anda dapat menggunakan konfigurasi sistem node untuk mengubah setelan bagi kumpulan node agar
menggunakan cgroupv1
atau cgroupv2
secara eksplisit. Hanya mengupgrade kumpulan node yang ada ke 1.26 tidak akan mengubah setelan menjadi cgroupv2
, karena kumpulan node yang ada yang dibuat dengan menjalankan versi lebih awal dari 1.26—tanpa konfigurasi Cgroup
yang disesuaikan—akan terus menggunakan cgroupv1
kecuali jika Anda secara eksplisit menentukan
jika tidak.
Misalnya, untuk mengonfigurasi kumpulan node agar menggunakan cgroupv2
, gunakan file konfigurasi
sistem node seperti:
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
Opsi cgroupMode
yang didukung adalah:
CGROUP_MODE_V1
: Menggunakancgroupv1
di kumpulan node.CGROUP_MODE_V2
: Menggunakancgroupv2
di kumpulan node.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 salah satu beban kerja Anda bergantung pada pembacaan sistem file cgroup (
/sys/fs/cgroup/...
), pastikan beban kerja tersebut kompatibel dengancgroupv2
API.- Pastikan alat pemantauan atau pihak ketiga kompatibel dengan
cgroupv2
.
- Pastikan alat pemantauan atau pihak ketiga kompatibel dengan
- Jika Anda menggunakan JDK (beban kerja 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 kumpulan node dan node dibuat ulang, Anda dapat memverifikasi konfigurasi baru.
Untuk memverifikasi konfigurasi cgroup bagi node dalam kumpulan node ini, pilih sebuah node dan hubungkan ke node tersebut menggunakan petunjuk berikut:
- Buat shell
interaktif
dengan node apa pun di kumpulan node. Ganti
mynode
di perintah dengan nama node apa pun di kumpulan node. - Mengidentifikasi versi cgroup pada node Linux.