Memulihkan cluster OCP yang semua node nya dalam keadaan off dalam kurun waktu yang lama

Danang Priabada
6 min readJun 8, 2023

--

Perlu di ketahui bahwa realita saat kita mengimplementasikan OCP, kita akan menghadapi banyak sekali kejadian yang membuat cluster OCP yang kita maintance terkena dampak. Sebagai contoh nya, adalah kasus perbaikan Hyperconverged infrastructure (HCI) yang memerlukan waktu lama, berhari-hari bahkan berminggu-minggu, yang menyebabkan mati total nya semua node OCP cluster dalam waktu yang lama, selama perbaikan HCI.

Di tulisan ini saya membagikan satu pendekatan yang bisa digunakan untuk memulihkan keadaan semua node cluster OCP yang mati dalam waktu yang lama.

Disclaimer : Kerusakan pods mungkin akan terjadi, saat setelah node cluster running up, karena saat cluster OCP mati dalam kurun waktu yang lama system akan terputus dari Telemetry server. Perlu di ketahui setiap cluster memiliki id, dan secara berkala system menggunakan cluster id tersebut untuk mengirimkan report keadaan server ke Telemetry Openshift, agar server dalam keadaan terpantau dan tetap dalam keadaan sehat. Di tambah lagi banyak pods scheduler yang di tugaskan, yang terjadi saat sebelum OCP di matikan, dan di terima saat OCP di nyalakan kembali.

Hal pertama yang perlu kita lakukan adalah melakukan pengecekan status cluster, dalam keadaan normal kita akan login melalui bastion server, dan melakukan semua pengecekan via bastion server. Tapi dalam kasus ini, bastion server akan gagal login ke ocp cluster.

(bastion) $ oc login

The connection to the server oauth-openshift.apps.devqa-kcln.ocp.hq.example.co.id was refused - did you specify the right host or port?

Kita perlu melakukan pengecekan melalui master node. Lakukan ssh ke master node.

ssh -i /path/to/privatekey core@[master-hostname]

Dari dalam master server, kita perlu melakukan beberapa pengecekan. Pastikan untuk menggunakan user root, gunakan sudo -i untuk switch user dari core ke root. Lalu export environment variable yang di perlukan.

$ sudo -i
# export KUBECONFIG=/etc/kubernetes/static-pod-resources/kube-apiserver-certs/secrets/node-kubeconfigs/localhost.kubeconfig

Lakukan pengecekan clusterversion, co, node dan csr.

$ oc whoami
$ oc get clusterversion
$ oc get co
$ oc get nodes
$ oc get csr -A
$ oc get clusterversion

NAME VERSION AVAILABLE PROGRESSING SINCE STATUS
version 4.10.55 True False 153d Cluster version is 4.10.55

Hasil dari pengecekan cluster version kita bisa lihat bahwa status PROGRESSING adalah False, yang mana ini artinya ada komponen yang tidak berjalan.

Hal yang sama juga terjadi pada saat menjalankan command oc get co, status semua operator dalam keadaan PROGRESSING False. Hal tersebut biasa terjadi pada cluster yang semua node nya baru di hidupkan.

$ oc get co

NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
authentication 4.10.55 True False False 22d
baremetal 4.10.55 True False False 153d
cloud-controller-manager 4.10.55 True False False 154d
cloud-credential 4.10.55 True False False 154d
cluster-autoscaler 4.10.55 True False False 153d
config-operator 4.10.55 True False False 153d
console 4.10.55 True False False 20d
csi-snapshot-controller 4.10.55 True False False 153d
dns 4.10.55 True False False 153d
etcd 4.10.55 True False False 153d
image-registry 4.10.55 True False False 153d
ingress 4.10.55 True False False 153d
insights 4.10.55 True False False 153d
kube-apiserver 4.10.55 True False False 153d
kube-controller-manager 4.10.55 True False False 153d
kube-scheduler 4.10.55 True False False 153d
kube-storage-version-migrator 4.10.55 True False False 71d
machine-api 4.10.55 True False False 153d
machine-approver 4.10.55 True False False 153d
machine-config 4.10.55 True False False 71d
marketplace 4.10.55 True False False 153d
monitoring 4.10.55 True False False 153d
network 4.10.55 True False False 153d
node-tuning 4.10.55 True False False 71d
openshift-apiserver 4.10.55 True False False 153d
openshift-controller-manager 4.10.55 True False False 31d
openshift-samples 4.10.55 True False False 153d
operator-lifecycle-manager 4.10.55 True False False 153d
operator-lifecycle-manager-catalog 4.10.55 True False False 153d
operator-lifecycle-manager-packageserver 4.10.55 True False False 153d
service-ca 4.10.55 True False False 153d
storage 4.10.55 True False False 153d

