实验服务器无法 24 小时一直开机,所以需要经常做完测试关闭服务器,对集群的关闭有一套流程,在这里记录一下。
首先是推荐进行 etcd 的备份,这里暂时略过。
首先需要确认证书的过期时间,要确保在这个时间之前启动集群,如果超过了该时间需要手动批准 CSR。
oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath='{.metadata.annotations.auth\.openshift\.io/certificate-not-after}'
接下来对集群中所有的节点禁止 scheduler :
for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; oc adm cordon ${node} ; done
疏散 worker 节点上的 Pod:
for node in $(oc get nodes -l node-role.kubernetes.io/worker -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; oc adm drain ${node} --delete-emptydir-data --ignore-daemonsets=true --timeout=15s ; done
关闭集群中的所有节点:
for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do oc debug node/${node} -- chroot /host shutdown -h 1; done
集群启动后,记得需要移除 cordon
:
for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; oc adm uncordon ${node} ; done
如果长时间关机了证书过期将自动签发新的证书,但是需要手动批准证书请求,使用以下命令进行全部批准:
oc adm certificate approve $(oc get csr | grep -i Pending | awk '{print $1}')
参考链接:https://docs.openshift.com/container-platform/4.14/backup_and_restore/graceful-cluster-shutdown.html