7.3.4. CRI-O ストレージの消去
以下の問題が発生した場合、CRI-O の一時ストレージを手動でクリアすることができます。
ノードは Pod を実行できず、次のエラーが表示されます。
Failed to create pod sandbox: rpc error: code = Unknown desc = failed to mount container XXX: error recreating the missing symlinks: error reading name of symlink for XXX: open /var/lib/containers/storage/overlay/XXX/link: no such file or directory作業ノードに新しいコンテナーを作成することができず、“can’t stat lower layer” というエラーが表示される。
can't stat lower layer ... because it does not exist. Going through storage to recreate the missing symlinks.-
クラスターをアップグレードした後、またはノードを再起動しようとすると、ノードが
NotReady状態になる。 -
コンテナーランタイム実装 (
crio) が正しく動作していない。 -
コンテナーランタイムインスタンス (
crio) が動作していないため、oc debug node/<node_name>を使用してノード上でデバッグシェルを開始できない。
この手順で、CRI-O のストレージを完全に消去し、エラーを解消してください。
前提条件
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc) がインストールされている。
手順
ノードで
cordonを使用します。これは、ノードがReady状態になった場合に、ワークロードがスケジューリングされるのを防ぐためです。Status セクションにSchedulingDisabledと表示されていれば、スケジューリングが無効になっていることがわかります。$ oc adm cordon <node_name>cluster-admin ユーザーとして、ノードをドレインします。
$ oc adm drain <node_name> --ignore-daemonsets --delete-emptydir-data注記Pod または Pod テンプレートの
terminationGracePeriodSeconds属性は、正常な終了期間を制御します。この属性のデフォルトは 30 秒ですが、必要に応じてアプリケーションごとにカスタマイズできます。90 秒を超えて設定すると、Pod がSIGKILLedとマークされ、正常に終了しない可能性があります。ノードが戻ってきたら、SSH またはコンソールでノードに接続し直します。その後、root ユーザーで接続します。
$ ssh core@node1.example.com $ sudo -ikubelet を手動で停止します。
# systemctl stop kubeletコンテナーや Pod を停止します。
以下のコマンドを使用して、
HostNetworkにない Pod を停止します。これらが削除されるかどうかは、HostNetworkにあるネットワークプラグイン Pod に左右されるので、先に削除する必要があります。.. for pod in $(crictl pods -q); do if [[ "$(crictl inspectp $pod | jq -r .status.linux.namespaces.options.network)" != "NODE" ]]; then crictl rmp -f $pod; fi; done他のすべての Pod を停止します。
# crictl rmp -fa
crio のサービスを手動で停止します。
# systemctl stop crioこれらのコマンドを実行すると、一時ストレージを完全に消去することができます。
# crio wipe -fcrio および kubelet サービスを起動します。
# systemctl start crio # systemctl start kubeletcrio および kubelet サービスが起動しており、ノードが
Readyのステータスになっている場合には、クリーンアップが正常に機能したことが分かります。$ oc get nodes出力例
NAME STATUS ROLES AGE VERSION ci-ln-tkbxyft-f76d1-nvwhr-master-1 Ready, SchedulingDisabled master 133m v1.33.4ノードをスケジューリング可能な状態にします。スケジューリングが有効になったことは、
SchedulingDisabledのステータスがなくなったときにわかります。$ oc adm uncordon <node_name>出力例
NAME STATUS ROLES AGE VERSION ci-ln-tkbxyft-f76d1-nvwhr-master-1 Ready master 133m v1.33.4