Dari dua infromasi di atas, kita perlu melakukan pengecekan lebih lanjut untuk melihat keadaan semua node.

$ oc get nodes

NAME STATUS ROLES AGE VERSION
csworker-1.devqa-kcln.ocp.hq.example.co.id NotReady worker 153d v1.23.5+8471591
csworker-2.devqa-kcln.ocp.hq.example.co.id NotReady worker 153d v1.23.5+8471591
csworker-3.devqa-kcln.ocp.hq.example.co.id NotReady worker 153d v1.23.5+8471591
infra-1.devqa-kcln.ocp.hq.example.co.id NotReady infra,worker 153d v1.23.5+8471591
infra-2.devqa-kcln.ocp.hq.example.co.id NotReady infra,worker 153d v1.23.5+8471591
infra-3.devqa-kcln.ocp.hq.example.co.id NotReady infra,worker 153d v1.23.5+8471591
master-1.devqa-kcln.ocp.hq.example.co.id NotReady master 154d v1.23.5+8471591
master-2.devqa-kcln.ocp.hq.example.co.id NotReady master 153d v1.23.5+8471591
master-3.devqa-kcln.ocp.hq.example.co.id NotReady master 153d v1.23.5+8471591
odf-1.devqa-kcln.ocp.hq.example.co.id NotReady infra,worker 34d v1.23.5+8471591
odf-2.devqa-kcln.ocp.hq.example.co.id NotReady infra,worker 153d v1.23.5+8471591
odf-3.devqa-kcln.ocp.hq.example.co.id NotReady infra,worker 153d v1.23.5+8471591
worker-1.devqa-kcln.ocp.hq.example.co.id NotReady worker 153d v1.23.5+8471591
worker-2.devqa-kcln.ocp.hq.example.co.id NotReady worker 153d v1.23.5+8471591

Kita bisa lihat bahwa semua nodes STATUS nya dalam keadaan NotReady.

Hasil dari command oc dan node cukup memberikan informasi bahwa keadaan cluster yang kita miliki mati total. Langkah lanjutan yang perlu kita lakukan adalah mencoba untuk mengubah keadaan semua node dari NotReady menjadi Ready.

Lakukan pengecekan csr, untuk melihat apakah ada csr yang CONDITION nya Pending.

$ oc get csr -A

NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
csr-22wgh 18h kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Pending
csr-24xf8 10h kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Pending
csr-259fv 14h kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Pending
.
.
.
csr-zxtt2 22h kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Pending
csr-zxvrp 23h kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Pending
csr-zz8gb 9h kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Pending

Lakukan approvement berulang, sampai tidak ada satupun csr yang muncul.

$ oc get csr -o name | xargs oc adm certificate approve

Setelah semua csr di approve, lakukan pengecekan ulang node. Pastikan semua dalam STATUS Ready.

$ oc get nodes

