Menyesuaikan konfigurasi sistem node

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 konfigurasi kernel Linux level rendah sysctl.

Dokumen ini menjelaskan konfigurasi yang tersedia untuk konfigurasi sistem node dan cara menerapkannya ke kumpulan node 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 Standar.

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 seperti pelatihan atau penayangan AI, database, server web dengan traffic tinggi, atau layanan yang sensitif terhadap latensi.
  • Penguatan keamanan: menerapkan setelan keamanan tingkat kernel tertentu atau membatasi perilaku sistem tertentu untuk mengurangi permukaan serangan.
  • Pengelolaan resource: menyesuaikan cara kubelet mengelola PID, ruang disk, pengumpulan sampah gambar, atau resource CPU dan memori.
  • Kompatibilitas beban kerja: 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 untuk melakukan hal berikut:

  • Instal 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 telah menginstal dan mengonfigurasi Terraform.
  • Memberikan izin: Anda memerlukan izin IAM yang sesuai untuk membuat dan memperbarui cluster dan kumpulan node GKE, seperti container.clusterAdmin atau peran lain dengan izin yang setara.
  • Rencanakan potensi gangguan workload: konfigurasi node kustom diterapkan di tingkat node pool. Perubahan biasanya memicu update bertahap node dalam kumpulan, 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 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. Sesuaikan parameter hanya jika Anda memiliki kebutuhan khusus dan memahami dampak perubahan yang Anda lakukan.

Menggunakan konfigurasi sistem node dalam mode GKE Standard

Saat menggunakan 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 konfigurasi sistem node dalam mode GKE Standard, lakukan hal berikut:

  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 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: static mengonfigurasi kubelet untuk menggunakan kebijakan pengelolaan CPU statis. + Kolom net.core.somaxconn: '2048' membatasi backlog socket 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 flag 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 Anda
  • LOCATION: zona atau region komputasi 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.

Terraform

Untuk membuat cluster regional dengan konfigurasi sistem node yang disesuaikan menggunakan Terraform, lihat contoh berikut:

resource "google_container_cluster" "default" {
  name     = "gke-standard-regional-cluster"
  location = "us-central1"

  initial_node_count = 1

  node_config {
    # Kubelet configuration
    kubelet_config {
      cpu_manager_policy = "static"
    }

    linux_node_config {
      # Sysctl configuration
      sysctls = {
        "net.core.netdev_max_backlog" = "10000"
      }

      # Linux cgroup mode configuration
      cgroup_mode = "CGROUP_MODE_V2"

      # Linux huge page configuration
      hugepages_config {
        hugepage_size_2m = "1024"
      }
    }
  }
}

Untuk mengetahui informasi selengkapnya tentang cara menggunakan 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 Anda
  • CLUSTER_NAME: nama cluster yang ingin Anda tambahi node pool
  • LOCATION: zona atau region komputasi cluster
  • SYSTEM_CONFIG_PATH: jalur ke file yang berisi konfigurasi kubelet dan sysctl

Terraform

Untuk membuat node pool dengan konfigurasi sistem node yang disesuaikan menggunakan Terraform, lihat contoh berikut:

resource "google_container_node_pool" "default" {
  name    = "gke-standard-regional-node-pool"
  cluster = google_container_cluster.default.name

  node_config {
    # Kubelet configuration
    kubelet_config {
      cpu_manager_policy = "static"
    }

    linux_node_config {
      # Sysctl configuration
      sysctls = {
        "net.core.netdev_max_backlog" = "10000"
      }

      # Linux cgroup mode configuration
      cgroup_mode = "CGROUP_MODE_V2"

      # Linux huge page configuration
      hugepages_config {
        hugepage_size_2m = "1024"
      }
    }
  }
}

Untuk mengetahui informasi selengkapnya tentang cara menggunakan Terraform, lihat Dukungan Terraform untuk GKE.

Memperbarui konfigurasi sistem node dari node pool yang ada

