DevOps/Kubernetes

[K8S] k8s 정리 - (6) Kubernetes Controller 종류와 역할

yubi5050 2022. 9. 7. 18:01

이전 글들에서는 Kubernetes 기본적인 Object 들 에 대해 알아보았다.

https://yubi5050.tistory.com/177

 

[K8S] k8s 정리 - (5) Kubernetes Object (Pod, Service, Volume, Namespace)

이전 글들에서는 Kubernetes 동작 Flow 에 대해 알아보았다. https://yubi5050.tistory.com/168 [K8S] k8s 정리 - (4) Kubernetes 동작 Flow 이전 글들에서는 Kubernetes Architecture에 대해 알아보았다. https:..

yubi5050.tistory.com

Kubernets의 리소스 단위는 크게 Object와 Controller로 구성되는데, 이번 글에서는 그 중 Controller 대해 알아 보려고 한다.

 

Controller 란?

Pod 를 관리하는 역할을 수행하며 Kubernetes에서는 목적에 따라 제공되는 Controller를 구성하여 사용 가능하다. 

Controller의 기본적인 역할은 기본 Object들을 생성 + 관리 + 추가적인 기능 을 수행한다.

 

Controller 종류

👉 Controller 종류

  • Replication Controller (레플리케이션 컨트롤러) 
  • Replicaset (레플레카 셋)
  • Deploymnet (디플로이먼트)
  • Stateful Sets (스테이트풀 셋)
  • Daemon Set (데몬 셋)
  • Job (잡)
  • CronJob (크론잡)

 

👉 용도에 따른 Controller 분류

각 Controller는 아래 용도에 따라 주로 사용된다.

  • 자동으로 Controller가 파드 상태를 관리해주는 경우 : Replicaset, Replication Controller, Deployment
  • 배치성 작업(일정 주기 작업)을 담당하는 경우 : CronJob, Job (Job은 실행된 후 종료)
  • 파드가 클러스터 전체를 대상으로 작업이 필요한 경우 : Daemon Set
  • 파드에 대한 상태 관리가 필요한 경우 : Stateful Set

 

Replication Controller

Kubernetes 초기부터 존재하는 컨트롤러, 요구하는 파드의 갯수를 보장하며, 안정적으로 유지되도록 관리. 

👉 Replication Controller 주요 특징

  • Replicas 수, Pod Selector, Pod Template (선언 내용) 3개로 구성
  • selector의 key 이름을 가진 파드를 찾아서, replicas 갯수만큼 운영해주고, 부족하면 template 형식으로 생성.
  • 단점 : Rolling Back, Rolling update 지원 x (자동 업데이트 안됨)
  • 단점 : 수정 시 해당 controller를 직접 삭제해야 다시 생성됨

 

👉 Replication Controller 주요 명령어

  • kubectl get replicationcontrollers : 실행되고 있는 rc 조회
  • kubectl get-rc : 위와 같음
  • kubectl describe rc rg-nginx : 정보 조회
  • kubectl scale rc rc-nging --replicas=2 : pod 갯수 조정 가능 (자동 scailing 가능)

 

ReplicaSet

Replication Controller와 같은 역할로 요구하는 파드의 갯수를 보장하며, 안정적으로 유지되도록 관리. ReplicaSet이 좀더 업그레이드 버전

 

replicaset 예시

👉 ReplicaSet 주요 특징

  • Pod 업데이트시 자동 rolling update 가능
  • ReplicaSet 은 Pod와 Label Selector를 매개로 느슨한 연결을 가짐
  • ReplicaSet은 Selector를 바탕으로 in, notin, exists와 가은 연산을 사용가능하며, 조건에 따른 선택 가능
  • Replication Controller는 Equality(등호) 기반 Selector면 Replica Set은 집합(set) 기반의 Selector 이용
  • matchExressions 연산자 (key:value)를 통한 Pod 연결
    ex) {key: abcd, operator: In, value:[“2.1”, “2.2”] } : key가 abcd, value가 2.1이거나 2.2인 Pod에 연결
    ex) {key: abcd, operator: DoseNotExist } : key와 다른 label의 pod를 연결

 