NAME STATUS ROLES AGE VERSION
csworker-1.devqa-kcln.ocp.hq.example.co.id Ready worker 154d v1.23.5+8471591
csworker-2.devqa-kcln.ocp.hq.example.co.id Ready worker 154d v1.23.5+8471591
csworker-3.devqa-kcln.ocp.hq.example.co.id Ready worker 154d v1.23.5+8471591
infra-1.devqa-kcln.ocp.hq.example.co.id Ready infra,worker 154d v1.23.5+8471591
infra-2.devqa-kcln.ocp.hq.example.co.id Ready infra,worker 154d v1.23.5+8471591
infra-3.devqa-kcln.ocp.hq.example.co.id Ready infra,worker 154d v1.23.5+8471591
master-1.devqa-kcln.ocp.hq.example.co.id Ready master 154d v1.23.5+8471591
master-2.devqa-kcln.ocp.hq.example.co.id Ready master 154d v1.23.5+8471591
master-3.devqa-kcln.ocp.hq.example.co.id Ready master 154d v1.23.5+8471591
odf-1.devqa-kcln.ocp.hq.example.co.id Ready infra,worker 34d v1.23.5+8471591
odf-2.devqa-kcln.ocp.hq.example.co.id Ready infra,worker 154d v1.23.5+8471591
odf-3.devqa-kcln.ocp.hq.example.co.id Ready infra,worker 154d v1.23.5+8471591
worker-1.devqa-kcln.ocp.hq.example.co.id Ready worker 154d v1.23.5+8471591
worker-2.devqa-kcln.ocp.hq.example.co.id Ready worker 154d v1.23.5+8471591

Jika sudah Ready, lakukan pengecekan ulang Cluster Operator. Pastikan semua PROGRESSING True.

$ oc get co

NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
authentication 4.10.55 True True False 4h16m
baremetal 4.10.55 True True False 154d
cloud-controller-manager 4.10.55 True True False 154d
cloud-credential 4.10.55 True True False 154d
cluster-autoscaler 4.10.55 True True False 154d
config-operator 4.10.55 True True False 154d
console 4.10.55 True True False 4h16m
csi-snapshot-controller 4.10.55 True True False 154d
dns 4.10.55 True True False 154d
etcd 4.10.55 True True False 154d
image-registry 4.10.55 True True False 154d
ingress 4.10.55 True True False 4h16m
insights 4.10.55 True True False 154d
kube-apiserver 4.10.55 True True False 154d
kube-controller-manager 4.10.55 True True False 154d
kube-scheduler 4.10.55 True True False 154d
kube-storage-version-migrator 4.10.55 True True False 5h
machine-api 4.10.55 True True False 154d
machine-approver 4.10.55 True True False 154d
machine-config 4.10.55 True True False 3h16m
marketplace 4.10.55 True True False 154d
monitoring 4.10.55 True True False 3h10m
network 4.10.55 True True False 154d
node-tuning 4.10.55 True True False 71d
openshift-apiserver 4.10.55 True True False 5h1m
openshift-controller-manager 4.10.55 True True False 32d
openshift-samples 4.10.55 True True False 154d
operator-lifecycle-manager 4.10.55 True True False 154d
operator-lifecycle-manager-catalog 4.10.55 True True False 154d
operator-lifecycle-manager-packageserver 4.10.55 True True False 153d
service-ca 4.10.55 True True False 154d
storage 4.10.55 True True False 153d

Jika sudah, open satu terminal dan masuk ke bastion server, untuk melihat apakah sudah berhasil login.

$ oc login https://api.devqa-kcln.ocp.hq.example.co.id:6443 --username=kubeadmin

Jika sudah berhasil login kedalam OCP melalui bastion, lakukan pengecekan semua namespace, semua pods di setiap namespace, dan semua komponen yang ada di ocp, seperti pv, pvc, operator, etc.

$ oc get ns
$ oc get pods --all-namespaces
$ oc get pv -n <namespace>
$ oc get pvc -n <namespace>

etc ...

Dan coba login kembali ke dalam ocp console.

Di titik ini lah kita perlu melakukan pengecekan menyeluruh cluster OCP, jika ada pods yang rusak, atau resource yang corrupt, kita perlu memperbaiki nya.

Penulis tidak akan mencantumkan semua perbaikan yang di lakukan, karena setiap cluster memiliki perilaku yang berbeda, jadi objective dari article ini hanyalah membantu OCP agar bisa running up.

--

--

Danang Priabada
Danang Priabada

Written by Danang Priabada

Red Hat and IBM Product Specialist | JPN : プリアバダ ダナン | CHN : 逹男 | linktr.ee/danangpriabada

No responses yet