第 7 章 Docker 任务
OpenShift Container Platform 使用容器引擎(CRI-O 或 Docker)来运行由任意数量的容器组成的 pod 中的应用程序。
作为集群管理员,有时容器引擎需要一些额外的配置,才能高效地运行 OpenShift Container Platform 安装元素。
7.1. 增加容器存储 复制链接链接已复制到粘贴板!
增加可用存储量可确保继续部署,而不会造成任何中断。为此,必须提供一个包含相应可用容量的空闲容量的空闲分区。
7.1.1. 清空节点 复制链接链接已复制到粘贴板!
流程
从 master 实例或集群管理员,允许从该节点驱除任何 pod,并禁用该节点上调度其他 pod:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果存在运行没有迁移的本地卷的容器,请运行以下命令:
oc adm drain ${NODE} --ignore-daemonsets --delete-local-data。列出节点上的 pod,以验证是否已移除它们:
oc adm manage-node ${NODE} --list-pods Listing matched pods on node: ose-app-node01.example.com NAME READY STATUS RESTARTS AGE$ oc adm manage-node ${NODE} --list-pods Listing matched pods on node: ose-app-node01.example.com NAME READY STATUS RESTARTS AGECopy to Clipboard Copied! Toggle word wrap Toggle overflow - 对每个节点重复前面的两个步骤。
如需有关撤离和排空 pod 或节点的更多信息,请参阅节点维护。
7.1.2. 增加存储 复制链接链接已复制到粘贴板!
您可以通过两种方式来增加 Docker 存储:附加新磁盘或扩展现有磁盘。
使用新磁盘增加存储
先决条件
需要更多存储的现有实例都必须有新磁盘。在以下步骤中,原始磁盘被标记为
/dev/xvdb,新磁盘被标记为/dev/xvdd,如 /etc/sysconfig/docker-storage-setup 文件所示:vi /etc/sysconfig/docker-storage-setup DEVS="/dev/xvdb /dev/xvdd"
# vi /etc/sysconfig/docker-storage-setup DEVS="/dev/xvdb /dev/xvdd"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此过程可能因底层的 OpenShift Container Platform 基础架构而异。
流程
停止
docker:systemctl stop docker
# systemctl stop dockerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过删除 pod 定义并重启主机来停止节点服务:
mkdir -p /etc/origin/node/pods-stopped mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
# mkdir -p /etc/origin/node/pods-stopped # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
docker-storage-setup命令以扩展与容器存储关联的卷组和逻辑卷:docker-storage-setup
# docker-storage-setupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 精简池 设置,您应该看到以下输出并继续下一步:
INFO: Volume group backing root filesystem could not be determined INFO: Device /dev/xvdb is already partitioned and is part of volume group docker_vol INFO: Device node /dev/xvdd1 exists. Physical volume "/dev/xvdd1" successfully created. Volume group "docker_vol" successfully extended
INFO: Volume group backing root filesystem could not be determined INFO: Device /dev/xvdb is already partitioned and is part of volume group docker_vol INFO: Device node /dev/xvdd1 exists. Physical volume "/dev/xvdd1" successfully created. Volume group "docker_vol" successfully extendedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于使用 Overlay2 文件系统的 XFS 设置,在以上输出中显示的增加将不可见。
您必须执行以下步骤来扩展和增大 XFS 存储:
运行
lvextend命令,以增大逻辑卷以使用卷组中的所有可用空间:lvextend -r -l +100%FREE /dev/mapper/docker_vol-dockerlv
# lvextend -r -l +100%FREE /dev/mapper/docker_vol-dockerlvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果要求使用较少的空间,请相应地选择
FREE百分比。运行
xfs_growfs命令增大文件系统以使用可用空间:xfs_growfs /dev/mapper/docker_vol-dockerlv
# xfs_growfs /dev/mapper/docker_vol-dockerlvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意XFS 文件系统无法缩小。
再次运行
docker-storage-setup命令:docker-storage-setup
# docker-storage-setupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,您应该在输出中看到扩展卷组和逻辑卷。
INFO: Device /dev/vdb is already partitioned and is part of volume group docker_vg INFO: Found an already configured thin pool /dev/mapper/docker_vg-docker--pool in /etc/sysconfig/docker-storage INFO: Device node /dev/mapper/docker_vg-docker--pool exists. Logical volume docker_vg/docker-pool changed.
INFO: Device /dev/vdb is already partitioned and is part of volume group docker_vg INFO: Found an already configured thin pool /dev/mapper/docker_vg-docker--pool in /etc/sysconfig/docker-storage INFO: Device node /dev/mapper/docker_vg-docker--pool exists. Logical volume docker_vg/docker-pool changed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
启动 Docker 服务:
systemctl start docker vgs VG #PV #LV #SN Attr VSize VFree docker_vol 2 1 0 wz--n- 64.99g <55.00g
# systemctl start docker # vgs VG #PV #LV #SN Attr VSize VFree docker_vol 2 1 0 wz--n- 64.99g <55.00gCopy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复 pod 定义:
mv /etc/origin/node/pods-stopped/* /etc/origin/node/pods/
# mv /etc/origin/node/pods-stopped/* /etc/origin/node/pods/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过重启主机来重启节点服务:
systemctl restart atomic-openshift-node.service
# systemctl restart atomic-openshift-node.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在添加新卷组并重新运行
docker-storage-setup时,添加磁盘的一个优点是,在添加新存储后,系统中使用的镜像仍然存在:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 随着存储容量增加,使节点可以调度,以接受新的传入的 pod。
作为集群管理员,从 master 实例运行以下 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为现有磁盘扩展存储
- 按照前面的步骤撤离节点。
停止
docker:systemctl stop docker
# systemctl stop dockerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过删除 pod 定义来停止节点服务:
mkdir -p /etc/origin/node/pods-stopped mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
# mkdir -p /etc/origin/node/pods-stopped # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据需要重新定义现有磁盘的大小。这可取决于您的环境:
如果您使用 LVM(逻辑卷管理器):
删除逻辑卷 :
lvremove /dev/docker_vg/docker/lv
# lvremove /dev/docker_vg/docker/lvCopy to Clipboard Copied! Toggle word wrap Toggle overflow vgremove docker_vg
# vgremove docker_vgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除物理卷 :
pvremove /dev/<my_previous_disk_device>
# pvremove /dev/<my_previous_disk_device>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 如果使用云供应商,您可以分离磁盘、销毁磁盘,然后创建一个新的较大的磁盘,并将它附加到实例。
对于非云环境,可以调整磁盘和文件系统的大小。详情请查看以下解决方案:
- 通过检查设备名称、大小等,验证 /etc/sysconfig/container-storage-setup 文件是否已为新磁盘正确配置。
运行
docker-storage-setup以重新配置新磁盘:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 Docker 服务:
systemctl start docker vgs VG #PV #LV #SN Attr VSize VFree docker_vol 2 1 0 wz--n- 64.99g <55.00g
# systemctl start docker # vgs VG #PV #LV #SN Attr VSize VFree docker_vol 2 1 0 wz--n- 64.99g <55.00gCopy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复 pod 定义:
mv /etc/origin/node/pods-stopped/* /etc/origin/node/pods/
# mv /etc/origin/node/pods-stopped/* /etc/origin/node/pods/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过重启主机来重启节点服务:
systemctl restart atomic-openshift-node.service
# systemctl restart atomic-openshift-node.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.3. 更改存储后端 复制链接链接已复制到粘贴板!
随着服务和文件系统的进步,可能需要更改存储后端才能利用新功能。以下步骤提供了将设备映射器后端改为 overlay2 存储后端的示例。与传统设备映射器相比,overlay2 提供更高的速度和密度。
7.1.3.1. 清空节点 复制链接链接已复制到粘贴板!
从 master 实例或集群管理员,允许从该节点驱除任何 pod,并禁用该节点上调度其他 pod:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果存在运行没有迁移的本地卷的容器,请运行以下命令:
oc adm drain ${NODE} --ignore-daemonsets --delete-local-data列出节点上的 pod,以验证是否已移除它们:
oc adm manage-node ${NODE} --list-pods Listing matched pods on node: ose-app-node01.example.com NAME READY STATUS RESTARTS AGE$ oc adm manage-node ${NODE} --list-pods Listing matched pods on node: ose-app-node01.example.com NAME READY STATUS RESTARTS AGECopy to Clipboard Copied! Toggle word wrap Toggle overflow 如需有关撤离和排空 pod 或节点的更多信息,请参阅节点维护。
如果没有容器目前在实例上运行的容器,停止
docker服务:systemctl stop docker
# systemctl stop dockerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 停止
atomic-openshift-node服务:systemctl stop atomic-openshift-node
# systemctl stop atomic-openshift-nodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证卷组、逻辑卷名称和物理卷名称的名称:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
docker-storage-setup文件,以指定STORAGE_DRIVER。注意当从 Red Hat Enterprise Linux 版本 7.3 升级到 7.4 时,
docker服务会尝试使用带有 STORAGE_DRIVER 的STORAGE_DRIVER的/var。使用 extfs 作为STORAGE_DRIVER会导致错误。有关错误的更多信息,请参见以下程序错误:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置存储:
docker-storage-setup
# docker-storage-setupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
docker:systemctl start docker
# systemctl start dockerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
atomic-openshift-node服务:systemctl restart atomic-openshift-node.service
# systemctl restart atomic-openshift-node.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将存储修改为使用
overlay2,使该节点可以调度来接受新的传入的 pod。从 master 实例或集群管理员:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow