본문으로 바로가기

Docker devicemapper 사용 시 direct-lvm 설정

category Back-end 2019.03.14 00:30

Docker에서 Image를 기반으로 Container를 생성하면, 베이스가 되는 Image는 읽기 가능한 Image layer로 구성되고 각 Container 별로 읽기/쓰기가 가능한 Container layer가 추가 됨

정확히는 Read/Only인 image layer에 Read/Write인 Container layer를 추가해서 파일시스템으로 사용되는 것이나 자세한 내용은 여기선 다루지 않음

자세한 내용은 다음 페이지 참고

Docker overviewStorage driver

이러한 Layer들을 관리하기 위해서 Storage Driver가 사용 됨


CentOS 6.5 기준으로 Docker를 설치하면 storage driver를 devicemapper로 사용하게 된다.

리눅스 배포판 별 권장 설정이 각각 다름으로 다음 페이지를 참고해서 권장 사항으로 변경

https://docs.docker.com/storage/storagedriver/select-storage-driver/

devicemapper 를 사용할 때 loop-lvm과 direct-lvm 두가지 모드 중 하나를 설정 가능함

기본 설정은 loop-lvm으로 테스트 환경에서만 권장되기 때문에 운영환경에서는 direct-lvm을 설정해야 됨

loop-lvm는 loop device를 이용하는 환경으로 쉽게 말하면 기존 파일 시스템의 파일을 block device처럼 사용한다고 생각하면 됨

Docker guide 문서에 loopback device로 언급되어 있으나 loop device가 옳은 표현이라고 함

https://en.wikipedia.org/wiki/Loop_device

direct-lvm은 실제 block device를 이용해서 환경 구성

 

사전 준비

  • block device 추가 및 파티션 생성

lvm2 버전 제약이 있다고 본 것 같으나 확실치 않음

설정하는 시스템의 lvm2 버전은 2.02.143 이며, 이전 버전을 사용중이면 업데이트 후에 진행

sudo yum update lvm2

1. Docker 종료

service docker stop

  • 한번이라도 docker daemon을 실행시킨적이 있으면 기존 docker 폴더를 백업 후 작업 진행

mkdir /var/lib/docker.bk $ mv /var/lib/docker/* /var/lib/docker.bk

2. 물리 볼륨 생성

sudo pvcreate /dev/vdc1

실제 block device 장치명을 지정해야 됨

3. 볼륨 그룹 생성

sudo vgcreate docker /dev/vdc1

4. 논리 볼륨 생성

lvcreate --wipesignatures y -n thinpool docker -l 95%VG

lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG

5. thinpool 생성

sudo lvconvert -y --zero n -c 512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta

6. thinpool에 profile 적용(자동 확장)

vi /etc/lvm/profile/docker-thinpool.profile

1 2 3 4 activation { thin_pool_autoextend_threshold=80 thin_pool_autoextend_percent=20 }

lvchange --metadataprofile docker-thinpool docker/thinpool

7. thinpool 모니터링 활성화

lvs -o+seg_monitor

모니터링 활성화 단계라고 나와 있으나 실제 명령어는 논리 볼륨 정보를 확인하고 있음

활성화를 확인하는 단계인것 같음

vi /etc/sysconfig/docker

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # /etc/sysconfig/docker # # Other arguments to pass to the docker daemon process # These will be parsed by the sysv initscript and appended # to the arguments list passed to docker -d other_args="--storage-driver devicemapper --storage-opt dm.thinpooldev=/dev/mapper/docker-thinpool" DOCKER_CERT_PATH=/etc/docker # Resolves: rhbz#1176302 (docker issue #407) DOCKER_NOWARN_KERNEL_VERSION=1 # Location used for temporary files, such as those created by # # docker load and build operations. Default is /var/lib/docker/tmp # # Can be overriden by setting the following environment variable. # # DOCKER_TMPDIR=/var/tmp

docker storage 옵션은 /etc/sysconfig/docker-storage 파일에 설정하도록 되어있으나 여기에 설정하면 적용되지 않았음

8. Docker 실행

service docker start

설정 확인

docker info

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Containers: 3 Images: 45 Storage Driver: devicemapper Pool Name: docker-thinpool Pool Blocksize: 524.3 kB Backing Filesystem: extfs Data file: Metadata file: Data Space Used: 2.149 GB Data Space Total: 51 GB Data Space Available: 48.85 GB Metadata Space Used: 1.184 MB Metadata Space Total: 532.7 MB Metadata Space Available: 531.5 MB Udev Sync Supported: true Deferred Removal Enabled: false Library Version: 1.02.117-RHEL6 (2016-12-13) Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 2.6.32-431.el6.x86_64 Operating System: <unknown> CPUs: 2 Total Memory: 3.743 GiB Name: host-name ID: 33DM:27EF:3OEL:SRHD:6ANY:6JTN:5DGJ:PFB7:BX4B:Z3FT:N27C:6RRU

 

9. 백업 파일 삭제

rm -rf /var/lib/docker.bk



댓글을 달아 주세요

대마도사 블로그
블로그 이미지 대마도사 님의 블로그
MENU
VISITOR 오늘0 / 전체11,179