Swap memori node Google Kubernetes Engine (GKE) memungkinkan node GKE menggunakan kapasitas 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 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 error karena kehabisan memori node.
- Optimalkan biaya dengan menghindari kebutuhan untuk menyediakan memori secara berlebihan untuk puncak sesekali.
Cara kerja swap memori node
Saat Anda mengaktifkan swap memori node, GKE akan mengonfigurasi sistem operasi node untuk menggunakan kapasitas 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 digunakan bersama dengan penyimpanan efemeral Pod. Jika node menggunakan kapasitas SSD Lokal campuran, swap hanya menggunakan bagian penyimpanan efemeral dari SSD Lokal.
- 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 ephemeral.
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 Quality of Service (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 container, Anda harus menetapkan
kebijakan pengubahan ukuran container 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 hanya dapat menggunakan SSD Lokal yang disediakan sebagai penyimpanan efemeral atau penyimpanan campuran. Anda tidak dapat menggunakan SSD Lokal yang disediakan sebagai penyimpanan perangkat blok mentah. Untuk mengetahui daftar profil swap yang didukung dalam mode ini, lihat Swap memori node dengan kapasitas SSD Lokal campuran.
- 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 memaketkan 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 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 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:
- Isolasi 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. - Sesuaikan ukuran ruang swap memori node Anda dengan tepat. Memori node yang tidak memadai, ruang swap mungkin tidak mencegah error OOM, dan penggunaan yang berlebihan dapat menurunkan performa.
- Pantau 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. Aktifkan Google Kubernetes Engine API
- Untuk 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
node memory swap, buat atau perbarui file system-config.yaml yang berisi
konfigurasi node memory swap 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 efemeral:
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 yang 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 yang 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 memaketkan SSD Lokal, misalnyan1-standard-1.
Untuk mengupdate node pool yang ada agar 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 memastikan bahwa swap memori node diaktifkan, selesaikan langkah-langkah berikut:
Pastikan
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)'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}
Swap memori node dengan kapasitas SSD Lokal campuran
Anda dapat mengaktifkan swap memori node di node pool yang menyediakan SSD Lokal campuran. GKE mendukung profil swap berikut:
- Boot disk (
bootDiskProfile) - SSD Lokal Efemeral (
ephemeralLocalSsdProfile): GKE mengalokasikan ruang swap dari bagian penyimpanan efemeral SSD Lokal, bukan dari partisi blok mentah.
GKE tidak mendukung profil swap SSD Lokal khusus
(dedicatedLocalSsdProfile) dengan SSD Lokal campuran.
Jika Anda menggunakan profil SSD Lokal efemeral, perhatikan hal berikut:
- Kolom
swapSizePercentadalah persentase kapasitas sementara yang Anda tetapkan dengan subkolomcapacity, bukan total kapasitas SSD Lokal fisik. Misalnya, dengan setelan seperticapacity=200GBdanswapSizePercent: 20, GKE mengalokasikan swap sebesar 40 GiB. - Ruang swap mengurangi penyimpanan efemeral yang tersedia untuk Pod Anda. GKE menghitung penyimpanan efemeral yang dicadangkan dari kapasitas efemeral dikurangi ukuran swap.
- Ukuran swap tidak boleh melebihi 80% dari kapasitas efemeral dikurangi penyimpanan efemeral yang dicadangkan GKE untuk penggunaan sistem. Jika kapasitas sementara terlalu kecil untuk menampung swap, permintaan akan gagal.
Contoh file system-config.yaml berikut mengalokasikan 20% kapasitas efemeral ke swap:
linuxConfig:
swapConfig:
enabled: true
ephemeralLocalSsdProfile:
swapSizePercent: 20
Untuk membuat node pool dengan kapasitas SSD Lokal campuran dan swap memori node, jalankan perintah berikut:
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--ephemeral-storage-local-ssd count=NUMBER_OF_DISKS,capacity=CAPACITY \
--system-config-from-file=system-config.yaml
Ganti kode berikut:
POOL_NAME: nama node pool baru yang ingin Anda buat.CLUSTER_NAME: nama cluster.MACHINE_TYPE: jenis mesin yang akan digunakan. Anda tidak dapat menggunakan SSD Lokal dengan jenis mesine2-mediumdefault, karena jenis mesin dengan inti bersama tidak mendukungnya.NUMBER_OF_DISKS: jumlah disk SSD Lokal yang akan disediakan di setiap node.CAPACITY: total kapasitas SSD Lokal yang akan diformat untuk penyimpanan efemeral. Nilai ini harus lebih besar dari 0 dan benar-benar kurang dari total kapasitas SSD Lokal fisik (jumlah disk × ukuran per disk), misalnya,200GB.
Menonaktifkan swap memori node
Untuk menonaktifkan pertukaran 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.