検索

第7章 Docker タスク

download PDF

OpenShift Container Platform はコンテナーエンジン (CRI-O または Docker) を使用して、任意の数のコンテナーで作成される Pod でアプリケーションを実行します。

クラスター管理者は、OpenShift Container Platform インストールの各種の要素を効率的に実行するために、コンテナーエンジンに追加の設定を加える必要がある場合があります。

7.1. コンテナーストレージの拡張

利用可能なストレージの容量を増やすことにより、停止が発生しない継続的なデプロイメントが可能になります。これを実行するには、適切なサイズの空き容量を含む空きのパーティションが利用可能でなければなりません。

7.1.1. ノードの退避

手順

  1. マスターインスタンスからか、またはクラスター管理者として、ノードからの 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. ノードごとに、これまでの 2 つの手順を繰り返します。

Pod またはノードの退避またはドレイン (解放) についての詳細は、ノードの保守 を参照してください。

7.1.2. ストレージの拡張

Docker ストレージは、新規ディスクを割り当てるか、または既存ディスクを拡張するかの 2 つの方法で拡張できます。

新規ディスクによるストレージの拡張

前提条件
  • 新規ディスクは、追加のストレージを必要とする既存のインスタンスで利用可能でなければなりません。以下の手順では、/etc/sysconfig/docker-storage-setup ファイルに示されているように、元のディスクに /dev/xvdb というラベルが付けられ、新規ディスクには /dev/xvdd というラベルが付けられています。

    # vi /etc/sysconfig/docker-storage-setup
    DEVS="/dev/xvdb /dev/xvdd"
    注記

    プロセスは基礎となる OpenShift Container Platform インフラストラクチャーによって異なります。

手順
  1. docker を停止します。

    # systemctl stop docker
  2. etcd 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. thin pool の設定では、以下の出力が表示され、次のステップに進むことができます。

      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 を受け入れられるようにノードをスケジュール可能な状態にします。

    クラスター管理者として、マスターインスタンスから以下を実行します。

    $ 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 (Logical Volume Manager) を使用している場合:

    • クラウドプロバイダーを使用している場合は、ディスクの割り当てを解除し、ディスクを破棄してから新規のより大きなディスクを作成し、これをインスタンスに割り当てることができます。
    • クラウド以外の環境の場合、ディスクおよびファイルシステムのサイズは変更することができます。詳細については、以下のソリューションを参照してください。

  5. デバイス名、サイズなどを確認して、/etc/sysconfig/docker-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. マスターインスタンスからか、またはクラスター管理者として、ノードからの 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 サービスは /var を extfs の STORAGE_DRIVER と共に使用しようとします。ただし、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 を受け入れられるようにノードをスケジュール可能にします。

    マスターインスタンスから、またはクラスター管理者として以下を実行します。

    $ 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

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.