7장. Docker 작업
OpenShift Container Platform에서는 컨테이너 엔진(CRI-O 또는 Docker)을 사용하여 여러 컨테이너로 구성된 포드에서 애플리케이션을 실행합니다.
클러스터 관리자가 OpenShift Container Platform 설치 요소를 효율적으로 실행하기 위해 때때로 컨테이너 엔진을 추가로 구성해야 할 수도 있습니다.
7.1. 컨테이너 스토리지 증가
사용 가능한 스토리지 양을 늘리면 중단 없이 계속 배포할 수 있습니다. 이렇게 하려면 적절한 양의 여유 용량이 포함된 여유 파티션을 사용할 수 있어야 합니다.
7.1.1. 노드 비우기
프로시저
마스터 인스턴스에서 또는 클러스터 관리자로서 노드에서 포드를 비우고 해당 노드에서 다른 포드의 스케줄링을 비활성화하십시오.
$ 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
명령을 실행하십시오.노드의 포드를 나열하여 포드가 제거되었는지 확인하십시오.
$ oc adm manage-node ${NODE} --list-pods Listing matched pods on node: ose-app-node01.example.com NAME READY STATUS RESTARTS AGE
- 각 노드에 대해 이전 두 단계를 반복하십시오.
포드 또는 노드 비우기 및 유출에 대한 자세한 내용은 노드 유지보수를 참조하십시오.
7.1.2. 스토리지 증가
Docker 스토리지는 두 가지 방법, 즉 새 디스크 연결 또는 기존 디스크 확장을 통해 늘릴 수 있습니다.
새로운 디스크로 스토리지 증가
전제 조건
스토리지가 더 필요한 기존 인스턴스에 새 디스크를 사용할 수 있어야 합니다. 다음 단계에서는 /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
포드 정의를 제거하고 호스트를 재부팅하여 노드 서비스를 중지하십시오.
# 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
스토리지 용량이 증가함에 따라 새로 들어오는 포드를 허용하도록 노드를 스케줄링할 수 있게 설정하십시오.
클러스터 관리자로 마스터 인스턴스에서 다음을 실행하십시오.
$ 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
포드 정의를 제거하여 노드 서비스를 중지하십시오.
# 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/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. 노드 비우기
마스터 인스턴스에서 또는 클러스터 관리자로서 노드에서 포드를 비우고 해당 노드에서 다른 포드의 스케줄링을 비활성화하십시오.
$ 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
명령을 실행하십시오.노드의 포드를 나열하여 포드가 제거되었는지 확인하십시오.
$ oc adm manage-node ${NODE} --list-pods Listing matched pods on node: ose-app-node01.example.com NAME READY STATUS RESTARTS AGE
포드 또는 노드 비우기 및 유출에 대한 자세한 내용은 노드 유지보수를 참조하십시오.
현재 인스턴스에서 실행 중인 컨테이너가 없으면
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
서비스에서 extfs의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
를 사용하도록 스토리지를 수정한 상태에서 들어오는 새 포드를 허용하도록 노드를 스케줄링 가능하게 설정하십시오.마스터 인스턴스에서 또는 클러스터 관리자로 다음을 수행하십시오.
$ 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