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 menggunakan swap memori node
Gunakan swap memori node untuk menyediakan buffer terhadap error OOM untuk aplikasi yang menggunakan 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 berlebihan untuk puncak penggunaan sesekali.
Cara kerja swap memori node
Saat Anda mengaktifkan swap memori node, GKE akan 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 penampung berdasarkan memori penampung batas resource dan total memori node.
Anda dapat mengonfigurasi swap pada berbagai jenis penyimpanan untuk menyeimbangkan performa dan biaya:
- Disk booting: menggunakan disk booting node untuk ruang swap.
- SSD lokal sementara: menggunakan SSD lokal yang juga dibagikan dengan penyimpanan sementara 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 versi
1.34.1-gke.1341000atau yang lebih baru. - Hanya Pod yang memiliki class Kualitas Layanan (QoS)
Burstableyang dapat menggunakan swap memori node. Untuk mengetahui informasi selengkapnya tentang class QoS, lihat dokumentasi Kubernetes untuk class kualitas layanan Pod. - Untuk mengubah ukuran resource memori penampung, Anda harus menetapkan
kebijakan perubahan ukuran penampung ke
RestartContainer. - Jika Anda mengonfigurasi swap memori node untuk menggunakan disk booting, ukuran swap tidak boleh melebihi 50% dari total kapasitas disk booting.
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.
- Untuk seri mesin generasi pertama atau kedua, tetapkan flag
- Jenis mesin
e2-mediumdefault tidak mendukung SSD lokal, jadi Anda harus memilih jenis mesin yang berbeda. - Untuk mengetahui petunjuk cara membuat atau mengupdate cluster sehingga 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 terduga, bukan pengganti memori fisik yang memadai. Untuk panduan tentang cara mengoptimalkan workload, lihat Menyesuaikan ukuran workload GKE Anda dalam skala besar.
Anda juga harus mempertimbangkan praktik terbaik berikut saat menggunakan swap memori node:
- Mengisolasi node yang mengaktifkan 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. - Menentukan ukuran ruang swap memori node dengan tepat. Ruang swap memori node yang tidak memadai mungkin tidak mencegah error OOM, dan penggunaan yang berlebihan dapat menurunkan performa.
- Memantau penggunaan swap memori node pada workload 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. Mengaktifkan 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. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
Mengaktifkan swap 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 LinuxNodeConfig dokumentasi API.
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 container clusters create CLUSTER_NAME \ --location=LOCATION \ --cluster-version=1.34.1-gke.1341000 \ --system-config-from-file=system-config.yamlGanti 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 container clusters update CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yamlGanti 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 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_TYPEGanti 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, misalnyan1-standard-1.
Untuk mengupdate node pool yang ada dan mengaktifkan swap memori node, jalankan perintah berikut:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yamlGanti 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:
Verifikasi bahwa
system-config.yamlditerapkan dengan setelanswapConfigdengan menjalankan perintah berikut:gcloud container node-pools describe NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --format='yaml(config.linuxNodeConfig.swapConfig)'Verifikasi bahwa 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_byteskubernetes.io/container/memory/swap_used_bytes
GKE juga menyediakan metrik penggunaan swap tingkat penampung 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:
Periksa kondisi
SwapDetectedpada 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" }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:
Perbarui file
system-config.yamluntuk menetapkanswapConfig.enabledkefalse:linuxConfig: swapConfig: enabled: falsePerbarui node pool dengan konfigurasi baru:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yaml
Langkah berikutnya
- Pelajari lebih lanjut cara menyesuaikan konfigurasi sistem node.
- Pelajari lebih lanjut opsi penyimpanan GKE.