0부터 시작하는 Kubernetes 공부 - Kubernetes Object & Controller

Jaehong Lee·2023년 5월 8일
2
post-thumbnail

Object and Resource

Kubernetes에서 모든 것은 API를 통해 연결된다. Kubernetes Resource는 Kubernetes의 API Resource들을 의미한다

Kubernetes Object는 Resource를 이용하여 사용자가 원하는 상태 ( spec, metadata ... ) 를 정의한 것으로, Object는 특정 그룹 + 버전 + 종류의 표현이다

Kubernetes Basic Object는 아래와 같다

  • Pod
  • Service
  • Volume
  • Namespace

Kubernetes Controller

Kubernetes Controller는 클러스터의 상태가 본래 되어 있어야 할 상태인지 감시하고, 현재 상태인 Status와 원하는 상태인 Spec이 일치하도록 관리해준다

  • 참고 : https://www.containerlabs.kubedaily.com/Kubernetes/beginner/Deployment-process.html
  • 예를 들어, Deployment를 배포하면 실제 Deployment가 Node에 배포되는 것이 아니라 ETCD에 Deployment Spec 정보를 저장해주는 것이다
  • Etcd에 저장된 Deployment Spec 정보를 통해 Deployment Controller가 ReplicaSet Controller를 거쳐서 Pod를 배포하도록 요청을 보낸다. 실제 Node에 배포되는 것은 Pod이다
  • 실제 Node에 배포된 Pod의 상태 정보가 사용자가 정의한 Spec가 동일하도록 관리해준다. Label과 Selector를 이용하여 관리할 Pod를 구분한다

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가 있다

profile
멋진 엔지니어가 될 때까지

0개의 댓글