Anda dapat memperbarui konfigurasi sistem node dari node pool yang ada dengan menjalankan perintah berikut:

   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 Anda ingin perbarui.
  • LOCATION: zona atau region komputasi 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 informasi selengkapnya 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 mengetahui informasi selengkapnya tentang update node, 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, lakukan hal berikut:

  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 Perbarui 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 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 kolom kubelet dan sysctl, misalnya:

kubeletConfig: {}
linuxConfig:
  sysctl: {}

Menghapus konfigurasi sistem node

Untuk menghapus konfigurasi sistem node, lakukan langkah-langkah berikut:

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

Pengelolaan dan penghapusan memori

Tabel berikut menjelaskan opsi yang dapat diubah untuk pengelolaan dan penghapusan memori. Bagian ini juga berisi tabel terpisah yang menjelaskan opsi yang dapat diubah untuk tanda 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 kuantitas atau persentase yang menentukan batas pengusiran ringan. Batas pengusiran ringan 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 nilai minimum pengusiran sementara. Setiap nilai minimum pengusiran sementara harus memiliki masa tenggang yang sesuai.
evictionMinimumReclaim Peta nama sinyal. Untuk setiap nama sinyal, nilainya harus berupa persentase positif yang lebih kecil dari 10%. none Setelan ini memetakan nama sinyal ke persentase yang menentukan jumlah minimum resource tertentu yang diklaim kembali oleh kubelet saat melakukan penghapusan 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.

Tabel berikut menampilkan opsi yang dapat diubah untuk tanda evictionSoft. Opsi yang sama juga berlaku untuk tanda 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 penghapusan sementara. Menentukan jumlah sinyal memory.available dalam kubelet .
nodefsAvailable Nilai harus antara 10% dan 50%. none Setelan ini menampilkan nodefs yang tersedia sebelum pengusiran sementara. Menentukan jumlah sinyal nodefs.available dalam kubelet .
nodefsInodesFree Nilai harus antara 5% dan 50%. none Setelan ini merepresentasikan inode nodefs yang kosong sebelum pengusiran sementara. Menentukan jumlah sinyal nodefs.inodesFree dalam kubelet .
imagefsAvailable Nilai harus antara 15% dan 50%. none Setelan ini menampilkan imagefs yang tersedia sebelum penghapusan sementara. Menentukan jumlah sinyal imagefs.available dalam kubelet .
imagefsInodesFree Nilai harus antara 5% dan 50%. none Setelan ini merepresentasikan inode imagefs yang kosong sebelum penghapusan sementara. Menentukan jumlah sinyal imagefs.inodesFree dalam kubelet.
pidAvailable Nilai harus antara 10% dan 50%. none Setelan ini menampilkan PID yang tersedia sebelum pengusiran sementara. Menentukan jumlah sinyal pid.available dalam kubelet.
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 (OOM) secara terpisah atau sebagai grup.

Tersedia di GKE versi 1.32.4-gke.1132000, 1.33.0-gke.1748000 atau yang lebih baru.

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 sufiks satuan 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 penampung, yang memungkinkan Anda mengonfigurasi jumlah maksimum file yang diizinkan untuk setiap penampung. Nilai defaultnya adalah 5. Ukuran total log (container_log_max_size*container_log_max_files) per penampung tidak boleh melebihi 1% dari total penyimpanan node.

Pembersihan sampah memori gambar

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 di atasnya pengumpulan sampah gambar dijalankan. Nilai ini mewakili penggunaan disk tertinggi untuk pembersihan sampah memori. 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 pengumpulan sampah gambar tidak pernah dijalankan. Nilai ini merepresentasikan 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 besar dari 2m. Unit waktu yang valid adalah ns, us (atau µs), ms, s, m, atau h. 2m Setelan ini menentukan usia minimum untuk gambar yang tidak digunakan sebelum dikumpulkan sampah.
imageMaximumGcAge Nilai harus berupa durasi waktu. 0s

