0부터 시작하는 Docker Swarm 공부 - Docker Swarm Mode Cluster 환경에서 Service 배포하기

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

1. Cluster 환경에서 컨테이너 배포하기 - nginx

p. 347

  • 단일 node 에서는 컨테이너 단위의 배포라면, compose 와 swarm 에서는 service ( 다수의 컨테이너 ) 단위로 배포한다
docker service create --name web --constraint node.role==worker --replicas 3 -p 80:80 nginx
  • 위와 같이 작성하자
    • 실행 node 는 role 이 worker 인 node 이다 ( constraint )
    • replicas 는 컨테이너를 생성할 개수이다
    • 각 node 의 80 번 Port 와 컨테이너의 80 번 Port 를 연결한다
    • 이는 manager 에서 컨테이너를 생성해서 전달하는 것이 아닌, worker 에게 컨테이너를 생성하라고 명령을 전달하여 worker 에서 컨테이너를 생성하는 것이다
    • 라운드 로빈 방식으로 worker 에게 명령을 전달한다

2. Service & Container list

Cluster 에 동작중인 Service 의 list 확인

docker service ls

  • docker service ls 를 통해 Service list 를 확인 가능하다

    • replicated 는 요청한 만큼 복제되어 배포되었다는 것을 의미한다
      • global 같은 경우 각 node 에 일괄적으로 생성하는 것이다
  • 요청한 컨테이너 개수도 확인 가능하다

Service 에 동작중인 Container list 확인

docker service ps 'service 이름'

  • 위와 같이 web Service 에서 동작중인 Container list 를 확인 가능하다. 각 Container 가 어떤 Node 에서 동작중인지도 확인 가능하다

    • Container 의 이름은 Service 이름 뒤에 번호가 붙여서 지정된다
  • Shutdown 된 Container 는 Node 에 Container 를 배포하는 과정에서 Image 가 없어서 Image 를 Pull 받는 과정에서 Container 생성을 계속 시도하다가 reject ( 실패 ) 당한 Container 이다. 뒤에 STATE 를 확인하면, Rejected 된 것을 확인할 수 있다

    컨테이너가 생성되지 않는 이유

    1. 이미지가 다운되지 않은 상태에서 생성하려고 할 때
    2. 이미지 다운을 위한 인증 정보가 없을 때
    • 자원 사용의 불균형이 발생할 수 있다. 즉, 한 대의 노드에서 여러 컨테이너가 동작하고, 다른 노드들에서는 컨테이너 생성이 되지 않는 문제가 발생할 수 있다

만약, node 에서 컨테이너 생성이 인증 정보와 같은 문제로 계속 reject 된다면, 생성이 가능한 다른 node 에서 컨테이너를 전부 생성한다

  • 각 노드에 저장소 접근을 위한 인증 정보가 config.json 에 없다면, 이를 해결하기 위해
    1. manager 에서 로그인을 하고, config.json 정보를 일일이 각 노드의 config.json 에 붙여넣기 한다
    2. manager 에서 로그인을 하고, config.json 정보를 docker service create 시 넘겨준다
      • 이때, --with-registry-auth 옵션을 사용하면 된다

  • 컨테이너 배포를 확인하기 위해 nginx 에 접속해보자. 101~103 모두 접속된다

3. Service Scale 조정하기

Scale 줄이기

docker service scale web=1

  • 위 명령어를 통해 web Service 의 Scale 을 1 로 조정하자
  • 한 개의 컨테이너를 제외하고, 나머지는 모두 Shutdown 되었다
  • 허나, overlay 환경이기에 어느 Node 에 접속하더라도 해당 컨테이너에 접속이 가능하다

Scale 늘리기 & Port 공유

docker service scale web=4

  • Scale 을 4 개로 늘리자
  • worker1 에서 2 개가 실행중이다. 허나, Port 는 하나인데 어떻게 돌아가는 것일까? 이는 한 개의 Port 를 공유해서 2 개의 컨테이너가 동작하는 것이다

4. Service 삭제

docker service rm web

  • 동작중인 서비스를 삭제하자
    • Service 를 삭제하면, Container 들도 같이 삭제된다
profile
멋진 엔지니어가 될 때까지

0개의 댓글