일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
26 | 27 | 28 | 29 | 30 | 31 |
- 정규식 문자열 출력
- snmp test
- influxdb 설치
- InfluxDB
- python subprocess
- 정규식 활용
- linux시간으로 변경
- gcc regex
- gcc 업데이트
- grafana dashboard
- regex_search
- c3 second
- CentOS7
- 정규식 컴파일
- c3 축 가리기
- c++ 정규식
- c3 축 없애기
- 백준
- python os
- centos pyhon 설치
- c3 step graph
- selinux port 등록
- snmp
- subporcess path
- g++ 업데이트
- telegraf
- semanage
- python popen
- 1697
- c3 초
- Today
- Total
리셋 되지 말자
[docker swarm] swarm을 이용한 클러스터 환경 구성하기 본문
서비스 목록
manager : docker swarm 클러스터의 manager 노드
worker01, worker02, worker03 : docker swarm의 worker노드들 (3개)
registry : docker private registry 서비스
registry-web : docker private registry에 어떤 이미지가 올라가 있는지 web UI로 확인하는 서비스
dashboard : docker swarm 클러스터의 노드들을 web UI로 확인할 수 있는 서비스
준비사항
$ docker -v
Docker version 20.10.5, build 55c4c88
docker가 설치되어 있어야 한다.
$ docker-compose -v
docker-compose version 1.28.5, build c4eb3a1f
docker-compose도 설치되어 있어야 한다.
서비스 파일 작성
- docker-compose.yml
$ cat docker-compose.yml
version: "3"
services:
registry-web:
container_name: registry-web
image: hyper/docker-registry-web
ports:
- 8080:8080
volumes:
- "./config.yml:/conf/config.yml:ro"
registry:
container_name: registry
image: registry:2.6
ports:
- 5000:5000
volumes:
- "./registry-data:/var/lib/registry"
manager:
container_name: manager
image: docker:18.05.0-ce-dind
privileged: true
tty: true
ports:
- 8000:80
- 9000:9000
- 8081:8081
- 4567:4567
depends_on:
- registry
expose:
- 3375
command: "--insecure-registry registry:5000"
volumes:
- "./stack:/stack"
- "./dashboard:/dashboard"
worker01:
container_name: worker01
image: docker:18.05.0-ce-dind
privileged: true
tty: true
depends_on:
- manager
- registry
expose:
- 7946
- 7946/udp
- 4789/udp
command: "--insecure-registry registry:5000"
worker02:
container_name: worker02
image: docker:18.05.0-ce-dind
privileged: true
tty: true
depends_on:
- manager
- registry
expose:
- 7946
- 7946/udp
- 4789/udp
command: "--insecure-registry registry:5000"
worker03:
container_name: worker03
image: docker:18.05.0-ce-dind
privileged: true
tty: true
depends_on:
- manager
- registry
expose:
- 7946
- 7946/udp
- 4789/udp
command: "--insecure-registry registry:5000"
manager와 worker 노드들은 dind(docker in docker) 이미지로 생성한다. dind는 간단히 말하자면 docker 컨테이너 안에서 docker cli를 사용하는 것이다.
registry와 registry를 web UI로 보여주는 서비스들을 추가한다. registry-web은 8080 포트로 접속할 것이다.
- config.yml
$ cat config.yml
registry:
# 기존에 설치한 docker private registry
url: http://registry:5000/v2
# Docker registry name
name: localhost:5000
# docker 권한 부여
readonly: false
auth:
eabled: false
registry-web에 사용될 yml 파일이다. private registry가 사용하는 5000번 포트로 url을 설정한다.
- dashbaord.yml
$ cat dashboard/dashboard.yml
version: "3"
services:
dashboard:
image: charypar/swarm-dashboard
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
ports:
- 8081:8081
environment:
PORT: 8081
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
docker-compose.yml 파일을 보면 manager 노드에 /dashboard 디렉토리를 마운트 해주었는데 즉, docker-compose.yml이 있는 곳에 dashboard라는 디렉토리를 만들고, 그 안에 dashboard.yml을 작성하였다.
dashboard 서비스는 manager 노드에만 생성되고, 브라우저에서 8081포트로 접속한다.
swarm-dashboard에 대한 github 주소는 아래와 같다. 개발자 분에게 감사합니다.
github.com/charypar/swarm-dashboard
- 디렉토리 상태
$ ls
config.yml dashboard docker-compose.yml
dashboard만 디렉토리이고, dashboard 디렉토리 안에 dashboard.yml 파일이 있다.
docker compose 실행
- docker-compose up -d
$ docker-compose up -d
Creating network "swarm_default" with the default driver
Creating registry ... done
Creating registry-web ... done
Creating manager ... done
Creating worker01 ... done
Creating worker03 ... done
Creating worker02 ... done
-d 옵션은 백그라운드로 시작하는 뜻이다.
- 디렉토리 재확인
$ ls
config.yml dashboard docker-compose.yml registry-data stack
docker-compose up을 실행하면 위처럼 registry-data와 stack 디렉토리가 생기는걸 확인할 수 있다. registry-data 디렉토리를 registry 서비스의 /var/lib/registry 디렉토리와 마운트 시켜놓으면, registry 서비스가 중지되어도 데이터가 그대로 유지된다.
- localhost:8080 접속
registry-web에 접속하면, 현재 registry 상태를 web UI를 통해 확인할 수 있다.
private registry에 이미지 업로드
docker swarm service에 사용할 이미지를 다운로드 받고, 직접 private registry에 이미지를 업로드 해본다.
- docker pull
$ docker image pull subicura/whoami:1
위의 이미지를 받는다. 브라우저로 접속하면 hostname을 출력해주는 docker 이미지이다.
- docker tag
$ docker image tag subicura/whoami:1 localhost:5000/example/whoami:latest
private registry의 포트가 5000이므로, 위와같이 docker image tag 명령어를 통해 이미지 이름과 tag 정보를 변경한다. 이미지의 첫 항목이 image pull 진행 시, 이미지가 올라가는 도메인 정보이다.
- docker image push
$ docker image push localhost:5000/example/whoami:latest
The push refers to repository [localhost:5000/example/whoami]
6304fb0017b0: Pushed
bcd68c905028: Pushed
5f4ed2a4afd7: Pushed
1fad3fef68ba: Pushed
42e63b663df9: Pushed
71d7318763a9: Pushed
7d7e183520a5: Pushed
7cbcbac42c44: Pushed
latest: digest: sha256:6239cd2462f9dd7a0317db107724a101deca600d30e39465515ba632e0982f4a size: 1989
이미지가 푸쉬되는걸 확인할 수 있다.
- registry web 확인
이미지가 올라간것을 확인할 수 있다. 이제 docker swarm 노드에서 이미지를 다운받아 사용할 수 있다.
docker swarm 구성하기
- docker swarm init
$ docker exec -it manager docker swarm init
Swarm initialized: current node (5ywj85cw3tdz8ioe71v1xlyzn) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1gxj86agzmecefcd6mwjproa96hw7e3gu0plsdhuw9110fuc1r-7q4434lsegri8la2n9qgggsrd 172.22.0.4:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
manager 컨테이너에서 docker swarm init 명령어를 입력한다. 위처럼 docker swarm join 부분 전체를 복사한다. worker 노드들에서 전부 입력하면 된다.
- docker swarm join
$ docker exec -it worker01 docker swarm join --token SWMTKN-1-1gxj86agzmecefcd6mwjproa96hw7e3gu0plsdhuw9110fuc1r-7q4434lsegri8la2n9qgggsrd 172.22.0.4:2377
This node joined a swarm as a worker.
$ docker exec -it worker02 docker swarm join --token SWMTKN-1-1gxj86agzmecefcd6mwjproa96hw7e3gu0plsdhuw9110fuc1r-7q4434lsegri8la2n9qgggsrd 172.22.0.4:2377
This node joined a swarm as a worker.
$ docker exec -it worker03 docker swarm join --token SWMTKN-1-1gxj86agzmecefcd6mwjproa96hw7e3gu0plsdhuw9110fuc1r-7q4434lsegri8la2n9qgggsrd 172.22.0.4:2377
This node joined a swarm as a worker.
Swarm dashboard 서비스 실행
- swarm dashboard stack deploy
$ docker exec -it manager docker stack deploy -c /dashboard/dashboard.yml dashboard
Creating network dashboard_default
Creating service dashboard_dashboard
컨테이너에 마운트해둔 /dashboard/dashboard.yml을 사용해 dashboard서비스를 실행한다.
- dashboard 접속
localhost:8081로 접속하면, 위처럼 현재 Swarm cluster의 상태를 확인할 수 있다. 현재 manager 노드에 dashboard 서비스 한개만 올라가 있는 상태이다.
Swarm 클러스터에 서비스 등록
private registry에 올려놨던 image를 manager 노드에서 pull 받아서 swarm 클러스에서 서비스로 등록해본다.
- docker pull image
$ docker exec -it manager docker pull registry:5000/example/whoami:latest
latest: Pulling from example/whoami
d1426d011624: Pull complete
1659ef4c811e: Pull complete
47bd5f3578fc: Pull complete
5e03057c6ddf: Pull complete
d58f420d5777: Pull complete
d65d30e11c7f: Pull complete
c9d3f35ab05f: Pull complete
fb24e6aeba3f: Pull complete
Digest: sha256:6239cd2462f9dd7a0317db107724a101deca600d30e39465515ba632e0982f4a
Status: Downloaded newer image for registry:5000/example/whoami:latest
- docker service create
$ docker exec -it manager docker service create --name whoami -p 4567:4567 registry:5000/example/whoami:latest
wkkg33d93qity2dustm8dkxvf
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
- docker service 확인
$ docker exec -it manager docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
isro3osqfsn5 dashboard_dashboard replicated 1/1 charypar/swarm-dashboard:latest *:8081->8081/tcp
wkkg33d93qit whoami replicated 1/1 registry:5000/example/whoami:latest *:4567->4567/tcp
dashboard 서비스와 whoami 서비스를 확인할 수 있다.
dashboard에서도 whoami 서비스 하나가 추가된 것을 확인할 수 있다.
- service scale 조절
$ docker exec -it manager docker service scale whoami=6
whoami scaled to 6
overall progress: 6 out of 6 tasks
1/6: running [==================================================>]
2/6: running [==================================================>]
3/6: running [==================================================>]
4/6: running [==================================================>]
5/6: running [==================================================>]
6/6: running [==================================================>]
verify: Service converged
docker service scale 명령어로 서비스의 스케일링을 간단하게 진행할 수 있다. whoami 서비스가 원래 1개였는데, 6개로 늘렸다.
dashboard에서도 whoami 서비스가 6개로 증가한 것을 확인할 수 있다.
curl test
$ curl localhost:4567
444593584a03
$ curl localhost:4567
fb1e399ac4ed
$ curl localhost:4567
a8948b879833
$ curl localhost:4567
f565b65a22ab
$ curl localhost:4567
7160d9d9e250
$ curl localhost:4567
d7c6861c57e0
$ curl localhost:4567
444593584a03
$ curl localhost:4567
fb1e399ac4ed
$ curl localhost:4567
a8948b879833
$ curl localhost:4567
f565b65a22ab
$ curl localhost:4567
7160d9d9e250
$ curl localhost:4567
d7c6861c57e0
노드들의 hostname이 적절히 분배되어 출력되는걸 확인할 수 있다. docker swarm의 경우 ingress 네트워크가 트래픽 분산을 자동으로 해준다.
수고하셨습니다아
참고한 사이트:
subicura.com/2017/02/25/container-orchestration-with-docker-swarm.html
github.com/charypar/swarm-dashboard
'오케스트레이션' 카테고리의 다른 글
[kubernetes] kubelet (0) | 2021.07.14 |
---|---|
[kubernetes] kubectl (0) | 2021.07.14 |
[kubernetes] 대시보드 설치 및 접속 (0) | 2021.03.25 |
[Docker Swarm] Docker machine, Docker Swarm 심화(?) (0) | 2021.03.25 |
[docker swarm] docker swarm에 node 제약 넣기 (0) | 2021.03.21 |