Setelan ini menentukan usia maksimum gambar yang dapat tidak digunakan sebelum dikumpulkan sampah. Nilai default kolom ini adalah 0s, yang menonaktifkan kolom ini. Oleh karena itu, gambar tidak akan dikumpulkan sampah berdasarkan tidak digunakan. Jika ditentukan, nilai ini harus lebih besar dari nilai kolom imageMinimumGcAge.

Tersedia di GKE versi 1.30.7-gke.1076000, 1.31.3-gke.1023000, atau yang lebih baru.

Menarik 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 penarikan gambar 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 sysctl nama atau grup. Grup sysctl yang diizinkan adalah sebagai berikut:

  • kernel.shm*
  • kernel.msg*
  • kernel.sem
  • fs.mqueue.*
  • net.*.
none Setelan ini menentukan daftar yang diizinkan yang dipisahkan koma untuk nama sysctl atau grup sysctl yang tidak aman yang dapat ditetapkan pada Pod.
insecureKubeletReadonlyPortEnabled Nilai harus berupa nilai boolean, baik true atau false. true Setelan ini menonaktifkan kubelet port hanya baca 10255 yang tidak aman di setiap node pool baru di cluster Anda. Jika Anda mengonfigurasi setelan ini dalam file ini, Anda tidak dapat menggunakan klien GKE API untuk mengubah setelan di tingkat 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 resource CPU, perangkat, dan 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 defaultnya 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 kubelet. Dengan nilai default None, Kubernetes bertindak sama seperti jika Pengelola Memori tidak ada.

Jika Anda menyetel nilai ini ke Static, kebijakan Pengelola Memori akan mengirimkan petunjuk topologi yang bergantung pada jenis Pod. Untuk mengetahui detailnya, lihat Kebijakan statis.

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

Anda tidak dapat menetapkan kolom topologyManager saat menggunakan petunjuk Terraform untuk menambahkan konfigurasi ke node pool Standar.

  • policy: none
  • scope: container

Setelan ini mengontrol konfigurasi Topology Manager kubelet menggunakan sub-bidang policy dan scope. Topology Manager mengoordinasikan kumpulan komponen yang bertanggung jawab atas pengoptimalan performa terkait isolasi CPU, memori, dan lokalitas perangkat.

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:

  • Cluster dengan bidang kontrol yang menjalankan GKE versi 1.32.3-gke.1785000 atau yang lebih baru. Untuk cluster dengan bidang kontrol dan node yang menjalankan 1.33.0-gke.1712000 atau yang lebih baru, Topology Manager juga menerima informasi tentang topologi GPU.
  • Node dengan jenis mesin berikut: A2, A3, A4, C3, C4, C4A, G2, G4, M3, N4

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 pada 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 tentang berapa lama penjadwalan real-time dapat digunakan.
kernel.softlockup_panic Opsional (boolean). Setelan ini mengontrol apakah kernel mengalami panik saat soft lockup terdeteksi.
kernel.yama.ptrace_scope Harus antara [0, 3].

Setelan ini menentukan cakupan dan batasan untuk panggilan sistem ptrace(), yang memengaruhi proses pen-debug-an dan pelacakan. Nilai yang didukung mencakup berikut ini:

  • 0: izin ptrace klasik.
  • 1: ptrace terbatas, yang merupakan default di banyak distribusi. Hanya proses turunan atau CAP_SYS_PTRACE.
  • 2: ptrace khusus admin. Hanya proses dengan CAP_SYS_PTRACE.
  • 3: tidak ada ptrace. Panggilan ptrace tidak diizinkan.
kernel.kptr_restrict Harus antara [0, 2]. Setelan ini menunjukkan apakah batasan 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 mungkin mencakup:

  • 0: menonaktifkan sysrq sepenuhnya.
  • 1: mengaktifkan semua fungsi sysrq.
  • >1: bitmask fungsi sysrq yang diizinkan. Untuk mengetahui informasi selengkapnya, lihat Linux Magic System Request Key Hacks.

