[Docker] Metadata Storage를 이용한 Docker용 볼륨 생성

0. RHEL의 경우 lvm2 Package추가

: Ubuntu -> lmv2

: suse -> lvm2

SLES11에서 /etc/sysconfig/lvm도 편집하고 LVM_ACTIVATED_ON_DISCOVERED을 "사용"으로 설정해야 합니다.

LVM_ACTIVATED_ON_DISCOVERED="enable"

 

1. Disk 추가.

disk 추가 후 fdisk로 디스크 인식 여부 확인합니다.

shell > fdisk -l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/xvda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: F27664E9-0E9F-434A-9AB6-62C730E0F0DF


#         Start          End    Size  Type            Name
1         2048         4095      1M  BIOS boot parti
2         4096     83886046     40G  Microsoft basic


Disk /dev/xvdf: 107.4 GB, 107374182400 bytes, 209715200 sectors -> 이부분이 새로 추가된 Disk
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

 

2. Disk를 physical volume으로 생성.

# pvcreate /dev/xvdf
Physical volume "/dev/sdc" successfully created

 

3. Pysical Volume을 2개의 Volume Group으로 생성.

shell > vgcreate docker-vg /dev/xvdf
Volume group "data-vg01" successfully created

 

4. Volume Group을 이용하여 Logical Volume을 만든다.

참고] Docker에서 Logical Volume을 만들때는 meta data용 volume과 user data용 volume 2개를 기본적으로 만듭니다.

meta volume size 계산법.

(Pool_LV_size[전체 LV사이즈] / Pool_LV_chunk_size * 64b)

Chunk size(Pool_LV_chunk_size)는 다음 페이지를 참고하면 됩니다. : https://linux.die.net/man/8/lvcreate

기본적으로 chunk size는 64k란다. 그러므로 바로 계산으로 들어간다. 작성자는 100G로 작업하려고 합니다

100G[107374182400] / 65536 * 64 = 104857600

104857600 / 1024 / 1024 = 100M

약 0.1% 정도 되는것 같습니다.

 

shell > lvcreate -n docker-poolmeta -L 100M docker-vg
shell > lvcreate -n docker-pool -l 100%FREE docker-vg

(L 옵션 사용시 소문자 대문자 주의해야 합니다!. 100%FREE 는 남은 용량을 모두 사용하겠다는 뜻이다.)

 

5. metadata storage로 속성 변경.

예시) lvconvert --type thin-pool --poolmetadata VolumeGroup/LogicalVolume VolumeGroup/LogicalVolume

shell > lvconvert --type thin-pool --poolmetadata docker-vg/docker-poolmeta docker-vg/docker-pool

옵션중에 --poolmetadata 이부분은 metadata용 Storage 이름을 입력해야 한다.

 

다음과 같은 메세지가 나오면 y 입력.

  Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data.
  WARNING: Converting logical volume docker-vg/docker-pool and docker-vg/docker-poolmeta to thin pool's data and metadata volumes with metadata wiping.
  THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert docker-vg/docker-pool and docker-vg/docker-poolmeta? [y/n]:

 

에러가 안떨어지면 성공한 것입니다. 하지만 거의 100% 다음과 같은 에러가 떨어질거라 예상해 봅니다

Volume group "docker-vg" has insufficient free space (0 extents): 25 required.

 

필요 extents는 용량에 따라 가변적입니다. 그래서 정확한 값은 에러를 봐야만 알수가 있습니다.

에러가 떨어지면 다음을 진행합니다.

 

참고로 위의 방법은 가능한 모든 용량을 사용하기 위함입니다.

만약 logical volume을 모두 사용하지 않다면 사용한 data volume size를 정하고 meta data volume을 0.1% 정도로 잡으면 됩니다.

 

 

 

6. 에러처리 및 모든 용량 이용방법(위에서 에러나지 않았다면 Skip)

Volume Group의 총 Extent size 확인.

# vgs -o +vg_free_count,vg_extent_count
  VG        #PV #LV #SN Attr   VSize    VFree Free #Ext
  docker-vg   1   2   0 wz--n- <100.00g    0     0 25599

 

Volume별 extent size 확인

# lvs -o +seg_size_pe
  LV              VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert SSize
  docker-pool     docker-vg -wi------- <99.90g                                                     25574
  docker-poolmeta docker-vg -wi------- 100.00m                                                        25

 

data volume size 정하기(Meta data volume 정하기)

[VolumeGroup의 Extent] - [필요 Free Extent size(위의 에러에서 나온 Extent size] - [meta data extent size]

25599 - 25 - 25 = 25549

25549가 docker pool data volume으로 사용될 크기입니다.

 

기존 logical volume 제거

예) lvremove VolumeGroup/LogicalVolume

shell > lvremove docker-vg/docker-pool

 

 

 

Docker용 Volume 새로 생성.

shell > lvcreate -n docker-pool -l 25549 docker-vg

 

다시 thin-pool type으로 Storage 변경을 시도합니다.

shell > lvconvert --type thin-pool --poolmetadata docker-vg/docker-poolmeta docker-vg/docker-pool

성공되는것을 확인해볼 수 있습니다.

 

 

7. 참고 사항.

meta data volume의 상태를 보고 싶다면 다음과 같이 하면 됩니다.

lvs -a -o +devices
혹은
lvdisplay -a

참고로 이 셋트로 묶여 있는 metadata volume이나 일반 volume을 삭제하면 전체가 날라가게 됩니다.

주의할것!!!

 

 

 

도움이 되셨다면 광고클릭 한번 부탁드립니다.※

'Infra > Docker' 카테고리의 다른 글

[Docker] Openshift의 Docker-storage-setup 에러  (0) 2020.04.26
[Docker] RHEL 7.x에 Docker CE 설치 방법  (0) 2020.04.26

Designed by JB FACTORY