第7章 Docker タスク
OpenShift Container Platform はコンテナーエンジン (CRI-O または Docker) を使用して、任意の数のコンテナーで作成される Pod でアプリケーションを実行します。
クラスター管理者は、OpenShift Container Platform インストールの各種の要素を効率的に実行するために、コンテナーエンジンに追加の設定を加える必要がある場合があります。
7.1. コンテナーストレージの拡張
利用可能なストレージの容量を増やすことにより、停止が発生しない継続的なデプロイメントが可能になります。これを実行するには、適切なサイズの空き容量を含む空きのパーティションが利用可能でなければなりません。
7.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
.ノード上の Pod を一覧表示し、それらが削除されていることを確認します。
$ oc adm manage-node ${NODE} --list-pods Listing matched pods on node: ose-app-node01.example.com NAME READY STATUS RESTARTS AGE
- ノードごとに、これまでの 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 インフラストラクチャーによって異なります。
手順
docker
を停止します。# systemctl stop docker
etcd Pod 定義を削除し、ホストを再起動してノードサービスを停止します。
# mkdir -p /etc/origin/node/pods-stopped # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
docker-storage-setup
コマンドを実行してコンテナーストレージに関連付けられたボリュームグループおよび論理ボリュームを拡張します。# docker-storage-setup
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
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 を受け入れられるようにノードをスケジュール可能な状態にします。
クラスター管理者として、マスターインスタンスから以下を実行します。
$ 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/
既存ディスクを必要に応じてサイズ変更します。これは環境に応じて異なります。
LVM (Logical Volume Manager) を使用している場合:
# lvremove /dev/docker_vg/docker/lv
# vgremove docker_vg
# pvremove /dev/<my_previous_disk_device>
- クラウドプロバイダーを使用している場合は、ディスクの割り当てを解除し、ディスクを破棄してから新規のより大きなディスクを作成し、これをインスタンスに割り当てることができます。
クラウド以外の環境の場合、ディスクおよびファイルシステムのサイズは変更することができます。詳細については、以下のソリューションを参照してください。
- デバイス名、サイズなどを確認して、/etc/sysconfig/docker-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. ノードの退避
マスターインスタンスからか、またはクラスター管理者として、ノードからの 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
サービスは/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
ストレージをセットアップします。
# docker-storage-setup
docker
を起動します。# systemctl start docker
atomic-openshift-node
サービスを再起動します。# systemctl restart atomic-openshift-node.service
ストレージが
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