2.12. Docker ストレージの再設定
コンテナーイメージをダウンロードし、コンテナーを実行して削除する際、Docker は常にマップされたディスク領域を解放する訳ではありません。結果として、一定の時間が経過するとノード上で領域不足が生じる可能性があり、これにより OpenShift Container Platform で新規 Pod を作成できなくなるか、または Pod の作成に時間がかかる可能性があります。
たとえば、以下は 6 分が経過しても ContainerCreating
状態にある Pod を示しており、イベントログは FailedSync イベント を示しています。
oc get pod
$ 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
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
$ 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.
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
$ oc adm manage-node <node> --schedulable=false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して Docker および atomic-openshift-node サービスをシャットダウンします。
systemctl stop docker atomic-openshift-node
$ systemctl stop docker atomic-openshift-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、ローカルのボリュームディレクトリーを削除します。
rm -rf /var/lib/origin/openshift.local.volumes
$ rm -rf /var/lib/origin/openshift.local.volumes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、ローカルイメージのキャッシュをクリアします。その結果、
ose-*
イメージを含むイメージが再度プルする必要があります。これにより、イメージストアは回復しますが、Pod の起動時間が遅くなる可能性があります。/var/lib/docker ディレクトリーを削除します。
rm -rf /var/lib/docker
$ rm -rf /var/lib/docker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して Docker ストレージをリセットします。
docker-storage-setup --reset
$ docker-storage-setup --reset
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して Docker ストレージを再作成します。
docker-storage-setup
$ docker-storage-setup
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/lib/docker ディレクトリーを再作成します。
mkdir /var/lib/docker
$ mkdir /var/lib/docker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、Docker および atomic-openshift-node サービスを再起動します。
systemctl start docker atomic-openshift-node
$ systemctl start docker atomic-openshift-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストを再起動してノードサービスを再起動します。
systemctl restart atomic-openshift-node.service
# systemctl restart atomic-openshift-node.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、ノードをスケジュール対象としてマークします。
oc adm manage-node <node> --schedulable=true
$ oc adm manage-node <node> --schedulable=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow