0부터 시작하는 Docker Swarm 공부 - Volume & Bind

Jaehong Lee·2022년 8월 25일
0
post-thumbnail

1. Host Volume Mount 의 문제

  • 우리는 Docker contianer run -v 를 통해 Volume 을 지정하였다
docker container run -v testvolume:/var/lib # Volume Mount ( IscsI )
docker container run -v /test:/root # Directory Binding ( NFS )

이번엔 Swarm Cluster 환경에서 Volume 을 사용해보자

허나, 이 방식은 영구 볼륨이 아니다. 우리는 지금 외부 Storage 의 Volume 을 사용하는 것이 아닌, Host 의 Volume 을 사용하는 것이므로, Node 에 문제가 생기면 Volume 에 문제가 생기기에 영구 볼륨이 아니다

Host 의 Volume 을 사용할 경우 생기는 문제

  1. Node 자체 ( Host ) 에 문제가 있을 경우 접근 불가
  2. Scale 의 축소 / 확장 등으로 인하여 신규 컨테이너가 기존 볼륨과 연결되지 않는 문제
    • 컨테이너를 다른 Node 로 옮기면, 기존 Data 를 사용할 수 없다. Host 의 Volume 과 Mount 되기 때문에 다른 Node 에는 해당 Volume 의 Data 가 없기 때문이다
  3. 각 Host 별로 별도의 볼륨을 사용하므로 데이터의 동기화가 되지 않아, 각 볼륨 별로 별도의 데이터베이스가 동작하는 문제

최종적으로 local 볼륨은 좋은 선택이 아니다! 외부에 있는 스토리지를 사용해야 한다

2. Volume Mount & Bind

  • 서비스 생성시 볼륨 생성을 동시에 진행할 수 있다. 단, 기존 컨테이너에서 -v 옵션을 이용하는 방법의 경우 volume 인지 nfs 인지 구분이 어려울 수 있으므로, 서비스에서는 이를 명확히 구분해주어야 한다

Volume Mount

docker service create --name testvol1 --mount type=volume,source=vol1,target=/root --replicas 1 --constraint node.role==manager nginx
  • type 은 volume 으로 설정하고, Host에 vol1 볼륨을 생성하여 컨테이너의 /root 디렉터리와 Mount 시켜서 컨테이너를 생성하였다
  • Service 를 배포해주자
  • 컨테이너의 디스크 정보를 확인하자. 클러스터 환경이기에 공유되는 자원인 overlay 를 확인할 수 있다. 또한, Volume Mount 를 했으므로 Host 의 Volume 이 /dev/sda5 와 같은 디스크 형태로 /root 와 Mount 된 것을 확인할 수 있다
    • overlay 는 Node 들의 공유 자원이다. 이는 Cluster 환경에서 자동으로 Mount 되어 있다
    • /dev/sda5 에 Mount 된 볼륨은 공유 자원이 아닌, Host 에 종속된 볼륨이다. 이는 공유 자원이 아니다
    • 만약, manager 에서 Volume 을 생성하여, 서비스 배포시 worker 들에게 Volume Mount 명령을 내리면, worker 들은 해당 명령을 받고, 자신에게 해당 Volume 이 없는 것을 확인하고, 자체 Host 에 Volume 을 생성하여 Mount 한다. 즉, manager 만 기존에 생성한 Volume 과 Mount 되고, worker 들은 동일한 이름의 Volume 을 생성하여 Mount 하는 것이다

Bind

mkdir testvol1
docker service create --name testvol1 --mount type=bind,source=/home/rapa/testvol1,target=/root --replicas 1 --constraint node.role==manager nginx
  • type 을 bind 로 하여 디렉터리와 디렉터리가 연결되게 해보자
  • 디렉터리를 하나 만들고, Service 를 배포해주자
  • Host 에서 디렉터리 안에 파일을 하나 만들어주자
  • 컨테이너의 /root 디렉터리 안을 살펴보면 파일을 확인할 수 있다
profile
멋진 엔지니어가 될 때까지

0개의 댓글