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 node pool.

Anda juga dapat menyesuaikan runtime penampung containerd di node GKE dengan menggunakan file lain yang disebut file konfigurasi runtime. Untuk mendapatkan petunjuk, 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

Anda dapat menyesuaikan konfigurasi sistem node menggunakan salah satu metode berikut:

  • File konfigurasi: tersedia dalam mode Standar. Anda menggunakan file YAML yang berisi parameter konfigurasi kubelet dan kernel Linux. Langkah-langkah di halaman ini menunjukkan cara membuat dan menggunakan file konfigurasi.
  • ComputeClass: tersedia dalam mode Autopilot dan mode Standard. Anda menentukan konfigurasi sistem node dalam spesifikasi ComputeClass GKE. Class komputasi memungkinkan Anda menentukan serangkaian atribut node yang akan digunakan GKE saat menskalakan cluster Anda. Tersedia di GKE versi 1.32.1-gke.1729000 dan yang lebih baru. Untuk mengetahui detailnya, lihat Tentang class komputasi di GKE.

Untuk menggunakan file konfigurasi sistem node, lakukan langkah 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 file konfigurasi sistem node Anda di YAML. Contoh berikut menunjukkan cara 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:

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

Membuat cluster dengan konfigurasi sistem node

Anda dapat menambahkan konfigurasi sistem node selama pembuatan cluster dengan 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. Anda juga dapat memperbarui konfigurasi sistem node untuk node pool yang ada.

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

