본문 바로가기
Kubernetes

[Kubernetes] 쿠버네티스 컨트롤러: Deployment, ReplicaSet, Job, CronJob, DaemonSet

by sum_mit45 2024. 10. 23.
728x90
반응형
10/23(수) 필기 내용 중.

 

쿠버네티스(Kubernetes)는 대규모 애플리케이션을 자동으로 배포, 확장 및 운영할 수 있는 플랫폼이다. 그중에서도 컨트롤러(Controller)는 클러스터 내에서 파드(Pod)를 관리하고 안정적으로 유지하는 중요한 역할을 한다. 이번 포스팅에서는 쿠버네티스 컨트롤러의 종류와 역할을 자세히 살펴보려고 한다.

출처: https://ynslee627.tistory.com/213

1. Deployment (디플로이먼트)

  • 쿠버네티스에서 상태가 없는(stateless) 애플리케이션을 배포할 때 사용하는 기본적인 컨트롤러
  • 이는 애플리케이션의 파드(Pod)를 관리하고 배포하는 상위 개념으로, 자동으로 파드의 개수를 조정하거나 롤링 업데이트를 통해 서비스 중단 없이 배포할 수 있다.
  • ReplicaSet과의 관계: Deployment는 ReplicaSet을 관리하며, 파드의 복제본 개수(레플리카)를 조정하여 애플리케이션의 가용성을 보장한다.

[yaml 파일 기본 구조]

apiVersion: apps/v1
kind: Deployment
metadata:
   name: 이름
   labels:
	app: 레이블 설정
	
	spec:
	   replicas: 레플리카 개수
	   selector:

	  metadata: 파드 실행 설정

2. ReplicaSet

  • 파드의 복제본(레플리카)을 관리하는 컨트롤러로, 정의된 수의 파드가 항상 클러스터에 유지되도록 보장한다.
  • 만약 파드가 삭제되거나 장애가 발생하면 자동으로 새로운 파드를 생성한다. 
  • ReplicaSet vs ReplicationController: ReplicaSet은 더 유연한 집합 기반의 레이블 선택 연산자(in, not in, exists 등)를 지원하는 반면, ReplicationController는 등호 기반의 연산자(=, !=)만을 지원한다.
  • ReplicaSet 자체로는 롤링 업데이트를 지원하지 않으므로 Deployment와 함께 사용하는 것이 일반적이다.

3. Job (잡)

  • 하나 이상의 파드를 실행하고, 지정된 수의 파드가 성공적으로 완료되도록 관리하는 컨트롤러 
  • 일회성 작업이나 배치 작업에 유용하며, 장애가 발생하거나 노드가 재부팅되더라도 다른 노드에서 파드를 재시작하여 안정적인 작업 수행을 보장한다.

[yaml 파일 기본 구조]

apiVersion: batch/v1
kind: Job
metadata:
	name: 잡이름
spec:
	template:
		metadata:
			name: 하나의 템플릿 이름
		spec:
			containers:
name: 컨테이너이름
image: 이미지이름
command: [명령어]
			    restartPolicy: 정책

 

4. CronJob

  • Job의 일종으로 특정 시간에 특정 파드를 실행시키는 컨트롤러
  • 주로 주기적인 작업, 예를 들어 데이터베이스 백업이나 애플리케이션 로그 정리 같은 작업에 사용된다.
  • 스케줄링 형식은 cron의 구문을 따른다.

[yaml 파일 기본 구조]

apiVersion: batch/v1
kind: CronJob
metadata:
	name: 잡이름
spec:
schedule: “*/1 * * * * *” #linux의 cron 작업을 할 때 스케쥴링하는 것 과 동일	
jobTemplate:
		metadata:
			name: 하나의 템플릿 이름
		spec:
			containers:
name: 컨테이너이름
image: 이미지이름
args:
	/bin/sh
	-c
date; echo Hello this is Cron test
			    restartPolicy: 정책

 

5. DaemonSet

  • 클러스터 내의 모든 노드 또는 특정 노드에서 하나의 파드를 실행하고 유지하는 컨트롤러.
  • 일반적으로 노드마다 반드시 배치해야 하는 작업에 적합하다. 노드에 대한 성능 모니터링, 로그 수집, 네트워크 관리와 같은 작업을 위해 사용된다.
  • Deployement vs Daemonset: Deployment는 파드의 개수와 배포 전략을 설정하지만, DaemonSet은 특정 노드 또는 모든 노드에 파드를 배포하고 관리한다.
  • Taints와 Tolerations: 때로는 특정 워커 노드에만 특정 성격의 파드 를 배포해야 할 때가 있다. 예를 들어 GPU가 설치된 노드에 GPU가 필요한 파드만 배포하고 싶을 때, tainttoleration을 사용하여 이를 조정할 수 있습니다.

[yaml 파일 기본 구조]

apiVersion: apps/v1
kind: DaemonSet
metadata:
	name: 이름
	labels:
		app: 레이블	#데몬셋을 식별할 수 있는 레이블을 설정
spec:
	selector:
		matchLabels:
			app: 앱의 레이블
	template:
		metadata:
			labels:
				app: 앱의 레이블
	spec:
		tolerations:
key: node-role/master
effect: NoSchedule

 

728x90
반응형