일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- gcc regex
- linux시간으로 변경
- 정규식 컴파일
- CentOS7
- grafana dashboard
- gcc 업데이트
- centos pyhon 설치
- g++ 업데이트
- snmp test
- regex_search
- c3 축 가리기
- python popen
- 1697
- semanage
- selinux port 등록
- c3 step graph
- c3 second
- InfluxDB
- c3 초
- c++ 정규식
- 정규식 문자열 출력
- 정규식 활용
- c3 축 없애기
- python os
- python subprocess
- subporcess path
- snmp
- influxdb 설치
- telegraf
- 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
Docker Swarm을 이용한 쉽고 빠른 분산 서버 관리
도커 스웜은 오케스트레이션 툴은 관리가 어렵고 사용하기 복잡하다는 편견을 완전히 바꿔놓았습니다. 구축 비용이 거의 들지 않고 관리 또한 쉬우며 다양한 기능을 쉽게 제공하고 가볍게 사용
subicura.com
github.com/charypar/swarm-dashboard
charypar/swarm-dashboard
A simple monitoring dashboard for Docker in Swarm Mode. - charypar/swarm-dashboard
github.com
[Docker Registry] Docker Image를 활용한 Local Registry 구축
이번 포스팅에서는 간단하게 Docker Registry를 구축하는 방법에 대해 살펴보겠습니다. 지난 여러번의 포스팅을 통해 Nexus를 활용한 Docker Private Registry를 구축하는 과정에 대해 살펴보았는데요. 사실
waspro.tistory.com
'오케스트레이션' 카테고리의 다른 글
[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 |