본문 바로가기

IT 엔지니어/CLOUD

K8S Controller

✅ 쿠버네티스 컨트롤러 정리

컨트롤러 종류 역할 및 설명 사용 예시 특이사항

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