Menjalankan maintenance node tanpa panik: membedah perilaku volume RWX (pindah mulus) melawan Local PV RWO (terikat node), memilih reclaimPolicy yang tepat, dan menjalankan prosedur drain-cordon-uncordon yang aman

Suatu hari kalian harus mematikan sebuah worker — update kernel, ganti RAM, atau memindahkan perangkat. Episode 16 mengajarkan cara maintenance node dengan aman: drain yang benar, memahami apa yang terjadi pada masing-masing tipe volume, dan menghindari downtime karena Local PV yang terikat node.
Perbedaan penting: volume RWX (NFS) ikut pindah ke node baru, sedangkan Local PV RWO (database) tidak bisa — kalian harus menyiapkan strategi sebelum mencabut node.
Prosedurnya selalu tiga langkah: cordon → drain → uncordon.
kubectl cordon worker-1Cordon menandai node tidak menerima Pod baru; Pod yang sudah ada tetap jalan. Lalu evakuasikan:
kubectl drain worker-1 --ignore-daemonsets --delete-emptydir-data--ignore-daemonsets — DaemonSet (node exporter, CNI) tidak dievakuasi (mereka memang diharapkan ada di tiap node).--delete-emptydir-data — mengizinkan Pod emptyDir dihapus.Pod aplikasi (Laravel) yang memakai volume NFS RWX di-reschedule ke node lain dengan mudah:
kubectl get pod -l app=laravel -o wideKarena volume diakses lewat Service NFS (bukan terikat node), Pod baru langsung mount di node baru dan data tetap utuh.
Pod database (postgres-0) dengan Local PV tidak ikut terjadwal ke node lain — PVC-nya menempel pada node. Setelah drain, postgres-0 menjadi Pending menunggu node asal kembali (atau backup/restore bila node mati).
kubectl get pod -l app=postgresImportant
Sebelum drain node yang memuat Local PV, putuskan salah satu: (a) selesaikan maintenance cepat dan node kembali hari itu juga; (b) pindahkan data via pg_dump/restore (episode 8/20) atau ekspor-impor media. Rencana ini menggagalkan downtime yang tidak disadari.
reclaimPolicy menentukan apa yang terjadi pada PV saat PVC dihapus:
| Policy | Perilaku | Kapan |
|---|---|---|
Delete | PV & data dihapus | Lab, data disposable |
Retain | PV & data tersisa untuk manual | Data penting, investigasi |
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: openebs-hostpath-retain
provisioner: openebs.io/local
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: RetainDengan Retain, kalian bisa menarik kembali data dari PV yang ditinggalkan (misal memindahkan folder hostpath) sebelum akhirnya dibersihkan manual.
Rangkuman maintenance yang aman:
kubectl cordon worker-1
kubectl drain worker-1 --ignore-daemonsets --delete-emptydir-data
# ... maintenance fisik/logis node ...
kubectl uncordon worker-1
kubectl get nodesSetelah uncordon, Pod baru boleh masuk lagi ke node. Verifikasi aplikasi:
kubectl get pod -l app=laravel -o wide
kubectl get pod -l app=postgres
curl -I https://laravel.example.com/Tip
Catat di runbook: node mana memuat database (Local PV), berapa lama maintenance dijadwalkan, dan apakah strategi DB adalah "tunggu node kembali" atau "backup-restore". Satu baris catatan ini menyelamatkan kepanikan di kemudian hari.
Pada episode 16 ini, maintenance node bukan lagi teka-teki:
Inti yang harus dibawa pulang:
cordon → drain --ignore-daemonsets --delete-emptydir-data → maintenance → uncordon.reclaimPolicy Retain menyimpan PV & data saat PVC dihapus.Di episode 17 selanjutnya kita akan memperbarui OpenEBS: upgrade chart via Helm, memastikan kompatibilitas versi Kubernetes, dan memverifikasi StorageClass serta PVC tetap utuh pasca-update. Sampai jumpa di episode 17!