Menu Close

Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

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 存储的节点中:

  1. 运行以下命令将节点标记为不可调度:

    $ oc adm manage-node <node> --schedulable=false
  2. 运行以下命令关闭 Docker 和 atomic-openshift-node 服务:

    $ systemctl stop docker atomic-openshift-node
  3. 运行以下命令删除本地卷目录:

    $ rm -rf /var/lib/origin/openshift.local.volumes

    此命令会清除本地镜像缓存。因此,镜像(包括 ose-* 镜像)需要重新拉取。这会导致镜像存储恢复时 pod 启动时间较慢。

  4. 删除 /var/lib/docker 目录:

    $ rm -rf /var/lib/docker
  5. 运行以下命令来重置 Docker 存储:

    $ docker-storage-setup --reset
  6. 运行以下命令重新创建 Docker 存储:

    $ docker-storage-setup
  7. 重新创建 /var/lib/docker 目录:

    $ mkdir /var/lib/docker
  8. 运行以下命令来重启 Docker 和 atomic-openshift-node 服务:

    $ systemctl start docker atomic-openshift-node
  9. 通过重启主机来重启节点服务:

    # systemctl restart atomic-openshift-node.service
  10. 运行以下命令将节点标记为可以调度:

    $ oc adm manage-node <node> --schedulable=true