배운 것

1. 도커 스웜

여러 컨테이너의 관리를 쉽게 할 수 있게 도와주는 오케스트레이션 도구. 오케스트레이션 툴은 많지만, 스웜은 도커를 이용해 다른 툴보다 훨씬 편하다는 장점이 있다.



2. 멀티 호스트 네트워크 - ingress network & backend overlay

멀티 호스트 네트워크는 분산된 네트워크를 하나의 네트워크처럼 사용하기 위한 방식이다.

ingress는 외부에서 내부 네트워크로 접속할 때 어떻게 처리할 것인지 결정한다. 하나의 서비스 안에 여러 컨테이너 레플리카들이 있는데 이들 중 어떤 컨테이너가 서비스하도록 할 지 로드밸런싱을 한다.


ingress network


반면, backend overlay 방식은 기존 네트워크와 다른 네트워크를 연결하는 방식이다. 도커에서는 기존 네트워크에 다른 서비스를 연결시켜 서비스 간에 통신할 수 있게 해준다.


overlay nerwork



3. 서비스 스케일 업

docker-compose.yml에서 replica의 개수를 변경하는 것과 같다. docker service scale 서비스이름=레플리카수로 서비스 내의 레플리카 수를 변경한다.



4. 컨테이너가 한 개일 때와 여러 개일 때

컨테이너가 한개인 경우 curl로 요청하면 하나만 뜨지만, 여러개를 띄우면 curl로 요청할 때 로드밸런싱이 되서 요청할 때마다 다른 호스트네임이 뜬다.



5. 로깅

WAS와 http에서 찍는 2가지 로깅이 있다. WAS는 프로그램 상에서 생기는 문제를 로그로 남긴다. http에서 찍는 로그는 액세스 로그로서, 응답을 받았을 때 200, 300, 400 등의 로그를 찍는다. 도커는 로깅과 모니터링 기능을 지원하지 않는데, 이때 지원 못하는 로깅은 ‘통신이 잘 되는지 안되는 지’ 확인할 수 있는 트래픽 로깅이라고 한다. 반면, 쿠버네티스에서는 로깅과 모니터링을 할 수 있다.



6. 클러스터링

여러 개의 서버를 하나의 서버처럼 사용할 수 있다. 도커에서는 여러 컨테이너를 하나처럼 묶어서 사용할 수 있는데 이렇게 묶인 것을 클러스터라고 한다.



7. 서비스 디스커버리

OSI 4 또는 7계층으로 주소를 구분하여 서비스를 찾아준다.



8. 스케줄링

태스크를 스케줄에 맞게 일정한 시간 내에 띄우거나 죽이거나 한다. 도커 스웜에서서는 로드 밸런싱을 할 때 라운드로빈 방식을 쓴다. 라운드로빈 방식을 쓰긴 하지만, 다음 서버에 응답이 없으면 건너 뛰고 다음 서버에 요청한다.



9. 도커 공식 문서에서 매니저 노드를 홀수로 하는 게 좋다고 되어있는데 왜일까?

매니저 노드가 짝수 개인 경우, 스웜에서 한 매니저가 죽으면 raft 알고리즘에서 과반을 입증할 수가 없다. (이걸 이해하려면 raft 알고리즘을 먼저 알아야한다.)

4개의 매니저 노드 중 매니저 하나가 죽었다고 하자. 명령 실행을 위해 다른 매니저 노드들에게 합의를 요청한다. 죽은 서버와 자신을 제외하고 2개의 표를 얻는데, 4개 노드 중 2개의 동의로는 과반을 입증할 수 없기 때문에 합의를 볼 수 없는 상황에 이른다.


※도커 리더 다운 실험 참고



10. curl 외에 요청 확인하는 법

httpie를 이용하면 응답이 깔끔하게 정리되어서 나온다. httpie 사이트 참고



11. 순차적 업데이트

도커는 블루그린 방식으로 업데이트 하는 방법을 쓴다. 기존에 만든 서버를 그린이라고 한다. 그리고 기존 서버를 똑같이 복제한 것을 블루라고 한다. 이렇게 굳이 복제를 만드는 이유는 뭘까?

기존 서버를 변경할 때, 서비스를 중단하지 않으려면 업데이트 동안에 대체할 다른 서버가 필요하다. 따라서 복제 서버를 만드는 것이다.

도커 내에 컨테이너를 만들고, 변경이 생기면 기존 컨테이너가 똑같이 복제되어 그린을 업데이트하는 동안 블루로 대체하고, 업데이트가 끝나면 다시 그린으로 대체하는 방식을 쓴다.



12. 매니저노드에서 워커노드가 살아있는지 확인하는 법

1초마다 curl요청을 보내 응답이 없으면 서비스에서 제외시켜버리고 다른 서비스에 요청을 보낸다. 마치 부장님이 급하게 처리할 업무 해결을 위해 사원에게 1초마다 카톡을 보내는데, 1이 사라지지 않으면 해당 직원을 해고하고 다른 사원에게 그 요청을 보내는 것과 같다. 무서운 고래 떼



13. 스택?

도커 스웜 내에 여러 서비스를 아우르는 것을 스택이라고 한다.



14. ADD나 COPY를 쓰는 이유

이미지를 기반으로 컨테이너를 생성할 때, 컨테이너에 필요한 서비스를 적재해야한다. 따라서 로컬로부터 필요한 서비스들을 ADD나 COPY 명령으로 컨테이너에 담는 것이다.





다음 스터디

이제 쿠버네티스로 넘어간다! 다음주에는 실습 환경을 구축해서 온다. 쿠버네티스와 가장 궁합이 잘 맞는 centOS를 사용한다. 이제까지는 AWS 인스턴스에서 실습했지만, 사양이 딸리기 때문에..크흡 VMware로 갈아타기로 했다.