Docker의 swarm 모드로 분류 환경 만들기

8794 단어 Dockerswarm
두 번째 멀티헤드 Advent Calendar 2016 9일째 보도다.
이것은 우리 advent 달력에서 몇 안 되는 현역 직원들이 두려워하는 것이다.평소 니코니코 라이브 방송 주변에서 웹팩과 타입 스크립트를 접하는 프런트엔드 엔지니어를 주로 한다.
요즘 신경 쓰이는 Docker와 swarm을 이용해서 분류와 감시를 해보고 싶어요.

원래 스웩이란


Docker 버전은 1.12에 추가된 Docker Engine에 내장된 클러스터 관리 기능입니다.
예전부터 있었던 Docker Swarm와는 달리 때로는swarm mode라고 불린다.자세한 내용은 공식 페이지를 보십시오.

이번에 하고 싶은 거.

  • 웹 서버, API 서버를 Docker의 서비스로 구축
  • 이 로그를 수집하여 좋은 디스플레이 환경을 만듭니다
  • 서버 준비


    Docker의 v1.12 64-bit Linux의 커널 버전 3.10 이상이 필요합니다.따라서 이번 서버 OS는 Centos7 시스템을 선택했습니다.
    마침 Conoha VPS에 64비트 Centos7.2의 템플릿을 준비하여 사용했습니다.
    이번에는 관리용 매니저 실례 1대, 스태프 실례 2대를 준비했다.준비 단계의 Ansible Playbook

    이번에는 사용하지 않고 Conoha VPS개인 네트워크 기능가 있어 편리합니다.실제로 무언가를 만들어 책에 활용할 때는 반드시 그것을 이용해야 한다.

    클러스터 준비


    Docker Hub에 이미지 복사


    이동할 이미지를 Docker Hub에 미리 업로드합니다.개인 물품 사용Google Container Registry 등도 괜찮다.이번엔 테스트용이라 간단히 API 서버네트워크 서버 두 가지 인상을 Docker Hub에 올렸다.

    Docker의 swarm 설정


    매니저 설정


    swarm의 관리자(관리 실례) 서버를 미리 결정하고 이 실례에 다음 명령을 입력하세요.
    docker swarm init --advertise-addr XXX.XXX.XXX.XXX
    
    여기 표시된 영패는 나중에 사용하기 때문에 복제할 것입니다.
    또한 네트워크 인스턴스와 Api 인스턴스 간의 통신을 위해 네트워크를 구축합니다.이번에 서비스용 네트워크와 상태 감시용 네트워크 두 개를 제작했다.다른 시스템에는 영향을 주지 않도록 서브넷을 설정합니다.
    docker network create --driver overlay --subnet 10.0.2.0/24 service
    docker network create --driver overlay --subnet 10.0.3.0/24 monitoring
    

    설치 직원


    스태프도 설치하고.아까 관리자 설정에 표시된 영패 사용하기
    docker swarm join --token YYYYYYY XX.XX.XX.XX:2377
    
    복귀 관리자는 다음 명령을 통해 그룹에 성공적으로 삽입되었는지 확인할 수 있습니다
    docker node ls
    

    Api, 웹 서비스 시작

    docker service create --replicas 1 --env NODE_ENV=production --env PORT=80 --name api --network service --constraint 'node.role == worker' viviljp/test-api
    docker service create --replicas 1 --env NODE_ENV=production --env PORT=3000 --publish 3000:3000  --name web --network service --constraint 'node.role == worker' viviljp/test-web
    
    잠시 후 서비스가 이미 시작되었다는 것을 알았다
    docker service ls 
    

    확대/축소


    가까스로 클러스터를 구성했고 줌도 시도했다.
    관리자에서 다음 명령을 입력하여 배율을 나타낼 수 있습니다.
    docker service scale web=3
    

    어느 기계가 몇 개의 실례를 분배했는지 아래 명령을 통해 조사할 수 있다.
    docker service ps web
    
    이미 죽은 인스턴스도 Shutdown 상태로 표시됩니다.웹 서버입니다.두 번이나 재부팅된 실례를 볼 수 있다.
    docker의 swarm에는 Ingress 네트워크의 내부 커버 네트워크가 있어 한 서버에 접속해도 내부 루트를 자동으로 할 수 있어 편리한 기능을 가진다.(이번 설정에서 웹, appi를 연결한 실례service도 덮어쓰기 네트워크입니다.)
    따라서 여러 실례를 만들어도 부하를 마음대로 분산할 수 있다.나는 지금이 편리한 시대라고 생각한다.

    감시


    서비스만 만들면 일을 제대로 했는지 걱정이 돼요.나는 이곳에서 각 컨테이너도 감시하고 싶다.

    각 노드에 대한 자원 확인 도구 설정


    자원 감시 도구가 사용되었다cAdvisor.
    docker service create --network=monitoring --mode global --name cadvisor \
      --mount type=bind,source=/,target=/rootfs,readonly=true \
      --mount type=bind,source=/var/run,target=/var/run,readonly=false \
      --mount type=bind,source=/sys,target=/sys,readonly=true \
      --mount type=bind,source=/var/lib/docker/,target=/var/lib/docker,readonly=true \
      google/cadvisor
    
    이 경우 각 노드가 한 대씩 서 있기를 바라기 때문에전역 모드로 건설한다.배율이 조정되지 않고 하나의 실례 설정 모드입니다.
    이 정도면 감시가 가능하지만 각 서버에 들어가서 검사하는 게 귀찮아서 한 곳에서 집중적으로 감시하고 싶어요.

    관리 노드에서 모니터링 도구 설정


    관리자에서 자원 감시 도구를 감시하는 도구를 설정합니다.
    이번에 사용해 보세요Prometheus.
    docker service create --publish 9090:9090 --network=monitoring --name prometheus \
      --mount type=bind,source=/tmp/prometheus.yml,target=/etc/prometheus/prometheus.yml,readonly=false \
      --constraint 'node.role == manager' prom/prometheus
    
    prometheus.yml
    global:
      external_labels:
          monitor: 'service'
    scrape_configs:
      - job_name: 'docker'
        scrape_interval: 5s
        dns_sd_configs:
          - names: ['tasks.cadvisor']
            type: 'A'
            port: 8080  
    

    이런 느낌으로 CPU 사용률, 메모리 사용률, 네트워크 상황 등 다양한 정보를 얻을 수 있다.

    더욱 선명하게 보이다


    prometheus를 통해 얻은 정보는 하나하나 확인하는 형식으로 종합 확인을 위해 Grafana 등 도구를 사용하여 가시화하는 것도 좋다.
    docker service create --constraint 'node.role == manager' --publish 3001:3000 grafana/grafana
    
    기본적으로 3000번 포트를 사용하지만 웹 실례와 포트가 충돌하여 잘못 열렸습니다.나는 계획적으로 포트를 펼쳤으면 좋겠다고 후회했다.
    Grafana 설정이 적절하면 기본적으로 Proometheus를 소스로 사용할 수 있습니다.

    localhost라고 쓰여있는 곳은 매니저 실례의 IP 주소입니다.
    그리고 계기판의 외관을 마음대로 조정하면 아래의 그림처럼 자신이 가장 쉽게 볼 수 있는 감시 도구를 만들 수 있다.

    docker가 서비스 이름을 지정하지 않으면 적합한 이름을 지어줍니다
    Grafana와 Proometheus는 경보를 보내는 기능이 있기 때문에 오류 로그가 많이 나오면 슬랙에게 알립니다!엔지니어라면 누구나 원하는 시스템을 구축하기 쉽다.편하네.
    이외에elasticsearch나fluentd를 사용하여 로그를 수집하는 것도 재미있다.

    끝말


    Docker도 스토리지 서비스 Infinit 인수 발표를 하면서 앞으로 더 많은 기회를 보게 될 것이다.프런트 엔지니어니까 건드리지 마!그래서 나는 끊임없이 새로운 분야에 도전하고 싶다.
    내일은 D3vel0pper입니다.

    좋은 웹페이지 즐겨찾기