搜索

第 7 章 Docker 任务

download PDF

OpenShift Container Platform 使用容器引擎(CRI-O 或 Docker)来运行由任意数量的容器组成的 pod 中的应用程序。

作为集群管理员,有时容器引擎需要一些额外的配置,才能高效地运行 OpenShift Container Platform 安装元素。

7.1. 增加容器存储

增加可用存储量可确保继续部署,而不会造成任何中断。为此,必须提供一个包含相应可用容量的空闲容量的空闲分区。

7.1.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

  2. 列出节点上的 pod,以验证是否已移除它们:

    $ oc adm manage-node ${NODE} --list-pods
    
    Listing matched pods on node: ose-app-node01.example.com
    
    NAME      READY     STATUS    RESTARTS   AGE
  3. 对每个节点重复前面的两个步骤。

如需有关撤离和排空 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 基础架构而异。

流程
  1. 停止 docker

    # systemctl stop docker
  2. 通过删除 pod 定义并重启主机来停止节点服务:

    # mkdir -p /etc/origin/node/pods-stopped
    # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
  3. 运行 docker-storage-setup 命令以扩展与容器存储关联的卷组和逻辑卷:

    # docker-storage-setup
    1. 有关 精简池 设置,您应该看到以下输出并继续下一步:

      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
    2. 对于使用 Overlay2 文件系统的 XFS 设置,在以上输出中显示的增加将不可见。

      您必须执行以下步骤来扩展和增大 XFS 存储:

      1. 运行 lvextend 命令,以增大逻辑卷以使用卷组中的所有可用空间:

        # lvextend -r -l +100%FREE /dev/mapper/docker_vol-dockerlv
        注意

        如果要求使用较少的空间,请相应地选择 FREE 百分比。

      2. 运行 xfs_growfs 命令增大文件系统以使用可用空间:

        # xfs_growfs /dev/mapper/docker_vol-dockerlv
        注意

        XFS 文件系统无法缩小。

      3. 再次运行 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.
  4. 启动 Docker 服务:

    # systemctl start docker
    # vgs
      VG         #PV #LV #SN Attr   VSize  VFree
      docker_vol   2   1   0 wz--n- 64.99g <55.00g
  5. 恢复 pod 定义:

    # mv /etc/origin/node/pods-stopped/* /etc/origin/node/pods/
  6. 通过重启主机来重启节点服务:

    # systemctl restart atomic-openshift-node.service
  7. 在添加新卷组并重新运行 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
  8. 随着存储容量增加,使节点可以调度,以接受新的传入的 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

为现有磁盘扩展存储

  1. 按照前面的步骤撤离节点。
  2. 停止 docker

    # systemctl stop docker
  3. 通过删除 pod 定义来停止节点服务:

    # mkdir -p /etc/origin/node/pods-stopped
    # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
  4. 根据需要重新定义现有磁盘的大小。这可取决于您的环境:

    • 如果您使用 LVM(逻辑卷管理器):

    • 如果使用云供应商,您可以分离磁盘、销毁磁盘,然后创建一个新的较大的磁盘,并将它附加到实例。
    • 对于非云环境,可以调整磁盘和文件系统的大小。详情请查看以下解决方案:

  5. 通过检查设备名称、大小等,验证 /etc/sysconfig/container-storage-setup 文件是否已为新磁盘正确配置。
  6. 运行 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
  7. 启动 Docker 服务:

    # systemctl start docker
    # vgs
      VG         #PV #LV #SN Attr   VSize  VFree
      docker_vol   2   1   0 wz--n- 64.99g <55.00g
  8. 恢复 pod 定义:

    # mv /etc/origin/node/pods-stopped/* /etc/origin/node/pods/
  9. 通过重启主机来重启节点服务:

    # systemctl restart atomic-openshift-node.service

7.1.3. 更改存储后端

随着服务和文件系统的进步,可能需要更改存储后端才能利用新功能。以下步骤提供了将设备映射器后端改为 overlay2 存储后端的示例。与传统设备映射器相比,overlay2 提供更高的速度和密度。

7.1.3.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

  2. 列出节点上的 pod,以验证是否已移除它们:

    $ oc adm manage-node ${NODE} --list-pods
    
    Listing matched pods on node: ose-app-node01.example.com
    
    NAME      READY     STATUS    RESTARTS   AGE

    如需有关撤离和排空 pod 或节点的更多信息,请参阅节点维护

  3. 如果没有容器目前在实例上运行的容器,停止 docker 服务:

    # systemctl stop docker
  4. 停止 atomic-openshift-node 服务:

    # systemctl stop atomic-openshift-node
  5. 验证卷组、逻辑卷名称和物理卷名称的名称:

    # 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
  6. 修改 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
  7. 设置存储:

    # docker-storage-setup
  8. 启动 docker

    # systemctl start docker
  9. 重启 atomic-openshift-node 服务:

    # systemctl restart atomic-openshift-node.service
  10. 通过将存储修改为使用 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
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.