2.12. Docker ストレージの再設定
コンテナーイメージをダウンロードし、コンテナーを実行して削除する際、Docker は常にマップされたディスク領域を解放する訳ではありません。結果として、一定の時間が経過するとノード上で領域不足が生じる可能性があり、これにより OpenShift Container Platform で新規 Pod を作成できなくなるか、または Pod の作成に時間がかかる可能性があります。
たとえば、以下は 6 分が経過しても ContainerCreating
状態にある Pod を示しており、イベントログは FailedSync イベント を示しています。
$ oc get pod
出力例
NAME READY STATUS RESTARTS AGE cakephp-mysql-persistent-1-build 0/1 ContainerCreating 0 6m mysql-1-9767d 0/1 ContainerCreating 0 2m mysql-1-deploy 0/1 ContainerCreating 0 6m
$ oc get events
出力例
LASTSEEN FIRSTSEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE 6m 6m 1 cakephp-mysql-persistent-1-build Pod Normal Scheduled default-scheduler Successfully assigned cakephp-mysql-persistent-1-build to ip-172-31-71-195.us-east-2.compute.internal 2m 5m 4 cakephp-mysql-persistent-1-build Pod Warning FailedSync kubelet, ip-172-31-71-195.us-east-2.compute.internal Error syncing pod 2m 4m 4 cakephp-mysql-persistent-1-build Pod Normal SandboxChanged kubelet, ip-172-31-71-195.us-east-2.compute.internal Pod sandbox changed, it will be killed and re-created.
この問題に対する 1 つの解決法として、Docker ストレージを再設定し、Docker で不要なアーティファクトを削除することができます。
Docker ストレージを再起動するノードで、以下を実行します。
以下のコマンドを実行して、ノードをスケジュール対象外としてマークします。
$ oc adm manage-node <node> --schedulable=false
以下のコマンドを実行して Docker および atomic-openshift-node サービスをシャットダウンします。
$ systemctl stop docker atomic-openshift-node
以下のコマンドを実行して、ローカルのボリュームディレクトリーを削除します。
$ rm -rf /var/lib/origin/openshift.local.volumes
このコマンドは、ローカルイメージのキャッシュをクリアします。その結果、
ose-*
イメージを含むイメージが再度プルする必要があります。これにより、イメージストアは回復しますが、Pod の起動時間が遅くなる可能性があります。/var/lib/docker ディレクトリーを削除します。
$ rm -rf /var/lib/docker
以下のコマンドを実行して Docker ストレージをリセットします。
$ docker-storage-setup --reset
以下のコマンドを実行して Docker ストレージを再作成します。
$ docker-storage-setup
/var/lib/docker ディレクトリーを再作成します。
$ mkdir /var/lib/docker
以下のコマンドを実行して、Docker および atomic-openshift-node サービスを再起動します。
$ systemctl start docker atomic-openshift-node
ホストを再起動してノードサービスを再起動します。
# systemctl restart atomic-openshift-node.service
以下のコマンドを実行して、ノードをスケジュール対象としてマークします。
$ oc adm manage-node <node> --schedulable=true