- 쿠버네티스 클러스터 아키텍처
- 마스터노드 : 쿠버네티스 시스템을 제어하고 관리하는 컨트롤 플레인을 실행
- 컨트롤 플레인 : 클러스터를 제어하고 작동, 마스터 노드에서 실행하는 얘들이나 여러 노드로 분할, 복제해서 쓰는 여러 구성 요소들로 이루어짐
- 쿠버네티스 API 서버 : 사용자, 다른 구성요소들과 통신
- 스케줄러 : 애플리케이션을 워크노드에 할당
- 컨트롤러 매니저 : 워크 노드 추적, 노드 장애 처리 같은 역할
- Etcd : 클러스터의 구성을 지속적으로 저장해두는 분산 데이터 저장소.
- 워커 노드 : 실제 배포되는 어플리케이션을 실행
- 도커 : 컨테이너를 실행
- Kubelet : API 서버와 통신하고 노드의 컨테이너를 관리
- kube-proxy : 어플리케이션 구성 요소 간의 트래픽을 로드밸런싱
- 쿠버네티스에서 어플리케이션 구동 과정 (간략하게)
- 어플리케이션을 이미지로 패키징하기
- 패키징한 이미지를 레지스트리에 등록
- 쿠버네티스 API 서버에 어플리케이션 디스크립션 게시
- 디스크립션 : 이미지. 구성 요소간에 통신 방법, 동일 서버에 배치돼야 하는 구성요소, 구성요소의 복제본 갯수 등의 컨테이너 실행에 필요한 정보들
- 스케줄러가 컨테이너에 필요한 리소스 계산 후 배치 가능한 워커노드에 컨테이너 할당
- 배치된 노드의 kubelet이 컨테이너 이미지를 가져와서 컨테이너를 실행하도록 지시
- 컨테이너 실행 후
- 어플리케이션의 상태가 디스크립션과 일치하는지 지속적으로 확인
- 5개의 인스턴스 실행 중 한 개가 중단되어도 자동으로 재시작
- 실행하는 동안 복제본의 수를 줄이거나 늘리는 것이 가능, 최적 복제본 수를 결정하는 것 역시 쿠버네티스에 맡길 수 있음.
- 컨테이너는 실행 도중 클러스터 안의 다른 곳으로 이동할 수도 있음. 이 때 IP가 변경됨, 이 때 변경된 아이피에 맞춰 매번 변경하지 않고, 미리 지정된 고정 아이피 하나로 접근이 가능함. 같은 서비스 여러개를 하나의 고정 아이피에 연결하는 것도 가능
- 쿠버네티스 장점
- 배포 단순화
- 하드웨어 활용도 높이기
- 상태확인과 자가치유
- 오토스케일링
- 애플리케이션 개발 단순화
- 버그 추적이 쉬워짐
- 리더 선정 알고리즘 같은 복잡한 메커니즘을 구현하지 않아도 됨
- 파드
- 쿠버네티스는 개별 컨테이너를 직접 다루지는 않음.
- 한번에 같이 배치되는 컨테이너들을 다룸 이 컨테이너 그룹을 파드라고 부름.
- 파드 하나는 같은 워커노드, 같은 리눅스 네임스페이스에서 실행 됨.
- 각 파드는 자체 아이피, 호스트 네임, 프로세스 등이 있는 논리적으로 분리된 머신
- 같은 워커노드에서 실행 되어도 다른 파드에 있으면 다른 머신에서 실행되는 것으로 여겨진다.
- 레플리케이션 컨트롤러
- 파드 관리자
- 파드를 복제하고 항상 실행상태로 유지하는 역할
- 파드가 비정상 종료되어도 새로운 파드를 생성하여 정상적으로 작동하도록 한다.
- 파드의 복제본들은 다른 워커노드에서 실행 될 수 있음. 서비스가 요청은 전달할 꺼니깐
- 서비스
- 아이피를 고정시키고 파드랑 연결
- 파드는 일시적, 언제 죽을지 모르는 연약한 친구
- 다시 살아나면 아이피가 바뀌는 문제, 여러 파드를 하나의 IP로 노출시키는 문제를 해결
- 로드밸런서 역할도 한다.