Mengonfigurasi node untuk menggunakan ruang disk sebagai memori virtual

Swap memori node Google Kubernetes Engine (GKE) memungkinkan node GKE menggunakan ruang disk sebagai memori virtual saat memori fisik habis. Swap memori node dapat membantu meningkatkan ketahanan aplikasi dan mencegah error kehabisan memori (OOM) untuk workload tertentu.

Kapan harus menggunakan swap memori node

Gunakan swap memori node untuk menyediakan buffer terhadap error OOM untuk aplikasi yang membutuhkan banyak memori, terutama selama lonjakan penggunaan yang tidak terduga. Swap memori node dapat membantu meningkatkan ketahanan workload Anda, seperti dalam skenario berikut:

  • Menjalankan workload dengan pola memori yang tidak dapat diprediksi.
  • Mengurangi risiko aplikasi mengalami error karena kehabisan memori node.
  • Mengoptimalkan biaya dengan menghindari kebutuhan untuk menyediakan memori secara berlebihan untuk lonjakan sesekali.

Cara kerja swap memori node

Saat Anda mengaktifkan swap memori node, GKE mengonfigurasi sistem operasi node untuk menggunakan ruang disk sebagai memori virtual. Proses ini menyediakan buffer untuk aplikasi yang mengalami tekanan memori sementara.

GKE menghitung batas swap container berdasarkan batas resource memori container dan total memori node.

Anda dapat mengonfigurasi swap pada berbagai jenis penyimpanan untuk menyeimbangkan performa dan biaya:

  • Boot disk: menggunakan boot disk node untuk ruang swap.
  • SSD lokal efemeral: menggunakan SSD lokal yang juga dibagikan dengan penyimpanan efemeral Pod.
  • SSD lokal khusus: mencadangkan satu atau beberapa SSD lokal secara eksklusif untuk swap.

Untuk melindungi data sensitif, GKE mengenkripsi ruang swap secara default menggunakan kunci sementara.

Persyaratan dan batasan

Swap memori node memiliki persyaratan dan batasan berikut:

  • Cluster GKE harus menggunakan versi 1.34.1-gke.1341000 atau yang lebih baru.
  • Hanya Pod yang memiliki class Kualitas Layanan (QoS) Burstable yang dapat menggunakan swap memori node. Untuk mengetahui informasi selengkapnya tentang class QoS, lihat dokumentasi Kubernetes untuk Class kualitas layanan pod.
  • Jika Anda mengaktifkan swap memori node, kebijakan pengubahan ukuran container harus ditetapkan ke RestartContainer.
  • Jika Anda mengonfigurasi swap memori node untuk menggunakan boot disk, ukuran swap tidak boleh melebihi 50% dari total kapasitas boot disk.

Jika Anda mengonfigurasi swap memori node untuk menggunakan SSD lokal, Anda harus memastikan persyaratan berikut terpenuhi:

  • Jenis mesin harus mendukung SSD lokal. Anda tidak dapat menggunakan block storage mentah dengan SSD lokal.
  • Node harus disediakan dengan SSD lokal. Metode penyediaan bergantung pada seri mesin:
    • Untuk seri mesin generasi pertama atau kedua, tetapkan flag --ephemeral-storage-local-ssd=count.
    • Untuk seri mesin generasi ketiga atau keempat, pilih jenis mesin yang menggabungkan SSD lokal.
  • Jenis mesin e2-medium default tidak mendukung SSD lokal, jadi Anda harus memilih jenis mesin lain.
  • Untuk mengetahui petunjuk tentang cara membuat atau mengupdate cluster agar menyediakan SSD lokal, lihat Menyediakan dan menggunakan penyimpanan efemeral yang didukung SSD Lokal.

Praktik terbaik

Swap memori node dimaksudkan sebagai jaring pengaman untuk lonjakan memori yang tidak dapat diprediksi, bukan pengganti memori fisik yang memadai. Untuk mendapatkan panduan tentang mengoptimalkan workload, lihat Menyesuaikan ukuran workload GKE Anda dalam skala besar.

Anda juga harus mempertimbangkan praktik terbaik berikut saat menggunakan penggantian memori node:

  • Mengisolasi node yang mendukung swap memori node dengan menerapkan taint ke node pool, misalnya, gke-swap=enabled:NoSchedule, dan menambahkan toleransi yang sesuai ke workload yang dimaksudkan untuk menggunakan swap.
  • Tentukan ukuran ruang swap memori node Anda dengan tepat. Ruang swap memori node yang tidak mencukupi mungkin tidak mencegah error OOM, dan penggunaan yang berlebihan dapat menurunkan performa.
  • Pantau penggunaan swap memori node pada beban kerja Anda. Penggunaan swap memori node yang sering dapat menjadi indikator tekanan memori.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Mengaktifkan penggantian memori node

Anda dapat mengaktifkan swap memori node berdasarkan cluster atau node pool. Untuk mengaktifkan swap memori node, buat atau perbarui file system-config.yaml yang berisi konfigurasi swap memori node yang Anda inginkan. Contoh berikut mengaktifkan swap memori node dengan setelan default:

linuxConfig:
  swapConfig:
    enabled: true

