2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenShiftクラスターの起動停止手順

Last updated at Posted at 2024-09-10

はじめに

OpenShift(以下OCP)クラスターの起動・停止の手順はRedHat社のマニュアルサイトに記載されていますが、実機で手順を確認したところマニュアルの内容だと一部不十分な箇所があったためそれらを補足した手順を残しておきます。

この記事を執筆した時点のOCPの最新バージョンは4.16ですが、今後リリースされるバージョンのマニュアルでは修正されているかもしれません。必ず公式のマニュアルを参照するようにしてください。

etcdのバックアップ

クラスターを停止する前にetcdのバックアップ取得が推奨されています。

マニュアル(v4.16)
https://docs.redhat.com/ja/documentation/openshift_container_platform/4.16/html/backup_and_restore/control-plane-backup-and-restore#backing-up-etcd-data_backup-etcd

手順

ocコマンドで OCPクラスターにcluster-adminロールを持つユーザーでログインします。

oc login -u <user_name> -p <password> <URL>

rootとしてデバッグセッションを開始します。

oc debug --as-root node/<マスターノード名>

rootディレクトリを/hostに変更します。

chroot /host

バックアップスクリプトを実行します。

/usr/local/bin/cluster-backup.sh /home/core/assets/backup

これで /home/core/assets/backup/ディレクトリに以下の2ファイルが作成されます。

  • snapshot_<datetimestamp>.db
  • static_kuberesources_<datetimestamp>.tar.gz

マニュアルはここで手順は終わっていますが、実際はMasterノード上に作成されたバックアップファイルを他のサーバー(bastion node等)にscp等で退避しておく必要があると思います。
多くの場合はcoreユーザーでscpすることになると思いますが、バックアップファイルはrootのみしか読み取れない状態のため、最後にパーミッションを変更しておきましょう。

cd /home/core/assets/backup/
chmod 644 *

最後にデバッグセッションを終了します。(exitは2回行う必要があります)

exit
exit

あとはbastion nodeにバックアップファイルをコピーするなどしてください。

cd <保管先ディレクトリ>
scp -p core@<Masterノードのホスト名>:/home/core/assets/backup/* .

OCPクラスターの停止手順

停止についてはマニュアルに記載の手順で問題ありませんでした。

マニュアル(v4.16)
https://docs.redhat.com/ja/documentation/openshift_container_platform/4.16/html/backup_and_restore/graceful-shutdown_graceful-shutdown-cluster

ただ、コマンドが長いので入力ミスをしないよう事前に各コマンドをテキストファイルに書いておいてコピペするのが良さそうです。

手順

シャットダウン前にクラスター証明書の期限を確認します。

oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath='{.metadata.annotations.auth\.openshift\.io/certificate-not-after}'

上記コマンドを実行すると証明書の期限が切れる日時が表示されます。
クラスターを停止している間に期限切れになりそうな場合は停止を中止するなどします。


クラスターのすべてのノードをスケジュール対象外に設定します。

for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; oc adm cordon ${node} ; done

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=true --ignore-daemonsets=true --timeout=60s ; done

全てのノードをシャットダウンします。
なお、マニュアルによると10ノード以上の大規模クラスターでは最後の shutdown -h 1の数字を10以上に変更するよう記載がありました。

for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do oc debug node/${node} -- chroot /host shutdown -h 1; done

これでOCPクラスターの停止は完了です。

OCPクラスターの起動手順

マニュアル
https://docs.redhat.com/ja/documentation/openshift_container_platform/4.13/html/backup_and_restore/graceful-restart_graceful-restart-cluster

手順

全てのMaster/Workerノードを起動します。

10分ほど待ってからMasterノードのステータスを確認します。

oc get nodes -l node-role.kubernetes.io/master

Masterノードのいずれかが「Ready」でない場合はCSRの有無を確認します。

oc get csr

以下のようにCONDITIONがPendingのCSRがある場合は oc adm certificate approve <CSR名>で1つずつ承認してください。

NAME        AGE    REQUESTOR                                          CONDITION
csr-xxxxxx   2m5s   system:serviceaccount:・・・:node-bootstrapper      Pending

次にWorkerノードのステータスを確認します。

oc get nodes -l node-role.kubernetes.io/worker

Workerノードのいずれかが「Ready」出ない場合は同様にCSRを確認&承認を行ってください。

ただ、マニュアルではこの時点で全ノードのステータスは「Ready」になっているものと記載されていますが、停止の際に全ノードをスケジュール対象外に設定しているため、実際は「Ready,SchedulingDisabled」となっているはずです。

そのため以下のコマンドで全ノードをスケジュール対象に戻してあげる必要があります。
これで各Podが立ち上がってくるはずです。

for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; oc adm uncordon ${node} ; done

次に全てのクラスターオペレーターのAVAILABLE値がTrueになっていることを確認します。

oc get cluster operators

あとは、必要なアプリのPodが起動していることを確認すれば終了です。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?