Parameter jaringan (net.*)

Tabel berikut menjelaskan parameter yang dapat diubah untuk jaringan. Setelan ini menyesuaikan performa dan perilaku stack 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. Waktu 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. Ini menunjukkan perkiraan waktu dalam µs untuk menunggu loop sibuk 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 ruang pengguna 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, dari buffer 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 terlampir ke handle file pengguna mana pun.
net.ipv4.tcp_max_tw_buckets Harus antara [4096, 2147483647]. Setelan ini menentukan jumlah maksimum soket timewait yang ditahan oleh sistem secara bersamaan. Jika jumlah ini terlampaui, soket tunggu waktu 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 Penemuan MTU Jalur Lapisan Paket TCP. Nilai yang didukung adalah sebagai berikut:

  • 0: dinonaktifkan.
  • 1: dinonaktifkan secara default, diaktifkan saat black hole ICMP terdeteksi.
  • 2: selalu diaktifkan. Gunakan MSS awal tcp_base_mss.
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:

  • COS: reno, cubic, bbr, lp
  • Ubuntu: reno, cubic, bbr, lp, htcp, vegas, dctcp, bic, cdg, highspeed, hybla, illinois, nv, scalable, veno, westwood, yeah
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 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: nf_conntrack_max = nf_conntrack_buckets * 4.

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, selama koneksi TCP dapat tetap dalam status CLOSE_WAIT. Nilai defaultnya adalah 3600.

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 yang 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, selama koneksi TCP dapat tetap dalam status TIME_WAIT. Nilai defaultnya adalah 120.

Tersedia di GKE versi 1.32.0-gke.1448000 atau yang lebih baru.

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 flusher 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 membuat thread flusher kernel latar belakang memulai penulisan balik.

Perhatikan bahwa vm.dirty_background_bytes adalah padanan vm.dirty_background_ratio. Hanya satu setelan ini yang dapat ditentukan.

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 menuliskannya 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 diblokir dan menulis data kotor secara sinkron.
vm.dirty_bytes Harus antara [0, 68719476736].

Setelan ini menentukan jumlah memori kotor yang membuat proses yang menghasilkan penulisan disk memulai penulisan baliknya sendiri. Nilai minimum yang diizinkan untuk vm.dirty_bytes adalah dua halaman dalam byte. Nilai yang lebih rendah dari batas ini akan diabaikan dan konfigurasi lama akan dipertahankan.

Perhatikan bahwa vm.dirty_bytes adalah padanan vm.dirty_ratio. Hanya satu setelan ini yang dapat ditentukan.

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:

  • 0: menolak alokasi besar
  • 1: selalu izinkan
  • 2: mencegah commit di luar swap + rasio RAM
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 dari memori fisik ke disk swap. Nilai defaultnya adalah 60.
vm.watermark_scale_factor Harus antara [10, 3000]. Setelan ini mengontrol agresivitas kswapd. Nilai ini menentukan memori yang tersisa sebelum kswapd aktif dan memori yang akan dikosongkan sebelum kswapd tidak aktif. 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 mungkin memiliki nilai unik untuk tanda sysctl tertentu, tetapi yang lain mungkin bersifat global untuk seluruh node. Memperbarui opsi sysctl dengan menggunakan konfigurasi sistem node akan 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 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. 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: 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 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 cgroupv2 API.
  • 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 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 Anda menambahkan konfigurasi ke node pool dan node dibuat ulang, Anda dapat memverifikasi konfigurasi baru.

Anda dapat memverifikasi konfigurasi cgroup untuk node di 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 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 Windows Server, yang tidak mendukung cgroup.

kubectl

