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

+ Recent posts