Ada setelan tambahan yang dapat Anda konfigurasi. Contoh ini mengonfigurasi swap yang tidak dienkripsi untuk menggunakan 30% penyimpanan SSD lokal sementara:

linuxConfig:
  swapConfig:
    enabled: true
    encryptionConfig:
      disabled: true
    ephemeralLocalSsdProfile:
      swapSizePercent: 30

Untuk mengetahui daftar kolom opsional yang dapat Anda konfigurasi, lihat dokumentasi API LinuxNodeConfig.

Mengaktifkan swap memori node di cluster

Untuk mengaktifkan swap memori node di cluster, selesaikan salah satu langkah berikut:

  • Untuk membuat cluster baru dengan swap memori node diaktifkan, jalankan perintah berikut:

    gcloud beta container clusters create CLUSTER_NAME \
        --location=LOCATION \
        --cluster-version=1.34.1-gke.1341000 \
        --system-config-from-file=system-config.yaml
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster baru.
    • LOCATION: region atau zona untuk cluster Anda.
  • Untuk mengupdate cluster yang ada dan mengaktifkan swap memori node, jalankan perintah berikut:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --system-config-from-file=system-config.yaml
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster baru.
    • LOCATION: region atau zona untuk cluster Anda.

Mengaktifkan swap memori node di node pool

Untuk mengaktifkan swap memori node di node pool, selesaikan salah satu langkah berikut:

  • Untuk membuat node pool baru dengan swap memori node diaktifkan, jalankan perintah berikut:

    gcloud beta container node-pools create NODEPOOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --node-version=1.34.1-gke.1293000 \
        --system-config-from-file=system-config.yaml \
        --machine-type=MACHINE_TYPE
    

    Ganti kode berikut:

    • NODEPOOL_NAME: nama node pool baru.
    • CLUSTER_NAME: nama cluster Anda.
    • LOCATION: region atau zona untuk cluster Anda.
    • MACHINE_TYPE: jenis mesin yang kompatibel. Untuk SSD lokal, pastikan Anda memilih jenis mesin yang menggabungkan SSD lokal, misalnya n1-standard-1.
  • Guna memperbarui node pool yang ada untuk mengaktifkan swap memori node, jalankan perintah berikut:

    gcloud beta container node-pools update NODEPOOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --system-config-from-file=system-config.yaml
    

    Ganti kode berikut:

    • NODEPOOL_NAME: nama node pool Anda.
    • CLUSTER_NAME: nama cluster Anda.
    • LOCATION: region atau zona untuk cluster Anda.

Memverifikasi konfigurasi

Untuk memverifikasi bahwa swap memori node diaktifkan, selesaikan langkah-langkah berikut:

  1. Pastikan system-config.yaml diterapkan dengan setelan swapConfig dengan menjalankan perintah berikut:

    gcloud beta container node-pools describe NODEPOOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --format='yaml(config.linuxNodeConfig.swapConfig)'
    
  2. Pastikan konfigurasi kubelet ada di node dengan menjalankan perintah berikut:

    kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/configz" | jq .kubeletconfig.memorySwap
    

Memantau penggunaan swap memori

Anda dapat memantau memori node dengan Cloud Monitoring atau kubectl.

Pemantauan

Metrik sistem berikut tersedia secara default untuk mengamati penggunaan swap:

  • kubernetes.io/node/memory/swap_used_bytes
  • kubernetes.io/container/memory/swap_used_bytes

GKE juga menyediakan metrik penggunaan swap tingkat container melalui cAdvisor. Untuk menggunakan metrik ini, aktifkan cAdvisor di cluster:

  • prometheus.googleapis.com/container_memory_swap/gauge

kubectl

Pantau penggunaan swap dengan perintah kubectl dengan menyelesaikan langkah-langkah berikut:

  1. Periksa kondisi SwapDetected pada objek node dengan menjalankan perintah berikut:

    kubectl get node NODE_NAME -o jsonpath='{.status.conditions[?(@.type=="Swap")]}' | jq .
    

    Outputnya mirip dengan hal berikut ini:

    {
      "lastHeartbeatTime": "2025-07-11T00:14:52Z",
      "lastTransitionTime": "2025-06-25T05:20:10Z",
      "message": "Swap is active: Total=49Gi Used=0B Free=49Gi",
      "reason": "SwapDetected",
      "status": "True",
      "type": "Swap"
    }
    
  2. Periksa kapasitas swap dengan menjalankan perintah berikut:

    kubectl get node NODE_NAME -o jsonpath='{.status.nodeInfo.swap}'
    

    Outputnya mirip dengan hal berikut ini:

    {"capacity":53687087104}
    

Menonaktifkan swap memori node

Untuk menonaktifkan swap memori node, perbarui file system-config.yaml Anda dengan menyelesaikan langkah-langkah berikut:

  1. Perbarui file system-config.yaml untuk menyetel swapConfig.enabled ke false:

    linuxConfig:
      swapConfig:
        enabled: false
    
  2. Perbarui node pool dengan konfigurasi baru:

    gcloud beta container node-pools update NODEPOOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --system-config-from-file=system-config.yaml
    

Langkah berikutnya