Belajar Kubernetes Distributed Storage - Node Maintenance & Drain yang Ceph-safe
Episode 22 of 28

Belajar Kubernetes Distributed Storage - Node Maintenance & Drain yang Ceph-safe

Menjaga storage tetap sehat saat node di-maintenance: memahami OSD drain & prohibition flags (noout noscrub), mengatur MaintenanceAllowed di CRs, men-drain node ber-Osd dengan aman, dan prosedur OS reboot untuk node storage.

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

DR sudah dirancang (episode 21). Episode 22 membahas perawatan rutin yang paling sering luput dari perhatian: apa yang terjadi pada Ceph saat kita ingin update kernel atau ganti RAM sebuah node?

Mengapa penting? Men-drain node storage secara sembarangan bisa memicu flapping OSD (up-down-up-down), backfill raksasa, atau data down dalam sekejap. Dengan prosedur yang benar, maintenance berjalan tanpa mengorbankan data.

OSD & Maintenance Flags

Set yang Berguna

FlagEfekKapan
nooutOSD dianggap "keluar lambat" — tidak memicu rebalance saat downMaintenance
noscrub / nodeep-scrubSkip scrub (pemeriksaan data)Beban cluster tinggi
no-* (lainnya)Kontrol backfill/recoveryJarang

Aturan Dasar

  • Kita set noout saat maintenance node agar OSD yang turun tidak mencetuskan backfill masif.
  • Satu atau dua OSD down sementara = cluster masih sehat (replica aktif dan health OK).
  • Jangan lupa noout off setelah selesai — jika tidak, klaster membiarkan ketidakseimbangan berlama-lama.
Nyalakan dan matikan noout (di toolbox)
ceph osd set noout
# ... maintenance selesai ...
ceph osd unset noout

MaintenanceAllowed di CR (Rook)

Plan daemon di CR

Rook menggunakan field untuk menyatakan bahwa node boleh di-maintenance — mencegah operator tetap memonitor atau mere-start daemon di node tsb:

yaml
spec:
  maintenance:
    allowed: true
    purpose: "kernel-patch"

Hanya di CR tertentu (mis. per CephCluster dengan field maintenance di spec). Atau gunakan pendekatan manual: set flag Ceph di atas.

Catatan: Field ini tersedia di Rook tertentu (v1.x). Alternatif universal: kelola flag di Ceph langsung (+ pastikan deployment OSD/replicaset tidak di-andalkan untuk ini).

Drain Node dengan OSD

Langkah Aman Men-Drain Node Storage

  1. Fire noout di Ceph (jika tidak, rebalance besar terjadi saat OSD restart).
  2. Evacuate workload: kubectl drain <node> --ignore-daemonsets. (Untuk node storage, memori Kubernetes → Pod & app pindah ke node lain; daemonset OSD tetap di perhatikan — jangan terhenti iseng).
  3. Lakukan maintenance (reboot, patch kernel, dll).
  4. Unschedulable kembali: kubectl uncordon <node>.
  5. Verifikasi: OSD connect lagi, health OK.
  6. Unset noout.
Drain aman (kerja di toolbox-cluster)
kubectl drain node-3 --ignore-daemonsets --delete-local-data
# maintenance ...
kubectl uncordon node-3

Apakah OSD Perlu Di-Stop?

Tidak perlu manual. Saat node berhenti, OSD down (dengan noout, tidak menimbulkan recovery). Saat node kembali, OSD connect ulang & PG rebalance tipis.

Reboot / OS Update

Bedakan: Reboot Ringan vs Patch yang Menghancurkan

  • Reboot polos: OSD down → noout → up kembali. Aman.
  • Partisi/label berubah (mis. update udev, ganti disk name): perlu memastikan Rook membaca device yang sama. Biasanya ok, tapi pastikan identitas disk tidak berubah.

Cek setelah Reboot

Verifikasi health setelah reboot node
ceph status
kubectl -n rook-ceph get pods -o wide | grep node-3

Jika ada OSD yang gagal up (kemungkinan device berubah), cek log:

bash
kubectl -n rook-ceph logs -l app=rook-ceph-osd --tail=100

Banyak Node Berbarengan? Hati-Hati

  • Restart satu node pada satu waktu.
  • Jika mengganti beberapa node, beri jeda (mis. tunggu backfill selesai) — kapasitas persebaran tetap menyehatkan.

Warning

Jangan men-drain semua node storage sekaligus — walau dengan noout, data tetap butuh jumlah replika yang tersedia. Lihat kekuatan kehilangan Anda: dengan ukuran replika 3, aman kehilangan 1-2 node sekaligus, tapi jangan pernah kehilangan "sebanyak mungkin dengan dalih maintenance".

Penutup

Inti yang harus dibawa pulang:

  • Set ceph osd set noout sebelum maintenance node; unset setelah selesai.
  • Drain node ber-OSD aman: noout → drain → uncordon → verifikasi → unset.
  • Rook menyediakan maintenance.allowed (purpose) di CR untuk sinyal maintainability.
  • Satu node per maintenance; verifikasi health sebelum lanjut berikutnya.
  • Setelah reboot, cek log OSD bila device tidak terdeteksi.

Di episode 23 selanjutnya kita akan membahas GitOps & CI/CD untuk storage terkelola — versi Rook via GitFlow, pipeline yang menerapkan manifest secara aman, drift detection, serta bagaimana men-deploy CRD Ceph lewat Argo CD. Sampai jumpa di episode 23!

Belajar Kubernetes Distributed Storage - Node Maintenance & Drain yang Ceph-safe | Belajar Kubernetes Distributed Storage