Untuk menggunakan kubectl guna memverifikasi konfigurasi cgroup untuk node di node pool ini, pilih node dan hubungkan ke node tersebut menggunakan petunjuk berikut:

  1. Buat shell interaktif dengan node apa pun di node pool. Dalam perintah, ganti mynode dengan nama node apa pun di node pool.
  2. Identifikasi versi cgroup di node Linux.

Opsi konfigurasi hugepage Linux

Anda dapat menggunakan file konfigurasi sistem node untuk melakukan pra-alokasi hugepage. Kubernetes mendukung hugepage yang telah dialokasikan sebelumnya sebagai jenis resource, mirip dengan CPU atau memori.

Untuk menggunakan hugepage, batasan dan persyaratan berikut berlaku:

  • Untuk memastikan bahwa node tidak sepenuhnya ditempati oleh hugepage, ukuran keseluruhan hugepage yang dialokasikan tidak boleh melebihi salah satu hal 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, di 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, CT5E, CT5LP, CT6E, H3, M2, M3, M4, atau Z3.

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 sebelumnya sejumlah besar halaman 2 MB tertentu.
hugepage_size1g Jumlah bilangan bulat. Tunduk pada batasan memori dan jenis mesin yang dijelaskan sebelumnya. 0 Setelan ini mengalokasikan sebelumnya sejumlah besar halaman 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
  • TRANSPARENT_HUGEPAGE_ENABLED_ALWAYS: transparent hugepage diaktifkan di seluruh sistem.
  • TRANSPARENT_HUGEPAGE_ENABLED_MADVISE: transparent hugepage diaktifkan di dalam region MADV_HUGEPAGE. Setelan ini adalah konfigurasi kernel default.
  • TRANSPARENT_HUGEPAGE_ENABLED_NEVER: transparent hugepage dinonaktifkan.
  • TRANSPARENT_HUGEPAGE_ENABLED_UNSPECIFIED: nilai default. GKE tidak mengubah konfigurasi kernel.
UNSPECIFIED Setelan ini mengontrol apakah THP diaktifkan untuk memori anonim.
transparentHugepageDefrag
  • TRANSPARENT_HUGEPAGE_DEFRAG_ALWAYS: aplikasi yang meminta THP akan terhenti saat alokasi gagal dan langsung merebut kembali halaman serta memadatkan memori dalam upaya untuk mengalokasikan THP dengan segera.
  • TRANSPARENT_HUGEPAGE_DEFRAG_DEFER: aplikasi mengaktifkan kswapd di latar belakang untuk merebut kembali halaman dan mengaktifkan kcompactd untuk memadatkan memori sehingga THP tersedia dalam waktu dekat. Kemudian, khugepaged bertanggung jawab untuk menginstal halaman THP nanti.
  • TRANSPARENT_HUGEPAGE_DEFRAG_DEFER_WITH_MADVISE: aplikasi memasuki reklamasi langsung dan pemadatan seperti biasa, tetapi hanya untuk region yang telah menggunakan madvise(MADV_HUGEPAGE). Semua region lainnya mengaktifkan kswapd di latar belakang untuk merebut kembali halaman dan mengaktifkan kcompactd untuk memadatkan memori sehingga THP tersedia dalam waktu dekat.
  • TRANSPARENT_HUGEPAGE_DEFRAG_MADVISE: aplikasi memasuki reklamasi langsung dan pemadatan seperti biasa, tetapi hanya untuk region yang telah menggunakan madvise(MADV_HUGEPAGE). Semua region lainnya mengaktifkan kswapd di latar belakang untuk merebut kembali halaman dan mengaktifkan kcompactd untuk memadatkan memori sehingga THP tersedia dalam waktu dekat.
  • TRANSPARENT_HUGEPAGE_DEFRAG_NEVER: aplikasi tidak pernah memasuki reklamasi langsung atau pemadatan.
  • TRANSPARENT_HUGEPAGE_DEFRAG_UNSPECIFIED: nilai default. GKE tidak mengubah konfigurasi kernel.
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.

Langkah berikutnya