ABOUT ME

삶의 기록장

Today
Yesterday
Total
  • [산대특] 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 네트워크 드라이버가 자동으로 연결시켜준다. 

     

     

연의 취업 도전기.