Dalam kondisi tertentu, PodDisruptionBudgets (PDB)
kebijakan dapat mencegah node berhasil dihapus dari kumpulan node.
Dalam kondisi ini, status node melaporkan Ready,SchedulingDisabled
meskipun telah dihapus. Dokumen ini menunjukkan cara menghapus node dari
Cluster Google Distributed Cloud yang saat ini terhambat oleh masalah PDB.
Halaman ini ditujukan untuk Admin, arsitek, serta Operator yang mengelola siklus proses infrastruktur teknologi dasar, serta merespons pemberitahuan dan halaman saat tujuan tingkat layanan (SLO) tidak terpenuhi atau aplikasi gagal. Untuk mempelajari informasi lebih lanjut tentang peran umum dan contoh tugas yang kami rujuk di Google Cloud konten, lihat Peran dan tugas pengguna GKE Enterprise yang umum.
Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.PDB bertentangan dengan jumlah Pod yang tersedia
Kebijakan PDB membantu memastikan performa aplikasi dengan mencegah Pod berhenti berfungsi saat yang sama ketika Anda membuat perubahan pada sistem. Akibatnya, kebijakan PDB membatasi jumlah Pod yang tidak tersedia secara bersamaan dalam sebuah aplikasi replika.
Namun, kebijakan PDB terkadang dapat mencegah penghapusan {i>node<i} yang ingin Anda buat jika Anda akan melanggar kebijakan dengan menghapus {i>node<i}.
Misalnya, kebijakan PDB dapat menentukan bahwa harus selalu ada dua Pod
tersedia di sistem (.spec.minAvailable
adalah 2). Tetapi jika Anda hanya
memiliki dua
Pod, dan Anda mencoba menghapus node yang berisi salah satunya, lalu kebijakan PDB
diterapkan dan mencegah penghapusan node.
Demikian pula, jika kebijakan PDB menetapkan bahwa tidak boleh ada Pod yang tersedia
(.spec.maxUnavailable
adalah 0), kebijakan ini juga mencegah node terkait
agar tidak dihapus. Meskipun Anda mencoba menghapus satu Pod dalam satu waktu, PDB
sehingga Anda tidak dapat menghapus node yang terpengaruh.
Menonaktifkan dan mengaktifkan kembali kebijakan PDB
Untuk menyelesaikan konflik PDB, cadangkan lalu hapus kebijakan PDB. Setelah PDB berhasil dihapus, node menguras dan Pod terkait dihapus. Anda kemudian dapat membuat perubahan yang diinginkan, dan mengaktifkan kembali kebijakan PDB.
Contoh berikut menunjukkan cara menghapus node dalam kondisi ini, yang dapat memengaruhi semua jenis cluster Google Distributed Cloud: admin, hybrid, mandiri, dan klaster pengguna.
Prosedur umum yang sama berlaku untuk semua jenis cluster. Namun, atribut perintah untuk menghapus node dari node pool cluster admin (untuk admin, hibrid, atau cluster mandiri) sedikit berbeda dari perintah untuk menghapus node dari kumpulan node cluster pengguna.
Untuk kemudahan membaca, variabel
${KUBECONFIG}
digunakan dalam perintah.Bergantung pada jenis cluster, ekspor kubeconfig cluster admin (
ADMIN_KUBECONFIG
) atau kubeconfig cluster pengguna (USER_CLUSTER_CONFIG
) jalur ke$(KUBECONFIG)
dan selesaikan langkah-langkah berikut:- Untuk menghapus node dari cluster pengguna, setel
export KUBECONFIG=USER_CLUSTER_CONFIG
- Untuk menghapus node dari cluster admin, setel
export KUBECONFIG=ADMIN_KUBECONFIG
.
- Untuk menghapus node dari cluster pengguna, setel
Opsional: Jika Anda menghapus node dari kumpulan node cluster pengguna, jalankan perintah berikut untuk mengekstrak file kubeconfig cluster pengguna:
kubectl --kubeconfig ADMIN_KUBECONFIG -n cluster-USER_CLUSTER_NAME \ get secret USER_CLUSTER_NAME-kubeconfig \ -o 'jsonpath={.data.value}' | base64 -d > USER_CLUSTER_CONFIG
Ganti entri berikut dengan informasi khusus untuk cluster Anda lingkungan:
ADMIN_KUBECONFIG
: jalur ke admin file kubeconfig cluster.CLUSTER_NAME
: nama cluster yang Anda inginkan untuk mengambil cuplikannya.USER_CLUSTER_CONFIG
: jalur ke pengguna file konfigurasi cluster Anda.
Setelah Anda menghapus node dari kumpulan node, periksa status node. Tujuan laporan node yang terpengaruh
Ready, SchedulingDisabled
:kubectl get nodes --kubeconfig ${KUBECONFIG}
Status node terlihat mirip dengan contoh output berikut:
NAME STATUS ROLES AGE VERSION CP2 Ready Master 11m v.1.18.6-gke.6600 CP3 Ready,SchedulingDisabled <none> 9m22s v.1.18.6-gke.6600 CP4 Ready <none> 9m18s v.1.18.6-gke.6600
Periksa PDB di cluster Anda:
kubectl get pdb --kubeconfig ${KUBECONFIG} -A
Sistem melaporkan PDB yang mirip dengan yang ditunjukkan pada contoh berikut {i>output<i}:
NAMESPACE NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE gke-system istio-ingress 1 N/A 1 19m gke-system istiod 1 N/A 1 19m kube-system coredns 1 N/A 0 19m kube-system log-aggregator N/A 0 0 19m kube-system prometheus N/A 0 0 19m
Periksa PDB. Temukan kecocokan antara label Pod dalam PDB dan Pod yang cocok dalam node. Kecocokan ini memastikan Anda menonaktifkan PDB yang benar untuk berhasil menghapus node:
kubectl --kubeconfig ${KUBECONFIG} get pdb log-aggregator -n kube-system -o 'jsonpath={.spec}'
Sistem akan menampilkan hasil label yang cocok dalam kebijakan PDB:
{"maxUnavailable":0,"selector":{"matchLabels":{"app":"stackdriver-log-aggregator"}}}
Temukan Pod yang cocok dengan label kebijakan PDB:
kubectl --kubeconfig ${KUBECONFIG} get pods -A --selector=app=stackdriver-log-aggregator \ -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.nodeName}{"\n"}{end}'
Perintah ini menampilkan daftar Pod yang cocok dengan label PDB, dan memverifikasi Kebijakan PDB yang harus Anda hapus:
stackdriver-log-aggregator-0 CP3 stackdriver-log-aggregator-1 CP3
Setelah Anda mengonfirmasi Pod yang terpengaruh, buat salinan cadangan kebijakan PDB. Tujuan contoh berikut mencadangkan kebijakan
log-aggregator
:kubectl get pdb log-aggregator --kubeconfig ${KUBECONFIG} -n kube-system \ -o yaml >> log-aggregator.yaml
Menghapus kebijakan PDB tertentu. Sekali lagi, contoh berikut menghapus Kebijakan
log-aggregator
:kubectl delete pdb log-aggregator --kubeconfig ${KUBECONFIG} -n kube-system
Setelah Anda menghapus kebijakan PDB, node akan dikosongkan. Namun, hal ini dapat Diperlukan waktu hingga 30 menit hingga node tersebut dihapus sepenuhnya. Lanjutkan untuk memeriksa status node untuk mengonfirmasi bahwa proses telah berhasil diselesaikan.
Jika Anda ingin menghapus node secara permanen, dan juga menghapus resource penyimpanan yang terkait dengan node, Anda dapat melakukannya sebelum memulihkan kebijakan PDB. Untuk informasi selengkapnya, lihat Menghapus resource penyimpanan.
Pulihkan kebijakan PDB dari salinan Anda:
kubectl apply -f log-aggregator.yaml --kubeconfig ${KUBECONFIG}
Pastikan Pod yang dihapus berhasil dibuat ulang. Di contoh ini, jika ada dua Pod
stackdriver-log-aggregator-x
, lalu dibuat ulang:kubectl get pods -o wide --kubeconfig ${KUBECONFIG} -A
Jika Anda ingin memulihkan {i>node<i}, edit konfigurasi nodepool yang sesuai, dan memulihkan alamat IP node.
Menghapus resource penyimpanan dari node yang dihapus secara permanen
Jika Anda menghapus {i>node<i} secara permanen, dan tidak ingin memulihkannya ke sistem Anda, Anda juga dapat menghapus resource penyimpanan yang terkait dengan node tersebut.
Periksa dan dapatkan nama volume persisten (PV) yang terkait dengan node:
kubectl get pv --kubeconfig ${KUBECONFIG} \ -A -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{.spec.claimRef.name}{":\t"} \ {.spec.nodeAffinity.required.nodeSelectorTerms[0].matchExpressions[0].values}{"\n"}{end}'
Hapus PV yang terkait dengan node:
kubectl delete pv PV_NAME --kubeconfig ${KUBECONFIG}
Ganti
PV_NAME
dengan nama volume persisten yang akan dihapus.