아래 그림을 보면 왼쪽 Replication controller는 selector의 app이 webui 인지 등호 기반 확인 하는 반면, replicaset은 matchLabels, matchExpressions를 통한 다양한 조건 활용이 가능하다.

 

replication controller와 replicaset 사용 비교

 

 

Deployment

Deploymnet는 가장 많이 사용되는 최상위 추상화 개념으로, 컨테이너 애플리케이션 배포 및 관리하는 역할을 수행

👉 Deployment 주요 특징

Replica를 관리하며 , 파드의 주어진 갯수를 보장 및 조절(Scailing 가능)

  • 새로운 버전의 애플리케이션을 다양한 전략으로 배포 가능
  • 파드가 중단이나 수정시 Rolling Update, Rolling back 가능
  • Application Update시 변경 사항 저장하는 revision을 남겨 rollback을 지원
  • 무중단 서비스를 위해 파드의 다양한 Rolling Update 전략, 정책 사용 가능
    ex) 서비스 중인 Nginx 1.14를 1.15로 업데이트시, 서비스의 지속성을 유지 (replica 1개 끄고 1개 키고 식)

 

무중단 서비스 예제

👉 Deployment 주요 명령어

  • kubectl get deployment: 실행되고 있는 deployment 조회
  • kubectl describe deployment <deployment name> : deployment 정보 조회
  • kubectl set image deployment <deployment name> app=nginx:1.15 --record : Rolling Update (nginx 1.15로 수정)
  • kubectl rollout history deployment <deployment name> : 이전의 update 기록 조회 RollBack

 

deployment 예제

 

Daemonset

클러스터 전체 노드에 특정 파드를 실행할 때 사용 

👉 Daemonset 주요 특징

  • 로그나 모니터링 등 클러스터 내 모든 노드에 설치가 필요한 경우 (모든 노드에 1개씩 유지하게 함)
  • 새로운 노드 추가 나 노드 한개 삭제시 자동으로 파드 실행 및 삭제
  • Rolling update, back 기능도 가지고 있음
  • 편집기(yaml) 수정 후 apply 시 반영됨

 

Stateful Set

파드에 대한 상태 관리가 필요한 경우 사용되는 set 이다. 

👉 Stateful Set 주요 특징

  • 실행 순서를 보장하며 순서나 데이터가 중요한 경우 사용
  • 여러 개의 파드 사이에 순서를 지정(순차적)해서 실행 가능
    ex) N개의 레플리카로 설정 및 차례대로 {0...N} 순으로 파드 생성 가능
    ex) Replica 갯수를 늘리거나 줄일시 (Scailing) 순차 파드 생성 및 종료
    ex) 만들어지거나 종료될 때 이전 파드를 기다림
  • 파드 관리 정책 설정 가능
    ex) sepc.podManagementPolicy : OrderReady 관리 - 기본 필드값으로 파드를 순서대로 관리
    ex) sepc.podManagementPolicy : Parallel 관리 - 파드들이 순서 없이 병렬로 실행되거나 종료
  • 파드 간의 종속성을 주고 싶을 때 사용하면 유용

 

Job

Job은 실행 된 후 종료해야 하는 성격의 작업을 실행 시 사용하는 컨트롤러

👉 Job 주요 특징

  • Batch 처리하는 Pod는 작업이 완료 되면 종료됨 (단 정상 종료되도 파드 자체를 삭제하진 않음)
  • Pod의 성공적인 완료를 보장 (비정상 종료시 다시 실행) 
  • Job의 종류로는 단일 Job, 병렬 Job, Queue를 가진 병렬 Job 등 이 있음 
  • 에러나 로그에서 에러나 경고 등 확인 가능.

 

CronJob (크론잡)

Job과 동일

단, Job을 시간 기준으로 관리한다는 점이 다르며, 지정한 시간에 한번만 Job을 실행 하거나, 일정 주기마다 Job 반복 실행

 

마무리 

이번 글에서는 Kuberenetes의 Controller의 종류와 역할에 대해 알아보았습니다. 다음 글에서는 Pod에 대해 좀 더 자세히 알아보도록 하겠습니다.