Container Orchestration이란

  • 다수의 컨테이너를 잘 관리하는것
  • 필요기능 : 배포, 스케일링, 네트워크, 인사이트
    +자세한 설명은 아래에

  • 클러스터 내부의 관계 뿐 아니라 클러스터 간의 네트워크도 잘 조율해야함

  • 필요기능1 배포
    배포 (Deployment):새 버전 배포시, 이상이 감지되면 이전 안정 버전으로 롤백.

    +간단한거 같지만 컨테이너가 많을수록 서로 연결성이 복잡하기 때문에 고도의 기능(devops팀에게 중요한 기능)

  • 필요기능2 스케일링
    스케일링 (Scaling):** 시스템이나 서비스의 성능을 향상시키기 위해 컨테이너 수를 늘리고 줄여서, 리소스를 조절하는 프로세스. 수직 스케일링은 단일 서버의 성능을 증가시키는 반면, 수평 스케일링은 여러 서버 인스턴스를 추가하여 부하 분산과 성능 향상을 달성한다. 

  • 필요기능3 네트워크
    네트워크 (Network): 서비스가 다수의 컨테이너로 나눠지면서, 이들을 대표하는 load balancer를 만들어야함. 또한 서비스들간에 서로를 쉽게 찾을 수 있어야한다(서비스디스커버리). 
  • 필요기능3 인사이트
    인사이트 (Insights): 문제가 생긴 컨테이너(2번)를 발견시, 서버 3번에 프론트 이미지를 주고 실행시키고,
    서버2번은 로드밸런서에서 제거. 이를 자동으로 하는게 Container Orchestration의 network, service discovery 기능.
    남은 다양한 로그들을 분석을 할수 있고, 각 컴포넌트 간의 요청과 시간을 분석함으로서 문제가 있는 부분을 발견할수 있음.

  • Container Orchestration 툴들 : mesos, marathon, deis,rancher,nomad,docker swarm, k8s(쿠버네티스 이게 대세)
  • k8s 관련서비스 : EKS,AKS,GKE 

사용할 예제 : voting application

https://github.com/dockersamples/example-voting-app

 

GitHub - dockersamples/example-voting-app: Example distributed app composed of multiple containers for Docker, Compose, Swarm, a

Example distributed app composed of multiple containers for Docker, Compose, Swarm, and Kubernetes - GitHub - dockersamples/example-voting-app: Example distributed app composed of multiple containe...

github.com

 

실습 예제 파일을 깃 클론으로 받아옴

 

빌드 후 실행(하나하나 실행)

 

-> vote 시 정상 동작을 못한다. 아래 순서도를 보면 vote와 redis의 연결 부분에 문제가 있는것으로 보인다.

 


디테일한 문제점 분석

  1. vote에 로그인해서 redis로 신호(핑)을 날려보고 정상적으로 가는지 확인하면 된다.
    $ ping redis
    ping :cannot resolve redis: unknown host
    핑이 제대로 날라가지 않는다. (실제 연결이 안됨을 확인)
  2. db도 정상적인 값을 못받는듯 하다.
  3. db와 redis 의 연결에도 문제가 있어 보인다.

결론 : 컨테이너간 변수들이 전부 연결성에 문제가 있음을 추론할수있음.

 

해결방법 : 모든 컨테이너들을 --network mynetwork 로 묶어 연결

● 컨테이너를 다시 올리기 위해 초기화
docker container rm -f $(docker container ls -aq) 
● 네트워크 mynetwork 생성(존재한다면 지우고 다시 설치할것)
docker network create mynetwork
● docker run -d --name=redis --network mynetwork redis
● docker run -d --name=db -e POSTGRES_PASSWORD=password --network mynetwork postgres
● docker run -d --name=vote -p 5001:80 --network mynetwork vote 
● docker run -d --name=result -p 5002:80 --network mynetwork result 
● docker run -d --name=worker --network mynetwork worker

 


vote에서 redis 연결이 문제였으니 테스트 위해 vote쉘  접속(ping 모듈 설치위해 root로 접속)
+위에 순서도 참조 vote 다음이 redis이니까. vote에 접속해서 redis로 신호를 날려보는거임

  • weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker exec -it --user root vote sh
    # apt update
  • # apt install iputils-ping
  • # ping redis (redis로 핑 날려봄)

 

정상 연결된 모습이다. 

'docker(도커) 및 쿠버네티스' 카테고리의 다른 글

docker-compose(명령어, yaml파일구조)  (0) 2023.12.29
.dockerignore 파일은 뭘까?  (1) 2023.12.28
docker 초기화(클린업)  (0) 2023.12.27
docker volume  (1) 2023.12.27
docker 명령어 모음  (0) 2023.12.27

+ Recent posts