第 7 章 Docker 任务
OpenShift Container Platform 使用容器引擎(CRI-O 或 Docker)来运行由任意数量的容器组成的 pod 中的应用程序。
作为集群管理员,有时容器引擎需要一些额外的配置,才能高效地运行 OpenShift Container Platform 安装元素。
7.1. 增加容器存储
增加可用存储量可确保继续部署,而不会造成任何中断。为此,必须提供一个包含相应可用容量的空闲容量的空闲分区。
7.1.1. 清空节点
流程
从 master 实例或集群管理员,允许从该节点驱除任何 pod,并禁用该节点上调度其他 pod:
$ NODE=ose-app-node01.example.com $ oc adm manage-node ${NODE} --schedulable=false NAME STATUS AGE VERSION ose-app-node01.example.com Ready,SchedulingDisabled 20m v1.6.1+5115d708d7 $ oc adm drain ${NODE} --ignore-daemonsets node "ose-app-node01.example.com" already cordoned pod "perl-1-build" evicted pod "perl-1-3lnsh" evicted pod "perl-1-9jzd8" evicted node "ose-app-node01.example.com" drained
注意如果存在运行没有迁移的本地卷的容器,请运行以下命令:
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
- 对每个节点重复前面的两个步骤。
如需有关撤离和排空 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"
注意此过程可能因底层的 OpenShift Container Platform 基础架构而异。
流程
停止
docker
:# systemctl stop docker
通过删除 pod 定义并重启主机来停止节点服务:
# mkdir -p /etc/origin/node/pods-stopped # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
运行
docker-storage-setup
命令以扩展与容器存储关联的卷组和逻辑卷:# docker-storage-setup
有关 精简池 设置,您应该看到以下输出并继续下一步:
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
对于使用 Overlay2 文件系统的 XFS 设置,在以上输出中显示的增加将不可见。
您必须执行以下步骤来扩展和增大 XFS 存储:
运行
lvextend
命令,以增大逻辑卷以使用卷组中的所有可用空间:# lvextend -r -l +100%FREE /dev/mapper/docker_vol-dockerlv
注意如果要求使用较少的空间,请相应地选择
FREE
百分比。运行
xfs_growfs
命令增大文件系统以使用可用空间:# xfs_growfs /dev/mapper/docker_vol-dockerlv
注意XFS 文件系统无法缩小。
再次运行
docker-storage-setup
命令:# docker-storage-setup
现在,您应该在输出中看到扩展卷组和逻辑卷。
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.
启动 Docker 服务:
# systemctl start docker # vgs VG #PV #LV #SN Attr VSize VFree docker_vol 2 1 0 wz--n- 64.99g <55.00g
恢复 pod 定义:
# mv /etc/origin/node/pods-stopped/* /etc/origin/node/pods/
通过重启主机来重启节点服务:
# systemctl restart atomic-openshift-node.service
在添加新卷组并重新运行
docker-storage-setup
时,添加磁盘的一个优点是,在添加新存储后,系统中使用的镜像仍然存在:# container images REPOSITORY TAG IMAGE ID CREATED SIZE docker-registry.default.svc:5000/tet/perl latest 8b0b0106fb5e 13 minutes ago 627.4 MB registry.redhat.io/rhscl/perl-524-rhel7 <none> 912b01ac7570 6 days ago 559.5 MB registry.redhat.io/openshift3/ose-deployer v3.6.173.0.21 89fd398a337d 5 weeks ago 970.2 MB registry.redhat.io/openshift3/ose-pod v3.6.173.0.21 63accd48a0d7 5 weeks ago 208.6 MB
随着存储容量增加,使节点可以调度,以接受新的传入的 pod。
作为集群管理员,从 master 实例运行以下 :
$ oc adm manage-node ${NODE} --schedulable=true ose-master01.example.com Ready,SchedulingDisabled 24m v1.6.1+5115d708d7 ose-master02.example.com Ready,SchedulingDisabled 24m v1.6.1+5115d708d7 ose-master03.example.com Ready,SchedulingDisabled 24m v1.6.1+5115d708d7 ose-infra-node01.example.com Ready 24m v1.6.1+5115d708d7 ose-infra-node02.example.com Ready 24m v1.6.1+5115d708d7 ose-infra-node03.example.com Ready 24m v1.6.1+5115d708d7 ose-app-node01.example.com Ready 24m v1.6.1+5115d708d7 ose-app-node02.example.com Ready 24m v1.6.1+5115d708d7
为现有磁盘扩展存储
- 按照前面的步骤撤离节点。
停止
docker
:# systemctl stop docker
通过删除 pod 定义来停止节点服务:
# mkdir -p /etc/origin/node/pods-stopped # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
根据需要重新定义现有磁盘的大小。这可取决于您的环境:
- 通过检查设备名称、大小等,验证 /etc/sysconfig/container-storage-setup 文件是否已为新磁盘正确配置。
运行
docker-storage-setup
以重新配置新磁盘:# docker-storage-setup 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
启动 Docker 服务:
# systemctl start docker # vgs VG #PV #LV #SN Attr VSize VFree docker_vol 2 1 0 wz--n- 64.99g <55.00g
恢复 pod 定义:
# mv /etc/origin/node/pods-stopped/* /etc/origin/node/pods/
通过重启主机来重启节点服务:
# systemctl restart atomic-openshift-node.service
7.1.3. 更改存储后端
随着服务和文件系统的进步,可能需要更改存储后端才能利用新功能。以下步骤提供了将设备映射器后端改为 overlay2
存储后端的示例。与传统设备映射器相比,overlay2
提供更高的速度和密度。
7.1.3.1. 清空节点
从 master 实例或集群管理员,允许从该节点驱除任何 pod,并禁用该节点上调度其他 pod:
$ NODE=ose-app-node01.example.com $ oc adm manage-node ${NODE} --schedulable=false NAME STATUS AGE VERSION ose-app-node01.example.com Ready,SchedulingDisabled 20m v1.6.1+5115d708d7 $ oc adm drain ${NODE} --ignore-daemonsets node "ose-app-node01.example.com" already cordoned pod "perl-1-build" evicted pod "perl-1-3lnsh" evicted pod "perl-1-9jzd8" evicted node "ose-app-node01.example.com" drained
注意如果存在运行没有迁移的本地卷的容器,请运行以下命令:
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
如需有关撤离和排空 pod 或节点的更多信息,请参阅节点维护。
如果没有容器目前在实例上运行的容器,停止
docker
服务:# systemctl stop docker
停止
atomic-openshift-node
服务:# systemctl stop atomic-openshift-node
验证卷组、逻辑卷名称和物理卷名称的名称:
# vgs VG #PV #LV #SN Attr VSize VFree docker_vol 1 1 0 wz--n- <25.00g 15.00g # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert dockerlv docker_vol -wi-ao---- <10.00g # lvremove /dev/docker_vol/docker-pool -y # vgremove docker_vol -y # pvs PV VG Fmt Attr PSize PFree /dev/xvdb1 docker_vol lvm2 a-- <25.00g 15.00g # pvremove /dev/xvdb1 -y # rm -Rf /var/lib/docker/* # rm -f /etc/sysconfig/docker-storage
修改
docker-storage-setup
文件,以指定STORAGE_DRIVER
。注意当从 Red Hat Enterprise Linux 版本 7.3 升级到 7.4 时,
docker
服务会尝试使用带有 STORAGE_DRIVER 的STORAGE_DRIVER
的/var
。使用 extfs 作为STORAGE_DRIVER
会导致错误。有关错误的更多信息,请参见以下程序错误:DEVS=/dev/xvdb VG=docker_vol DATA_SIZE=95%VG STORAGE_DRIVER=overlay2 CONTAINER_ROOT_LV_NAME=dockerlv CONTAINER_ROOT_LV_MOUNT_PATH=/var/lib/docker CONTAINER_ROOT_LV_SIZE=100%FREE
设置存储:
# docker-storage-setup
启动
docker
:# systemctl start docker
重启
atomic-openshift-node
服务:# systemctl restart atomic-openshift-node.service
通过将存储修改为使用
overlay2
,使该节点可以调度来接受新的传入的 pod。从 master 实例或集群管理员:
$ oc adm manage-node ${NODE} --schedulable=true ose-master01.example.com Ready,SchedulingDisabled 24m v1.6.1+5115d708d7 ose-master02.example.com Ready,SchedulingDisabled 24m v1.6.1+5115d708d7 ose-master03.example.com Ready,SchedulingDisabled 24m v1.6.1+5115d708d7 ose-infra-node01.example.com Ready 24m v1.6.1+5115d708d7 ose-infra-node02.example.com Ready 24m v1.6.1+5115d708d7 ose-infra-node03.example.com Ready 24m v1.6.1+5115d708d7 ose-app-node01.example.com Ready 24m v1.6.1+5115d708d7 ose-app-node02.example.com Ready 24m v1.6.1+5115d708d7