``` Replace the following:
  • 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

Jalankan 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 ingin Anda 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 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 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:

  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. Memperbarui konfigurasi sistem node akan mengganti konfigurasi sistem node pool tersebut 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
allowedUnsafeSysctls Daftar sysctl nama atau grup. Grup sysctl yang diizinkan: kernel.shm*, kernel.msg*, kernel.sem, fs.mqueue.*, dan net.*. Contoh: [kernel.msg*, net.ipv4.route.min_pmtu]. none Setelan ini menentukan daftar yang diizinkan yang dipisahkan koma untuk nama sysctl atau grup sysctl yang tidak aman, yang dapat ditetapkan di Pod.

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

containerLogMaxSize Nilai harus berupa angka positif dan akhiran satuan antara 10Mi dan 500Mi, inklusif. Satuan yang valid adalah Ki, Mi, Gi. 10Mi Setelan ini mengontrol setelan containerLogMaxSize dari kebijakan rotasi log penampung, yang memungkinkan Anda mengonfigurasi ukuran maksimum untuk setiap file log. Nilai defaultnya adalah 10Mi.

containerLogMaxFiles Nilai harus berupa bilangan bulat antara 2 dan 10, inklusif. 5 Setelan ini mengontrol setelan containerLogMaxFiles dari kebijakan rotasi file log container, yang memungkinkan Anda mengonfigurasi jumlah maksimum file yang diizinkan untuk setiap container. Nilai defaultnya adalah 5. Total ukuran log (container_log_max_size*container_log_max_files) per penampung tidak boleh melebihi 1 persen dari total penyimpanan node.

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.
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. Penggunaan disk terendah untuk pengumpulan sampah. Persen dihitung dengan membagi nilai kolom ini dengan 100. Jika ditentukan, nilainya harus kurang dari imageGcHighThresholdPercent.
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 pembersihan sampah memori gambar dijalankan. Penggunaan disk tertinggi untuk pembersihan sampah memori. Persen dihitung dengan membagi nilai kolom ini dengan 100. Jika ditentukan, nilai harus lebih besar dari imageGcLowThresholdPercent.
imageMinimumGcAge Nilai harus berupa durasi waktu yang tidak lebih dari '2m'. Satuan waktu yang valid adalah "ns", "us" (or "µs"), "ms", "s", "m", "h" 2m imageMinimumGcAge adalah usia minimum untuk gambar yang tidak digunakan sebelum dikumpulkan sampah.
imageMaximumGcAge Nilai harus berupa durasi waktu 0s imageMaximumGcAge adalah usia maksimum gambar dapat tidak digunakan sebelum dikumpulkan sampah. Nilai default kolom ini adalah "0s", yang menonaktifkan kolom ini. Artinya, gambar tidak akan dikumpulkan sampah berdasarkan tidak digunakan terlalu lama. Jika ditentukan, nilai harus lebih besar dari imageMinimumGcAge.

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

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 level cluster.
podPidsLimit Nilai harus antara 1024 dan 4194304 none Setelan ini menetapkan jumlah maksimum ID proses (PID) yang dapat digunakan oleh setiap Pod.
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:

  • Default 3: pd-balanced, pd-ssd, atau SSD Lokal sementara ada.
  • 2 default: pd-standard atau jenis disk boot lainnya.
  • Tersedia di GKE versi 1.33.1-gke.1918000 atau yang lebih baru.

    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 (hugepages). Untuk mengetahui informasi selengkapnya, lihat Pengelola Resource Node.

    Dengan GKE, Anda dapat mengonfigurasi setelan berikut untuk Pengelola Resource ini. Anda dapat mengonfigurasi setelan ini secara terpisah, namun, sebaiknya gunakan setelan ini bersama-sama untuk menyelaraskan pengelolaan resource. Anda dapat menggunakan setelan Topology Manager bersama dengan setelan CPU Manager dan Memory Manager untuk menyelaraskan CPU dan memori dengan resource lain yang diminta dalam spesifikasi Pod.

    Setelan konfigurasi Kubelet Pembatasan Setelan default Deskripsi
          cpuManagerPolicy:
          
    Nilai harus none atau static none Setelan ini mengontrol kebijakan Pengelola CPU 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 None atau Static None

    Setelan ini mengontrol kebijakan Memory Manager kubelet. Dengan nilai default None, Kubernetes bertindak sama seperti jika Pengelola Memori tidak ada. Untuk mengetahui detailnya, lihat Kebijakan 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:
            policy:
            scope:
          
    Nilai harus berupa salah satu setelan yang didukung untuk setiap kolom terkait
    • Default kebijakan topologyManager adalah none
    • Default topoloyManager.scope adalah container

    Setelan ini mengontrol kebijakan Topology Manager kubelet, yang 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, M3, N4

    Contoh berikut menunjukkan konfigurasi sistem node tempat ketiga kebijakan Resource Manager dikonfigurasi:

    cpuManagerPolicy: static
    memoryManager:
      policy: Static
    topologyManager:
      policy: best-effort
      scope: pod
    

    Opsi konfigurasi Sysctl

    Untuk menyesuaikan performa sistem, Anda dapat mengubah atribut Kernel berikut:

    Untuk mengetahui informasi selengkapnya tentang nilai yang didukung untuk setiap tanda sysctl, lihat dokumentasi gcloud CLI --system-config-from-file.

    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 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 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 Standard baru yang menjalankan versi 1.26 dan yang lebih baru, serta cgroupv1 untuk versi yang lebih lama dari 1.26. Untuk node pool yang dibuat dengan penyediaan otomatis node, konfigurasi cgroup bergantung pada versi cluster awal, bukan versi node pool. cgroupv1 tidak didukung di komputer Arm.

    Anda dapat menggunakan konfigurasi sistem node untuk mengubah setelan node pool agar menggunakan cgroupv1 atau cgroupv2 secara eksplisit. Hanya mengupgrade node pool yang ada ke 1.26 tidak mengubah setelan ke cgroupv2, karena node pool yang ada yang dibuat dengan menjalankan versi yang lebih lama dari 1.26—tanpa konfigurasi cgroup yang disesuaikan—akan terus menggunakan cgroupv1 kecuali jika Anda secara eksplisit menentukan lainnya.

    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 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.
      • 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 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 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 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 di node pool.
    2. Identifikasi versi cgroup di node Linux.

    Opsi konfigurasi halaman besar Linux

    Anda dapat menggunakan file konfigurasi sistem node untuk menggunakan fitur kernel Linux halaman besar.

    Kubernetes mendukung halaman besar di node sebagai jenis resource, mirip dengan CPU atau memori. Gunakan parameter berikut untuk menginstruksikan node Kubernetes Anda agar melakukan pra-alokasi huge page untuk digunakan oleh Pod. Untuk mengelola penggunaan halaman besar oleh Pod Anda, lihat Mengelola HugePages.

    Untuk melakukan pra-alokasi halaman besar untuk node Anda, tentukan jumlah dan ukuran. Misalnya, untuk mengonfigurasi node Anda agar mengalokasikan tiga huge page berukuran 1 gigabyte dan 1024 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 halaman besar, ukuran keseluruhan halaman besar yang dialokasikan tidak boleh melebihi 60% dari total memori pada mesin dengan memori kurang dari 30 GB, dan 80% pada mesin dengan memori lebih dari 30 GB. Misalnya, pada mesin e2-standard-2 dengan memori 8 GB, Anda tidak dapat mengalokasikan lebih dari 4,8 GB untuk halaman besar. Selain itu, pada c4a-standard-8 dengan memori 32 GB, halaman besar tidak boleh melebihi 25,6 GB.
    • Halaman besar 1 GB hanya tersedia di jenis mesin A3, C2D, C3, C3D, C4, C4A, C4D, CT5E, CT5LP, CT6E, H3, M2, M3, atau Z3.

    Dukungan HugePage Transparan

    Anda dapat menggunakan file konfigurasi sistem node untuk mengaktifkan fitur kernel Linux Transparent HugePage Support. Dukungan Transparent HugePage (THP) adalah solusi alternatif untuk halaman besar statis. Dengan THP, kernel secara otomatis menetapkan halaman besar ke proses, sehingga halaman besar tidak perlu dicadangkan secara manual. Kolom berikut didukung:

    linuxConfig:
      transparentHugepageEnabled: TRANSPARENT_HUGEPAGE_ENABLED_ALWAYS
      transparentHugepageDefrag: TRANSPARENT_HUGEPAGE_DEFRAG_ALWAYS
    
    • transparentHugepageEnabled mengontrol dukungan halaman besar transparan untuk memori anonim. Nilai yang didukung adalah sebagai berikut:

      • TRANSPARENT_HUGEPAGE_ENABLED_ALWAYS: Transparent hugepage diaktifkan di seluruh sistem.
      • TRANSPARENT_HUGEPAGE_ENABLED_MADVISE: Transparent hugepage diaktifkan di dalam region MADV_HUGEPAGE. Ini adalah konfigurasi kernel default.
      • TRANSPARENT_HUGEPAGE_ENABLED_NEVER: Transparent hugepage dinonaktifkan.
      • TRANSPARENT_HUGEPAGE_ENABLED_UNSPECIFIED: Nilai default. GKE tidak mengubah konfigurasi kernel.
    • transparentHugepageDefrag menentukan konfigurasi defrag halaman besar transparan di node. Nilai yang didukung adalah sebagai berikut:

      • TRANSPARENT_HUGEPAGE_DEFRAG_ALWAYS: Aplikasi yang meminta THP akan terhenti saat alokasi gagal dan langsung merebut kembali halaman serta memadatkan memori dalam upaya 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. Khugepaged bertanggung jawab untuk menginstal halaman THP nanti.
      • TRANSPARENT_HUGEPAGE_DEFRAG_DEFER_WITH_MADVISE: Aplikasi memasuki pengambilan 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 pemulihan langsung dan pemadatan seperti biasa, tetapi hanya untuk region yang telah menggunakan madvise(MADV_HUGEPAGE); semua region lainnya mengaktifkan kswapd di latar belakang untuk memulihkan halaman dan mengaktifkan kcompactd untuk memadatkan memori sehingga THP tersedia dalam waktu dekat.
      • TRANSPARENT_HUGEPAGE_DEFRAG_NEVER: Aplikasi tidak pernah memasuki proses pengambilan langsung atau pemadatan.
      • TRANSPARENT_HUGEPAGE_DEFRAG_UNSPECIFIED: Nilai default. GKE tidak mengubah konfigurasi kernel.

    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