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 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:

  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 \
    --location=LOCATION \
    --system-config-from-file=SYSTEM_CONFIG_PATH

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster Anda
  • LOCATION: zona komputasi atau region cluster
  • 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 \
     --location=LOCATION \
     --system-config-from-file=SYSTEM_CONFIG_PATH

``` Replace the following:
  • POOL_NAME: nama node pool Anda
  • CLUSTER_NAME: nama cluster yang ingin Anda tambahi node pool
  • LOCATION: zona komputasi atau region cluster
  • 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 \
    --location=LOCATION \
    --system-config-from-file=SYSTEM_CONFIG_PATH

Ganti kode berikut:

  • POOL_NAME: nama node pool yang ingin Anda perbarui
  • CLUSTER_NAME: nama cluster yang ingin Anda perbarui
  • LOCATION: zona komputasi atau region cluster
  • SYSTEM_CONFIG_PATH: jalur ke file yang berisi konfigurasi kubelet dan sysctl

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:

  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 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:

  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.
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:

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

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:

  1. Buat shell interaktif dengan node apa pun di node pool. Ganti mynode dalam perintah dengan nama node apa pun dalam node pool.
  2. 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.

Langkah selanjutnya