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.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. - 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.
- Untuk seri mesin generasi pertama atau kedua, tetapkan flag
- Jenis mesin
e2-mediumdefault 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.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 beta 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 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_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.
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.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:
Pastikan
system-config.yamlditerapkan dengan setelanswapConfigdengan menjalankan perintah berikut:gcloud beta container node-pools describe NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --format='yaml(config.linuxNodeConfig.swapConfig)'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_byteskubernetes.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:
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 menyetelswapConfig.enabledkefalse:linuxConfig: swapConfig: enabled: falsePerbarui 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
- Pelajari lebih lanjut cara menyesuaikan konfigurasi sistem node.
- Pelajari lebih lanjut opsi penyimpanan GKE.