-
[산대특] Docker Swarm, Service, replica & global, rollback & update, config & secret, Network Pool, Ingress, Service 발견[산대특]클라우드기반 빅데이터 활용 정보 시스템보안과정/Cloud 2024. 11. 6. 19:46
1106
Docker Swarm 은 Manager Node 와 여러 대의 Worker Node 들을 클러스터로 만들어
=> 자원을 병렬로 확장
=> 컨테이너 발견
=> 작업 스케쥴러
=> 로드 밸런서
=> 고가용성 기능
을 간단하게 처리해준다.
Docker Swarm 에서 컨테이너는 Task 라고 부른다.
Docker Swarm 모드 구성은
Manager Node 에서
docker swarm init --advertise-addr 192.168.100.100(Manager_node)
해서 Manager Node를 노출시킨다. 후에 이 주소로 다른 Worker 노드들을 접속하게 한다.
그럼
docker swarm join ~~ 명령와 함께 토큰도 같이 생성된다.
이 명령어를 그대로 복사하여, Docker 가 설치된 Worker Node 에 붙여주면 조인된다.
다 하고 Manager Node 로 와서 docker node ls 하면 Manager 와 함께 가입된 Worker 들이 보인다.
하나의 Task 혹은 Worker가 고장나면 자동으로 다른 Worker 로 복구한다.
조인 해제, Worker 삭제는
삭제할 Worker 에서
docker swarm leave --force
Manager 에서는
docker node rm swarm-node01(이름)
docker node ls 으로 확인
Manager Node 추가는
기존 Manager 에서 docker swarm join-token manager 하여 명령어 복사
기존 Worker 에서 docker swarm join --token ~(키) 해서 조인
토큰 변경
docker swarm join-token --rotate manager
Manager Node 삭제도 가능하다만, Swarm 에 대한 정보가 모두 삭제되니 주의
Worker -> Manager
docker node promote swarm-worker01
Manager -> Worker
docker node demote swarm-worker01
Service
Swarm 모드는 Service 로 Task를 관리Service
= 같은 이미지에서 생성된 Task들의 집합Service 내의 모든 Task에 같은 명령어 수행 가능
Service 의 옵션에는 replica 와 global 이 있다.
replica :생성할 Task 개수 지정 가능
docker service create --name myweb2 --replicas 3 nginx
재부팅 없이 다 켜진 상태에서 자유롭게 개수 조정 가능 = scaledocker service scale Tack_name=3
global :
replica와 다른 점은 모든 Worker 노드에 반드시 하나씩 생성하게 함+ 노드 수를 지정하지 않으면 사용 가능한 모든 Node 에 하나씩 다 생성
=> 얘는 Swarm 서비스를 중앙에서 각가 모니터링 할 때 요긴
docker service create --name global_web --mode global nginx
rollback & update
docker service update --image nginx:latest
해서 이미지를 업데이트 하면 docker swarm 모드에서는 자동으로 Task 들이 업데이트 된다.
그리고 이를 되돌리는게 rollback
docker service rollback myweb2
하면 이전 버전으로 돌아간다.Config & Secret
Config
docker exec -it mysql-1 /bin/sh
/ # cat /etc/docker/registry/config.yml
config 내용을 복사하고yml 파일로 해당 내용을 저장.
이 파일로 registry-config 생성
# docker config create registry-config config.yml
# docker config inspect registry-config 하여 내용을 보면
=> 암호가 노출되지 않는다.
하지만 data 부분을 복사하여
# echo "data부분 붙여넣기" | base64 -d
하면 해당 내용이 보인다.
# docker service create --name yml_registry -p 5000:5000 --config source=registry-config,target=/etc/docker/registry/config.yml registry:2.6
이렇게 도커 서비스를 만들 수도 있다.
만든 서비스에 exec 하여 config.yml 내용을 보면 아까 그 내용이다.
Secret
# echo rootoor | docker secret create mysql_root_passwd -
secret 할 내용 생성# echo rootoor | docker secret create mysql_passwd -
# docker secret ls 으로 확인 가능
# docker secret inspect mysql_root_passwd 해도 내용을 보이지 않는다.
# docker service create --name mysql_sec3 --replicas 1 --secret source=mysql_root_passwd,target=mysql_root_password --secret source=mysql_passwd,target=mysql_password -e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password" -e MYSQL_PASSWORD_FILE="/run/secrets/mysql_password" -e MYSQL_DATABASE="wordpress" mysql:5.7
# docker exec (dockerps하여 알아낸)컨테이너ID cat /run/secrets/mysql_root_password
하면 그제서야 보인다.
Network Pool
Swarm 모드에서 실행한 여러 Task 들이 각각의 서버 서비스로 묶일 Network Pool 이 필요
Ingress
ingress 네트워크는 Docker Swarm 모드에서 사용되는 특수한 네트워크 유형,
클러스터 내 서비스들 간의 통신을 지원하는 공유 네트워크 => 스웜 모드를 사용할 때 유효
매니저와 스웜 클러스터에 등록된 모든 모드는 Ingress
Ingress 는 overlay 드라이버를 사용
=> Overlay 네트워크는 여러 도커 데몬에 존재하는 컨테이너 간 통신을 가능케함 [IP로 통신]
Ingress 는 외부에서 Docker Swarm Task 로 들어갈 수 있도록 해준다.
Service 발견!
Service 발견이란
Service 1 에서 실행중인 Nginx Task 를 3 -> 5 했을 때
동일한 Task 를 실행중인 Service 2 가 Service 1에 있던 3개의 Task가
5개로 늘어난 것을 찾은 것을 말한다.
Service 1은 새로 생긴 2개의 Task 주소를 알지 못해도,
Service명 으로 접속하면 Overlay 네트워크 드라이버가 자동으로 연결시켜준다.
'[산대특]클라우드기반 빅데이터 활용 정보 시스템보안과정 > Cloud' 카테고리의 다른 글