728x90
반응형
10/23(수) 필기 내용 중.
쿠버네티스(Kubernetes)는 대규모 애플리케이션을 자동으로 배포, 확장 및 운영할 수 있는 플랫폼이다. 그중에서도 컨트롤러(Controller)는 클러스터 내에서 파드(Pod)를 관리하고 안정적으로 유지하는 중요한 역할을 한다. 이번 포스팅에서는 쿠버네티스 컨트롤러의 종류와 역할을 자세히 살펴보려고 한다.
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가 필요한 파드만 배포하고 싶을 때, taint와 toleration을 사용하여 이를 조정할 수 있습니다.
[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
반응형
'Kubernetes' 카테고리의 다른 글
[Kubernetes] ReplicaSet을 이용한 Pods 배포 (5) | 2024.10.25 |
---|---|
[Kubernetes] Deployment를 이용한 Pod 배포 - Deployment와 Pods의 차이점 (0) | 2024.10.24 |
[Kubernetes] 쿠버네티스 네트워크 통신 구조 (0) | 2024.10.24 |
[Kubernetes] 쿠버네티스 서비스: Cluster IP, NodePort, Load Balancer (0) | 2024.10.24 |
[Kubernetes] 쿠버네티스 구성요소: 클러스터, 노드, 파드, 컨테이너 (2) | 2024.10.23 |