[쿠버네티스 기초다지기] 02장 - 파드, 서비스, 복제 컨트롤러, 레이블


02장 파드, 서비스, 복제 컨트롤러, 레이블

쿠버네티스 아키텍처

  • 컨테이너를 대규모로 조율하고 전체 애플리케이션 스택을 관리하도록 도와준다.
  • 고가용성, 애플리케이션 스택, 서비스 차원의 이식성을 보장하는 자동화 도구 제공
    • 인프라 전체의 CPU, 메모리, 디스크 공간 같은 리소스 사용 제어 가능
    • 높은 차원의 오케스트레이션 관리 제공

마스터

  • 클러스터의 뇌에 해당
  • 핵심 API 존재
    • 클러스터 워크로드 상태를 정의하고 조회하는 RESTful 웹 서비스 제공
    • 스케줄러가 있으며, 노드에 파드 형태로 워크로드를 스케줄링하기 위해 API 서버와 함께 동작
    • 복제 컨트롤러나 레플리카 셋은 알맞은 수의 파드 레플리카가 실행되도록 보장하기 위해 API 서버와 함께 동작함
      • 복제 레플리카나 레플리카 셋이 세 개의 레플리카 정의
        • 실제 상태는 두 개의 파드가 실행 중 -> 스케쥴러는 클러스터의 어딘가에 세 번째 파드를 추가하기 위해 호출

노드

  • 각 노드는 여러 가지 컴포넌트를 가진다.
  • kubectl은 상태를 업데이트, API 서버와 상호작용
  • 노드에 다양한 인프라 서비스 실행
    • DNS 서비스, 로깅, 헬스체크 서비스
  • 기본 파드는 모든 노드에서 스케줄링된 파드와 함께 실행

파드

  • 컨테이너들이 밀접한 연대 관계를 유지할 수 있도록 해준다.
  • 공용 데이터는 여러 컨테이너와 공유되는 볼륨에 저장될 수 있다.
  • 컨테이너와 애플리케이션 스택 요소를 논리적으로 그룹화할 수 있도록 해 준다.
  • 서비스 엔드포인트에 걸쳐 복제, 스케줄링, 균형을 유지할 수 있는 논리적 컨테이너 그룹 제공

레이블

  • 단순한 키/값 쌍
  • 파드, 복제 컨트롤러, 레플리카 셋, 서비스에서 확인 가능
  • 셀렉터처럼 동작
  • 필터링 옵션

서비스

  • 애플리케이션 소비자로부터의 접근을 추상화 해줌
  • kube-proxy 사용해 파드에 접근
    • 서비스 엔드포인트로부터의 통신을 애플리케이션이 실행 중인 파드로 중계
  • 레이블이 일치하는 파드는 서비스가 트래픽을 포워딩하는 후보군 목록으로 추가 됨
  • 트래픽은 K8s 또는 정의 파일에 정의 된 타겟 포트의 파드로 무작위 전송 된다.

복제 컨트롤러와 레플리카 셋

  • 복제 컨트롤러(ReplicationController)
    • 파드와 파드에 포함된 컨테이너 이미지가 실행되는 노드의 개수를 관리
    • 이미지 인스턴스가 정해진 개수만큼만 실행되도록 관리
    • 애플리케이션이 원하는 규모가 되도록 보장
    • 파드 레플리카의 개수를 정의하고 새로운 파드를 생성하는 템플릿을 제공
    • 장기 실행 프로세스에 이상적
  • 레플리카 셋
    • 향상된 버전의 복제 컨트롤러
    • 새로운 셋 기반 레이블 셀렉터를 사용할 수 있다.

레플리카 셋

  • 향상된 복제 컨트롤러

헬스체크

  • 쿠버네티스는 두 가지 헬스체킹 레이어 제공
    • HTTP 또는 TCP 형식의 체크
      • 특정 엔드포인트로 접속을 시도해 접속 성공 시에 정상 판단
    • 커맨드라인 스크립트를 사용
  • livenessProbe
    • 컨테이너가 동작 중인지 여부 나타냄
    • 실패 시 kubectl은 컨테이너를 죽이고, 해당 컨테이너는 재시작 정책의 대상이 된다.
  • readinessProbe
    • 컨테이너가 요청을 처리할 준비가 되었는지 여부 나타냄
    • 실패 시 엔드포인트 컨트롤러는 파드에 연관된 모든 서비스들의 엔드포인트에서 파드의 IP 주소를 제거

생명주기 훅 또는 정상 종료

  • 컨테이너를 종료하기 전이나 시작 직후에 추가 조치 취할 수 있다.
    • 생명주기 훅 제공
  • postStart, preStop 액션 정의
  • postStart는 파드가 준비 상태가 되기 전에 수행
  • 훅 자체가 실패하면 파드는 비정상적인 것으로 간주

애플리케이션 스케줄링

  • 쿠버네티스 스케줄러의 기본 동작은 컨테이너 레플리카를 클러스터에 있는 노드 전체에 퍼트리는 것
  • 스케줄러는 서비스 혹은 복제 컨트롤러와 일치시키기 위해 파드 개수가 가장 적은 노드에 새로운 파드를 배치한다.