2.12. 重置 Docker 存储
当您下载容器镜像并运行和删除容器时,Docker 并不总是释放映射的磁盘空间。因此,随着时间推移,节点上可能会耗尽空间,这可能会阻止 OpenShift Container Platform 创建新 pod,或者导致 pod 创建需要几分钟。
例如,下面显示了 6 分钟后仍然处于 ContainerCreating
状态的容器集,事件日志会显示一个 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.
解决这个问题的一种方法是重置 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