[쿠버네티스 기초다지기] 02장 - 파드, 서비스, 복제 컨트롤러, 레이블
02장 파드, 서비스, 복제 컨트롤러, 레이블
쿠버네티스 아키텍처
- 컨테이너를 대규모로 조율하고 전체 애플리케이션 스택을 관리하도록 도와준다.
- 고가용성, 애플리케이션 스택, 서비스 차원의 이식성을 보장하는 자동화 도구 제공
- 인프라 전체의 CPU, 메모리, 디스크 공간 같은 리소스 사용 제어 가능
- 높은 차원의 오케스트레이션 관리 제공
마스터
- 클러스터의 뇌에 해당
- 핵심 API 존재
- 클러스터 워크로드 상태를 정의하고 조회하는 RESTful 웹 서비스 제공
- 스케줄러가 있으며, 노드에 파드 형태로 워크로드를 스케줄링하기 위해 API 서버와 함께 동작
- 복제 컨트롤러나 레플리카 셋은 알맞은 수의 파드 레플리카가 실행되도록 보장하기 위해 API 서버와 함께 동작함
- 복제 레플리카나 레플리카 셋이 세 개의 레플리카 정의
- 실제 상태는 두 개의 파드가 실행 중 -> 스케쥴러는 클러스터의 어딘가에 세 번째 파드를 추가하기 위해 호출
노드
- 각 노드는 여러 가지 컴포넌트를 가진다.
- kubectl은 상태를 업데이트, API 서버와 상호작용
- 노드에 다양한 인프라 서비스 실행
- 기본 파드는 모든 노드에서 스케줄링된 파드와 함께 실행
파드
- 컨테이너들이 밀접한 연대 관계를 유지할 수 있도록 해준다.
- 공용 데이터는 여러 컨테이너와 공유되는 볼륨에 저장될 수 있다.
- 컨테이너와 애플리케이션 스택 요소를 논리적으로 그룹화할 수 있도록 해 준다.
- 서비스 엔드포인트에 걸쳐 복제, 스케줄링, 균형을 유지할 수 있는 논리적 컨테이너 그룹 제공
레이블
- 단순한 키/값 쌍
- 파드, 복제 컨트롤러, 레플리카 셋, 서비스에서 확인 가능
- 셀렉터처럼 동작
- 필터링 옵션
서비스
- 애플리케이션 소비자로부터의 접근을 추상화 해줌
- kube-proxy 사용해 파드에 접근
- 서비스 엔드포인트로부터의 통신을 애플리케이션이 실행 중인 파드로 중계
- 레이블이 일치하는 파드는 서비스가 트래픽을 포워딩하는 후보군 목록으로 추가 됨
- 트래픽은 K8s 또는 정의 파일에 정의 된 타겟 포트의 파드로 무작위 전송 된다.
복제 컨트롤러와 레플리카 셋
- 복제 컨트롤러(ReplicationController)
- 파드와 파드에 포함된 컨테이너 이미지가 실행되는 노드의 개수를 관리
- 이미지 인스턴스가 정해진 개수만큼만 실행되도록 관리
- 애플리케이션이 원하는 규모가 되도록 보장
- 파드 레플리카의 개수를 정의하고 새로운 파드를 생성하는 템플릿을 제공
- 장기 실행 프로세스에 이상적
- 레플리카 셋
- 향상된 버전의 복제 컨트롤러
- 새로운 셋 기반 레이블 셀렉터를 사용할 수 있다.
레플리카 셋
헬스체크
- 쿠버네티스는 두 가지 헬스체킹 레이어 제공
- HTTP 또는 TCP 형식의 체크
- 특정 엔드포인트로 접속을 시도해 접속 성공 시에 정상 판단
- 커맨드라인 스크립트를 사용
- livenessProbe
- 컨테이너가 동작 중인지 여부 나타냄
- 실패 시 kubectl은 컨테이너를 죽이고, 해당 컨테이너는 재시작 정책의 대상이 된다.
- readinessProbe
- 컨테이너가 요청을 처리할 준비가 되었는지 여부 나타냄
- 실패 시 엔드포인트 컨트롤러는 파드에 연관된 모든 서비스들의 엔드포인트에서 파드의 IP 주소를 제거
생명주기 훅 또는 정상 종료
- 컨테이너를 종료하기 전이나 시작 직후에 추가 조치 취할 수 있다.
- postStart, preStop 액션 정의
- postStart는 파드가 준비 상태가 되기 전에 수행
- 훅 자체가 실패하면 파드는 비정상적인 것으로 간주
애플리케이션 스케줄링
- 쿠버네티스 스케줄러의 기본 동작은 컨테이너 레플리카를 클러스터에 있는 노드 전체에 퍼트리는 것
- 스케줄러는 서비스 혹은 복제 컨트롤러와 일치시키기 위해 파드 개수가 가장 적은 노드에 새로운 파드를 배치한다.