Menyesuaikan konfigurasi sistem node


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:

Menggunakan konfigurasi sistem node

Untuk menggunakan konfigurasi sistem node:

  1. Buat file konfigurasi. File ini berisi konfigurasi kubelet dan sysctl Anda.
  2. 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 mengonfigurasi kubelet untuk menggunakan kebijakan pengelolaan CPU statis.
  • net.core.somaxconn: '2048' membatasi backlog socket 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 Anda
  • SYSTEM_CONFIG_PATH: jalur ke file yang berisi konfigurasi kubelet dan sysctl

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 Anda
  • CLUSTER_NAME: nama cluster yang ingin Anda tambahi node pool
  • SYSTEM_CONFIG_PATH: jalur ke file yang berisi konfigurasi kubelet dan sysctl

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 perbarui
  • CLUSTER_NAME: Nama cluster yang Anda ingin perbarui.
  • SYSTEM_CONFIG_PATH: jalur ke file yang berisi konfigurasi kubelet dan sysctl

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:

  1. Buat file konfigurasi dengan konfigurasi yang Anda inginkan.
  2. Tambahkan konfigurasi ke node pool baru.
  3. Migrasikan workload Anda ke node pool baru.
  4. 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:

  1. Buat node pool.
  2. Migrasikan workload Anda ke node pool baru.
  3. 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:

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: Menggunakan cgroupv1 di kumpulan node.
  • CGROUP_MODE_V2: Menggunakan cgroupv2 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 dengan cgroupv2 API.
    • Pastikan alat pemantauan atau pihak ketiga kompatibel dengan cgroupv2.
  • 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:

  1. Buat shell interaktif dengan node apa pun di kumpulan node. Ganti mynode di perintah dengan nama node apa pun di kumpulan node.
  2. Mengidentifikasi versi cgroup pada node Linux.

Langkah selanjutnya