1부 3장 쿠바네티스 탐험
kubernetes 주요 구성 요소
- control plane
- 객체의 생성, 수정, 삭제를 조정
- k8s cluster 상태를 모니터하고 관리
- 작업 부하 관리
- API 서버
- REST API를 사용해 kubernetes 시스템과 상호작용함
- etcd
- key-value database
- API 서버는 staeless 방식이기 때문에 data 저장해 놓을 저장소가 필요함
- 다른 구성 요소들은 etcd에 API 서버를 통해서만 접근 가능
- scheduler
- app의 instance가 어디서 실행해야 하는지를 지시
- kubernetes 관리자가 정의한 policy에 가장 적합한 work node를 선택
- 제어기
- control plane에는 여러 개의 제어기가 있음 (ex. node 제어기)
- work nodes
- application software를 hosting하는 node의 집합
- control plane과 통신하기 위한 kubernetes 구성요소를 포함하여 실행
- kube proxy
- node에서 실행 중인 app을 위한 네트워크 통신을 관리
- kubelet
- 각각의 노드에서 실행 중인 일종의 agent
- API server와 대화하여 node에서 실행 중인 앱을 관리하는 것
- node의 상태를 수집하여 control plane에 API를 통해 전달
- container runtime
- 앱을 hosting하며 kubelet이 관리하는 container를 실행하는 역할
- kubernetes가 사용하는 CRI와 호환성이 있는 container runtime을 선택할 수 있음
앱의 실행을 위한 kubernetes 객체
- namespace
- kubernetes 자원을 구분하는 방법
- 다양한 팀과 동일한 cluster를 공유 가능
- 다양한 설정, 네트워크 정책, 자원 할당량, 접근 제어 등을 유지
- kubernetes 내 논리적 하위 cluster를 의미
- container image
- 앱, 앱의 종속성, 운영체제 자원을 포함하고 있는 꾸러미
- container image를 실행하고 있는 instance = container
- deployment
- 배포 객체를 통해 container화 된 app을 추상화하여 복잡함을 감춤
- cluster 안에서 앱에 대한 원하는 상태 정보를 포함
- 원하는 상태가 달랐을 때 앱의 상태를 업데이트를 수행
- 업데이트 : 복제, 삭제, 추가, 중지 등
- pod
- kubernetes에서 앱을 실행하는 기본 단위
- 가장 작은 스케줄러 작업 단위
- 1개 pod 안의 container는 network와 disk 자원을 공유
- service
- pod끼리의 network
- 각각의 pod는 자신만의 사설 IP를 가지고, 재시작 시 주소 변경
- kubernetes service는 하나의 추상화된 network 서비스로서 pod를 노출시킴
- ex) reverse proxy : 실행 중인 여러 pod에 대해서 load balancing을 지원
- pod끼리의 network
- configmap, secret
- 컨테이너 이미지를 통해 패키징한 앱을 다양한 환경에 배포했을 때, 환경(database 등) 관련 내용을 container image에 넣는 것은 안됨
- 이러한 환경은 container image 외부에서 설정을 정의하여 container 실행 시 전달할 수 있어야함.
- configmap, secret은 파일 or 환경변수의 형태로 pod에서 접근 가능
- configmap : 설정 데이터를 저장하고 접근하기 위해 사용
- secret : 암호, 사설 키 같은 민감한 설정에 사용
1. deployment : app이 pod로 실행될 수 있도록 지원
2. configmap : pod의 특수한 환경에 따른 설정 지원
3. service : 배포된 pod를 마치 1개의 network service로 노출
- 저장소
- pod는 일시적으로 존재하기 때문에, pod에 할당된 자원을 종료와 함께 사라짐
- pod 내의 app은 보존이 필요한 데이터를 읽고 쓰기 위한 저장소가 필요함
- kubernetes는 하드웨어 혹은 클라우드 서비스에서 배포되는데, 장소 상관없이 일관성 있는 저장소 자원 요청 방법이 필요함!
- PersistentVolume (PV)
- 물리적 저장소
- 저장소 인프라에 대한 세부사항 포함
- PresistentVolumeClaim (PVC)
- PV를 가리키는 추상화된 객체
- pod는 PVC를 인식하여 데이터를 저장하는 것
- PVC는 PV와만 연결, pod는 PV를 모름 => 추상화
-
ingress
- k8s cluster 외부에서 pod에 접근이 필요한 경우에 사용
- ingress는 cluster 외부에서 특정 서비스를 접근할 수 있도록 노출시키는 방법을 제공
- service는 URL 사용하는 HTTP를 사용하여 표현
- URL 접근시 SSL 사용 가능, cluster 내부에서 SSL 사용 불가 가능
kubernetes operator
-
기존 IT 팀의 작업자들이 하는 일을 자동화하는 것
-
지속적으로 kubernetes 환경에서 실행 중인 app을 모니터하고, 특정 구성 요소와 관련된 운영 작업을 수행
-
kubernetes app의 설치와 lifecycle을 관리하는 자동화된 소프트웨어 관리자
-
다양한 kubernetes 객체들을 (사람이 생성하는 대신) operator가 생성, 수정함.
-
Custom Resource (CR) : operator가 수행할 특정 작업을 설정한 것
-
Custom Resource Definition (CRD) : CR의 구조나 스키마를 정의한 객체
-
operator의 app 운영 자동화 과정
-
ex) database의 instance를 관리하는 경우, 여러 pod들의 luster와 함깨 동작하도록 관리하는 경우
OLM(Operator Lifecycle Manager)
- OLM을 통해 kubernetes operator의 설치와 관리를 간단하게 만들 수 있음
- OLM에서 Operator 설치를 위한 단계
- deployment 생성
- operator 실행을 위한 권한 설정 (cluster 변화를 관찰해야하기 때문)
- CRD 생성
- OLM과 operator는 k8s API (단일 표준 interface)만을 사용, 여러 operator의 lifecycle 관리 쉽게 만듬
- OLM과 관련된 객체
- ClusterServiceVersion
- operator의 metadata를 정의
- metadata (설치, 필요한 권한 정보, operator 이름 및 version, CRD)
- Subscription
- 사용자가 operator를 설치하고 업데이트할 수 있게 해줌
- OperatorGroup
- Operator를 특정 namespace set과 연계해주는 기능을 제공
- namespace가 없으면 OperatorGroup은 모든 namespace에서 전역적으로 동작
- ClusterServiceVersion