Halaman ini menjelaskan cara menyelesaikan masalah terkait AlloyDB Omni untuk Kubernetes saat Anda mengalami situasi berikut:
- Anda memiliki cluster database crashlooping di Kubernetes, dan Anda mengetahui nama dan namespace database, instance internalnya, dan pod.
- Anda perlu mengakses file di pod database, tetapi loop error mencegah akses.
Pod database crashlooping adalah pod yang berulang kali dimulai, error, lalu otomatis dimulai ulang oleh Kubernetes. Siklus ini berlanjut tanpa batas waktu hingga masalah mendasar teratasi. Database menjadi tidak tersedia dan tidak stabil selama proses ini.
Sebelum memulai
Sebelum Anda mengikuti panduan pemecahan masalah dalam dokumen ini, coba solusi berikut:
- Jika ketersediaan tinggi (HA) tersedia, picu failover. Dengan HA, instance standby sinkron siap menggantikan instance utama.
- Pulihkan dari cadangan, jika tersedia. Pendekatan ini bersifat otomatis dan lebih sedikit rentan terhadap error.
Tidak dapat mengakses file di pod database yang mengalami crashloop
Deskripsi: Pod database di cluster Kubernetes Anda memasuki status CrashLoopBackOff. Status ini mencegah Anda menggunakan kubectl exec untuk mengakses sistem file container database untuk proses debug.
Perbaikan yang direkomendasikan: Untuk mengatasi masalah ini, hentikan sementara loop error dengan
membuat patch StatefulSet pod untuk menggantikan perintah penampung. Sebelum
melanjutkan, pertimbangkan alternatif yang lebih sederhana, seperti memicu failover atau
memulihkan dari cadangan, jika tersedia.
Untuk mengakses pod, ikuti langkah-langkah berikut:
Jeda semua resource AlloyDB Omni terkait yang ditampilkan kepada pengguna untuk mencegahnya mengganggu proses pemulihan.
Cantumkan semua definisi resource kustom AlloyDB Omni Kubernetes:
kubectl get crd | grep alloydbomni.dbadminTinjau daftar resource untuk cluster database Anda. Simpan daftar resource yang Anda jeda agar dapat dilanjutkan nanti. Minimal, Anda harus menjeda resource
dbclusters.alloydbomni.dbadmin.goog.Jeda setiap resource secara terpisah dengan menambahkan anotasi
ctrlfwk.internal.gdc.goog/pause.kubectl annotate RESOURCE_TYPE -n NAMESPACE RESOURCE_NAME ctrlfwk.internal.gdc.goog/pause=trueGanti kode berikut:
RESOURCE_TYPE: jenis resource yang akan dijeda, misalnya,dbclusters.alloydbomni.dbadmin.goog.NAMESPACE: namespace cluster database.RESOURCE_NAME: nama resource yang akan dijeda.
Jeda instance internal yang mengelola pod crashlooping.
Temukan nama instance internal.
kubectl get instances.alloydbomni.internal.dbadmin.goog -n NAMESPACEGanti kode berikut:
NAMESPACE: nama namespace yang Anda minati.
Jeda instance. Anotasi
ctrlfwk.internal.gdc.goog/pause=truememberi tahu pengontrol AlloyDB Omni untuk menjeda pengelolaan resource-nya. Hal ini mencegah pengontrol merekonsiliasi atau mengubah resource secara otomatis saat Anda melakukan langkah-langkah pemecahan masalah secara manual, seperti melakukan patching padaStatefulSetyang mendasarinya.kubectl annotate instances.alloydbomni.internal.dbadmin.goog -n NAMESPACE INSTANCE_NAME ctrlfwk.internal.gdc.goog/pause=trueGanti kode berikut:
NAMESPACE: nama namespace yang Anda minati.INSTANCE_NAME: nama instance yang Anda temukan.
Mencegah pod mengalami crashloop.
Patch
StatefulSetpod untuk mengganti perintah container utama. Perubahan ini menghentikan aplikasi agar tidak dimulai dan mengalami error, sehingga Anda dapat mengakses pod.Konfirmasi nama pod yang mengalami crashloop.
kubectl get pod -n NAMESPACEGanti
NAMESPACE, yang merupakan nama namespace yang Anda minati.Temukan nama
StatefulSetyang memiliki pod.kubectl get pod -n NAMESPACE POD_NAME -ojsonpath='{.metadata.ownerReferences[0].name}'Ganti kode berikut:
NAMESPACE: nama namespace yang Anda minati.POD_NAME: nama pod yang mengalami crashloop.
Patch
StatefulSetuntuk mengganti perintah penampung database dengansleep infinity:kubectl patch statefulset STATEFULSET_NAME -n NAMESPACE --type='strategic' -p ' { "spec": { "template": { "spec": { "containers": [ { "name": "database", "command": ["sleep"], "args": ["infinity"], "livenessProbe": null, "startupProbe": null } ] } } } } 'Ganti kode berikut:
NAMESPACE: nama namespace yang Anda minati.STATEFULSET_NAME: namaStatefulSet.
Hapus pod untuk menerapkan patch.
kubectl delete pod -n NAMESPACE POD_NAMEGanti kode berikut:
NAMESPACE: nama namespace yang Anda minati.POD_NAME: nama pod yang mengalami crashloop.
Akses database di pod.
kubectl exec -ti -n NAMESPACE POD_NAME -c database -- bashGanti kode berikut:
NAMESPACE: nama namespace yang Anda minati.POD_NAME: nama pod yang mengalami crashloop.
Setelah pod baru dimulai, pod tersebut akan menjalankan perintah
sleep, bukan aplikasi database. Sekarang Anda dapat mengakses shell pod.Lanjutkan semua komponen.
Setelah menyelidiki, pulihkan status asli dengan menghapus anotasi
pause. Anda melanjutkan resource dalam urutan terbalik dari menjedanya; misalnya, lanjutkan instance sebelum Anda melanjutkan DBCluster. Tindakan ini akan merekonsiliasi resource dan memulai ulang pod database dengan perintah aslinya.Untuk setiap resource yang Anda jeda, hapus anotasi dengan menambahkan tanda hubung ke nama anotasi. Contoh berikut menghapus anotasi dari instance:
kubectl annotate instances.alloydbomni.internal.dbadmin.goog -n NAMESPACE INSTANCE_NAME ctrlfwk.internal.gdc.goog/pause-Ganti kode berikut:
NAMESPACE: nama namespace yang Anda minati.INSTANCE_NAME: nama instance yang Anda temukan di langkah sebelumnya.
Ulangi proses ini untuk semua resource lain yang Anda jeda pada langkah pertama.