0부터 시작하는 Kubernetes 공부 - Kubernetes Object & Controller
Object and Resource
Kubernetes에서 모든 것은 API를 통해 연결된다. Kubernetes Resource는 Kubernetes의 API Resource들을 의미한다
Kubernetes Basic Object는 아래와 같다
- Pod
- Service
- Volume
- Namespace
Kubernetes Controller
Kubernetes Controller는 클러스터의 상태가 본래 되어 있어야 할 상태인지 감시하고, 현재 상태인 Status와 원하는 상태인 Spec이 일치하도록 관리해준다
Kubernetes Controller Manager는 이러한 Controller들을 생성, 관리해준다
- Deployement Controller나 Job Controller와 같은 Controller 들은 실제 Control Plane의 Controller Manager에 내장되어 있다
- Basic Object는 Controller Manager에 의해 생성 & 관리된다
Kubernetes Controller는 High Level Object로 Pod와 같은 Basic Object들을 생성 & 관리해주며, 아래와 같은 추가 기능을 가진다
- autohealing : pod가 죽으면, 자동으로 생성
- autoscaling : 하나의 pod에 너무 많은 부하가 걸리면, 트래픽을 분산시켜준다
- softwareupdate : 버전 업데이트 및 롤백 기능 지원
- 일시적인 작업을 해야할 때, pod를 생성하여 작업을 수행하고, 작업이 완료되면 pod를 죽여 효율적으로 자원을 사용할 수 있게 해준다
Kubernetes Controller는 아래와 같다
- Replication Controller : 지정한 Pod 개수 유지
- Replicaset : 지정한 Pod 개수를 유지해주며, Selector를 지원한다. 또한 Replicaset은 파드 업데이트 시, Rolling Update가 가능하다
- Deployment : ReplicaSet을 관리하며, 버전 롤백, 배포 방식 설정등이 가능하다
- Statefulset : 상태가 있는 Pod를 관리하는 Controller ( ex. DB )
- Daemonset : 항상 실행되며, 해당 노드의 무언가를 감시하거나 처리하는 데몬 성격의 어플리케이션 배포에 사용 ( ex. Lister )
- Job : 1회성으로 처리를 하고, 종료해야 하는 어플리케이션 배포에 사용 ( ex. 마이그레이션, 사전 준비 상태 체크 )
- cronJob : 주기적으로 처리를 해야 하는 어플리케이션 배포에 사용 ( ex. 누적된 이미지 삭제 )
Kubernetes에는 Kubernetes Controller Manager 외에도 CSP의 독자적인 cloud-controller-manager가 있다
- Kubernetes Managed Service에서 Storage Service, LB Service 와 같은 기능을 위해 사용된다
이외에도 사용자가 커스텀할 수 있는 Kubernetes Custom Controller가 있다