개요
컨트롤러는 포드를 관리하는 역할을 합니다.
- 레플리케이션 컨트롤러
- 레플리카세트
- 디플로이먼트
- 데몬세트
- 스테이트풀세트
- 잡
- 크론잡
레플리케이션 컨트롤러
초기부터 있었던 가장 기본적인 컨트롤러입니다. 설정한 개수만큼의 포드가 항상 클러스터 내 실행되도록 관리합니다.
컨트롤러를 사용하지 않고 포드를 직접 실행하면 포드에 이상이 생겨 종료되거나 삭제되었을 때 재시작하기 어렵습니다.
현재는 레플리케이션 컨트롤러보다는 레플리카세트를 주로 사용하고 있습니다.
레플리카세트
레플리카세트는 레플리케이션 컨트롤러의 발전형입니다. 레플리케이션 컨트롤러와 같이 동작하지만 집합 기반의 셀럭터를 지원한다는 차이점이 존재합니다.
아래는 레플리카세트 yaml (replicaset-nginx.yaml) 예시입니다.
apiVersion: apps/v1
kind: Replicaset
metadata:
name: nginx-replicaset
spec:
template:
metadata:
name: nginx-replicaset
labels:
app: nginx-replicaset
spec:
containers:
- name: nginx-replicaset
image: nginx
ports:
- containers: 80
replicas: 3
selector:
matchLabels:
app: nginx-replicaset
아래 명령으로 레플리카세트를 실행할 수 있습니다.
kubectl apply -f replicaset-nginx.yaml
아래 명령으로 레플리카세트 상태를 확인할 수 있습니다.
kubectl get replicast
포드는 레이블 기준으로 관리되기 때문에, 레플리카세트와 포드는 느슨하게 결합되어 있습니다.
디플로이먼트
디플로이먼트는 쿠버네티스에서 스테이트레스 앱을 배포할 때 사용하는 컨트롤러입니다.
디플로이먼트는 레플리카세트를 관리하면서 앱 배포를 세밀하게 관리합니다. 포드 개수 유지 외 롤링 업데이트, 롤백 등을 같이 지원합니다.
아래는 디플로이먼트 yaml (deployment-nginx.yaml) 예시입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deployment
template:
metadata:
labels:
app: nginx-deployment
spec:
containers:
- name: nginx-deployment
image: nginx
ports:
- containerPort: 80
아래 명령으로 디플로이먼트를 실행할 수 있습니다.
kubectl apply -f deployment-nginx.yaml
아래 명령으로 디플로이먼트 상태를 확인할 수 있습니다.
kubectl get deploy
아래 명령으로 디플로이먼트 히스토리를 확인하고 롤백할 수 있습니다.
# 디플로이먼트 히스토리 확인
kubectl rollout history deploy nginx-deployment
# 디플로이먼트 히스토리 확인 (특정 리비전 확인, 리비전 4 확인)
kubectl rollout history deploy nginx-deployment --revision=4
# 디플로이먼트 롤백 (바로 이전 리비전으로 변경)
kubectl rollout undo deploy nginx-deployment
# 디플로이먼트 롤백 (특정 리비전으로 변경, 리비전 2로 롤백)
kubectl rollout undo deploy nginx-deployment --to-revision=2
아래 명령으로 디플로이먼트 포드 개수를 조정할 수 있습니다.
# 레플리카세트 5로 변경
kubectl scale deploy nginx-deployment --replicas=5
데몬세트
데몬세트는 클러스터 전체 노드에 특정 포드를 실행할 때 사용하는 컨트롤러입니다.
클러스터 내 신규 노드가 추가되었을 때 데몬세트가 자동으로 해당 노드에 포드를 실행시킵니다. 반대로 노드가 클러스터에서 제외되었을 때 제외된 노드에서 포드를 삭제합니다.
데몬세트는 일반적으로 노드 모니터링이나 로그 수집을 위해 클러스터 전체 노드에 항상 실행시켜야 하는 포드에 사용합니다.
스테이트풀세트
레플리케이션 컨트롤러, 레플리카세트, 디플로이먼트는 모두 스테이트레스 포드를 관리하는 용도입니다. 스테이트풀세트는 스테이트풀 포드를 관리하는 컨트롤러입니다.
잡
잡은 실행된 후 종료되어야 하는 성격의 작업을 위한 컨트롤러입니다.
아래는 잡 yaml(hello-world.yaml) 예시입니다.
apiVersion: batch/v1
kind: Job
metadata:
name: hello-world
spec:
template:
spec:
containers:
- name: hello-world
image: busybox
command: ["echo", "Hello, World!"]
restartPolicy: Never
backoffLimit: 4
아래 명령으로 잡을 실행할 수 있습니다.
kubectl apply -f hello-world.yaml
크론잡
크론잡은 잡을 시간 기준으로 관리하도록 합니다. 지정된 시간에 한번만 잡을 실행하거나 지정된 시간동안 반복적으로 잡을 실행할 수 있습니다. 리눅스 cron 명령어에서 사용하는 옵션을 동일하게 제공합니다.
아래는 크론잡 yaml(hello-world-cron.yaml) 예시입니다.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello-world
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello-world
image: busybox
args:
- /bin/sh
- -c
- data; echo Hello World
restartPolicy: OnFailure
아래 명령으로 크론잡을 실행할 수 있습니다.
kubectl apply -f hello-world-cron.yaml
'K8s' 카테고리의 다른 글
kube-proxy (0) | 2025.04.20 |
---|---|
서비스 (Service) (0) | 2025.04.20 |
포드 (Pod) (0) | 2025.03.31 |
K8s Cluster 구조 (0) | 2025.03.29 |
kubectl (0) | 2025.03.29 |