✅ 쿠버네티스 컨트롤러 정리
컨트롤러 종류 역할 및 설명 사용 예시 특이사항
Deployment | ReplicaSet을 통해 파드를 관리하며 롤링 업데이트, 롤백 등 제공 | 웹서버, 앱 서버 배포 | 가장 많이 사용됨 |
ReplicaSet | 지정된 수의 파드를 유지함 | Deployment 내부에서 사용됨 | 단독 사용은 드묾 |
Pod | 컨테이너 실행 단위 | nginx, redis 등 단일 실행 | 컨트롤러 없이 사용 시 복구 불가 |
StatefulSet | 고정된 이름, 순서, 저장소 등 상태가 중요한 파드 관리 | DB, Kafka, Zookeeper | 순서/볼륨 보장 |
DaemonSet | 모든 노드에 1개씩 파드 배포 | 로그 수집기, 모니터링 | 노드 단위 실행 |
Job | 한 번만 실행되는 작업 | DB 백업, 배치 처리 | 실행 완료 후 종료 |
CronJob | 주기적으로 실행되는 Job | 1시간마다 로그 정리 | 내부에서 Job 생성 |
HPA (자동 확장기) | 파드 리소스 사용률에 따라 수평 확장 | CPU 70% 초과 시 자동 증가 | Deployment 등과 함께 사용 |
kubectl rollout history deployment [name]
롤링 업데이트
1. 명령어
kubectl set image deployment [] nginx=nginx:1.14 --record
2. 야물파일 수정
kubectl edit deployment []
자동 적용
2-1. kubectl apply/replace -f [].yml
1. ✅ Deployment 예제
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deploy
spec:
replicas: 3
selector:
matchLabels:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80
🔹 롤링 업데이트, 롤백 가능
🔹 ReplicaSet 자동 생성됨
2. ✅ ReplicaSet 예제 (직접 사용은 드묾)
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-rs
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: nginx:1.15 / edit 시 충돌방지
🔹 지정한 파드 수 유지
🔹 Deployment가 내부적으로 사용
3. ✅ Pod 예제
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
🔹 가장 기본 단위
🔹 실패 시 자동 복구 안 됨
4. ✅ DaemonSet 예제
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemon
spec:
selector:
matchLabels:
app: log-agent
template:
metadata:
labels:
app: log-agent
spec:
containers:
- name: filebeat
image: elastic/filebeat:7.10.0
🔹 모든 노드에 1개씩 파드 배포
🔹 로그 수집기, 모니터링 등에 활용
5. ✅ StatefulSet 예제
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-stateful
spec:
serviceName: "nginx"
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
🔹 이름, 순서, 스토리지 고정됨
🔹 DB, Kafka 등에 사용
6. ✅ Job 예제 (일회성)
apiVersion: batch/v1
kind: Job
metadata:
name: hello-job
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo", "Hello, Kubernetes!"]
restartPolicy: Never
🔹 한 번 실행되고 성공하면 종료됨
🔹 백업, 마이그레이션 등에 사용
7. ✅ CronJob 예제 (주기 실행)
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cron
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: cronjob
image: busybox
command:
- /bin/sh
- -c
- echo "Hello from CronJob"; sleep 10
restartPolicy: Never
🔹 일정 주기로 Job 실행
🔹 로그 정리, 백업 자동화 등
8. ✅ HPA (Horizontal Pod Autoscaler)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-deploy
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
🔹 리소스(CPU/메모리) 기반 자동 확장
🔹 Deployment, ReplicaSet 등과 연결
🔹 POD 관리 가능
'IT 엔지니어 > CLOUD' 카테고리의 다른 글
k8S - REPLICASET (0) | 2025.05.28 |
---|---|
K8S- daemonset (0) | 2025.05.27 |
초기화/인프라 컨테이너 (0) | 2025.05.25 |
K8S - Load Balance (0) | 2025.05.24 |
K8S 실습 (1) | 2025.05.23 |