본문 바로가기

IT 엔지니어/CLOUD

K8S- daemonset

🔁 [클러스터 전체 배포 필요한 파드]

1. DaemonSet

  • 기능: 클러스터의 모든 (또는 일부) 노드에 파드를 1개씩 배포
  • 사용 예시:
    • 로그 수집기 (예: Fluentd, Logstash)
    • 노드 모니터링 에이전트 (예: Prometheus Node Exporter)
    • 네트워크 플러그인 (예: Calico, Cilium)
  • 특징:
    • 새 노드가 클러스터에 추가되면 자동 파드 배포
    • 노드당 하나의 파드만 실행되도록 보장
kubectl api-resources

NAME SHORTNAMES APIVERSION NAMESPACED KIND

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myds

spec:
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      name: mypod
      labels:
        app: webui
    spec:
      containers:
        - name: mycon
          image: nginx:1.14

 

각 노드에 하나씩 생성

 


 

 

[JOB controller]

linux에서 at / 

**일회성 작업(배치 작업)**을 처리

배치 처리 컨트롤러
작업이 완료되면 종료되는 파드를 만드는 용도

비정상 종료 파드 재실행 후 정상 종료 실행

단기적인 작업을 수행하고 종료되는 파드를 관리

파드가 성공할 때까지 재생성 후 재시도함 (기본값: 6회)

예: DB 마이그레이션, 정기 백업, 데이터 처리 등
apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  template:
    spec:
      containers:
      - name: mycon
        image: ubuntu
        command: ["bash"]
        args:
        - "-c"
        - "echo 'Hello my JOB';sleep 60;ls -l /tmp;echo 'By My JOB'"
      restartPolicy: Never

 

 

 

 

 

 


 

[Cronjob Controller]

일정 주기로 Job을 자동 생성
cron 스케줄 형식 (* * * * *) 사용

백업, 로그 정리, 메일 전송 같은 주기적 작업에 적합
apiVersion: batch/v1
kind: CronJob
metadata:
  name: mycron
spec:
  schedule: "* * * * *"
  startingDeadlineSeconds: 5
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: mycon
            image: busybox
            args:
            - /bin/sh
            - -c
            - echo 'Hello From CronJob';sleep 10;ls -l /tmp;echo 'Bye CronJob'
          restartPolicy: Never

 

 

주기적으로 수행 확인

 

 

 

✅ 참고로 같이 자주 쓰는 설정

항목 설명

starting Deadline Seconds 잡이 실행되지 못할 경우 지연 허용 시간
concurrency Policy 동시에 여러 Job 실행 허용 여부 (Allow, Forbid, Replace)
successful Jobs History Limit 성공한 Job 몇 개 유지할지
failed Jobs History Limit 실패한 Job 몇 개 유지할지
active Deadline Seconds 실패한 Job 몇 개 유지할지
성공/실패 Job의 개수 초과 시 자동삭제

 

 

 

 

kubectl get all
kubectl describe pod -A
kubectl delete pod --all

kubectl ***replace*** -f 

구조(Selector, Volume 등) 바꾸려면 → replace

kubectl patch

kubectl delete -f deployment.yaml

 

 

 

 

 

✅ kubectl replace로 변경 가능한 것과 불가능한 것

🔄 replace로 변경 가능한 항목

  • containers → 이미지, 포트 등
  • volumes → configMap, secret, PVC 등
  • replicas → 파드 개수
  • labels (템플릿 안에서)
  • annotations

⛔ 변경 불가능한 항목 (immutable)

  • metadata.name
  • spec.selector ❌
  • spec.template.metadata.labels (선택자와 안 맞으면 오류 발생)
  • PVC의 spec.volumeName, storageClassName, accessModes 등

'IT 엔지니어 > CLOUD' 카테고리의 다른 글

K8S - STATEFULSET  (0) 2025.05.29
k8S - REPLICASET  (0) 2025.05.28
K8S Controller  (0) 2025.05.26
초기화/인프라 컨테이너  (0) 2025.05.25
K8S - Load Balance  (0) 2025.05.24