kubectl
: 쿠버네티스 클러스터에 명령 전송
: API 서버가 위치한 곳에 설치되어 있어야함
API 서버
: 쿠버네티스 클러스터의 중심 역할로, 상태 값을 저장하는 etcd와 통신
: etcd 외 다른 요소들도 API 서버를 중심으로 통신
etcd (/etc + distributed)
: 모든 구성 요소들의 상태 값 저장소. 장애 상황 시 etcd 내 정보로 클러스터를 복구할 수 있음
: 분산 저장이 가능한 key-value 저장소로, 복제하여 여러 곳에 저장하면 시스템 가용성 확보 가능
컨트롤러 매니저
: 쿠버네티스 클러스터의 오브젝트 상태를 관리
: 다양한 컨트롤러들이 컨트롤러 매니저에 속하며 다양한 상태 값을 관리
- 오브젝트
: 클러스터의 상태를 나타내기 위한 레코드
스케줄러
: 노드의 상태와 자원, 레이블, 요구 조건 등을 고려해 파드를 어떤 워커 노드에 생성할 것인지 결정하고 할당
kubelet
: 파드의 구성 내용 (PodSpec)을 받아서 컨테이너 런타임으로 전달하고 파드안의 컨테이너들에 대해 모니터링
: 파드의 생성과 상태 관리, 복구 등을 수행
: 워커 노드에서 실행
컨테이너 런타임 (CRI, Container Runtime Interface)
: 파드를 이루는 컨테이너의 실행을 담당
: 파드안에서 컨테이너가 문제 없이 작동하게 만드는 표준 인터페이스
: 워커 노드 내에 존재
파드 (Pod)
: 한 개 이상의 컨테이너로 단일 목적의 일을 하기 위해 모인 단위
: 언제라도 죽을 수 있는 존재
: 워커 노드 내에 존재
네트워크 플러그인 (CNI, Container Network Interface)
: 쿠버네티스 클러스터의 통신을 위한 네트워킹 도구
: Calico (L3 컨테이너 네트워크 구성) / Flannel (L2 네트워크 구성) / Cilium / Kube-router / Romana / WeaveNet / Canal 등이 있음
: BGP 및 VXLAN, ACL 지원 등 컨테이너에 필요한 조건을 확인하여 선택
CoreDNS
: CNCF (클라우드 컴퓨팅 재단)에서 보증하는 프로젝트로, 빠르고 유연한 DNS 서버
: 쿠버네티스 클러스터에서 도메인 이름을 이용해 통신하는데 이용
: 쿠버네티스 클러스터를 구성하여 사용할때 도메인 네임을 사용할 수 있도록 지원
kube-proxy
: 클라이언트가 파드가 위치한 노드에 통신 하기 위한 네트워크 요소
: br_netfilter 모듈과 iptables로 관리
: 파드가 위치한 노드에 존재
파드의 생명 주기
1) kubectl로 API 서버에 파드 생성 요청
2) API 서버가 etcd에 클러스터의 최신 상태 값을 업데이트
3) 컨트롤러 매니저가 API 서버에 전송된 파드 생성 요청을 인지 > 컨트롤러 매니저가 파드를 생성하고 API 서버에 상태 전달
4) 파드가 생성된 것에 대해 스케줄러가 인지 > 생성된 파드를 어떤 워커 노드에 적용할지 결정 > API 서버를 통해 해당 워커 노드에 파드 실행 요청
5) 스케줄러가 지정한 워커 노드에 파드가 속해있는지 kubelet으로 확인
6) kubelet이 컨테이너 런타임에게 파드 생성 요청
7) 워커 노드에 파드가 생성됨
※ 마스터 노드의 작업 구조
: 추구하는 상태를 선언하는 declaretive 구조
: 추구하는 상태를 API 서버에 선언하면 다른 요소들이 API 서버에 선언된 상태와 일치한지 확인하고 작업을 수행
: API 서버는 etcd에 모든 요소의 상태 값을 항시 저장
※ 워커노드의 작업 구조
: 작업을 순서대로 진행하는 work flow 구조
Reference
'Container > Kubernetes' 카테고리의 다른 글
쿠버네티스 오브젝트 (0) | 2023.06.04 |
---|---|
쿠버네티스 파드 생성 (0) | 2023.06.04 |
쿠버네티스 설치 및 기본 세팅 (1) | 2023.06.04 |
다양한 쿠버네티스의 종류 (0) | 2023.06.04 |
쿠버네티스를 공부하기 전에 알아야하는 기초지식 (0) | 2023.05.29 |