| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- Strongly Connected Component
- HTTP
- reference counting
- 2-SAT
- statefulset
- Binary Lifting
- Spin Lock
- trie
- 트라이
- SCC
- ccw 알고리즘
- 강한 연결 요소
- PROJECT
- 게임 서버 아키텍처
- select 모델
- DP
- Lock-free Stack
- 자바스크립트
- Delete
- JavaScript
- 최소 공통 조상
- 비트필드를 이용한 dp
- map
- Behavior Design Pattern
- 그래프 탐색
- 벨만-포드
- 이분 탐색
- Prisma
- Github
- Overlapped Model
Archives
- Today
- Total
dh_0e
[Cloud] Kubernetes Volumes III (Downward API, Job, CronJob, DaemonSet) 본문
Cloud/Kubernetes
[Cloud] Kubernetes Volumes III (Downward API, Job, CronJob, DaemonSet)
dh_0e 2026. 5. 8. 14:08Downward API
- Pod가 자기 자신의 정보(이름, IP, label 등)를 ConfigMap이나 Secret에 미리 정의하지 않고도 런타임에 가져올 수 있게 해주는 기능
- 핵심 개념: k8s 마스터 서버를 통하지 않고, 환경 변수나 볼륨 파일을 통해 포드/컨테이너의 메타데이터를 주입하는 방식
- 환경 변수: 개별적인 값을 하나씩 변수에 할당할 때 사용 (가장 흔한 방식)
- 볼륨 마운트: 정보를 파일 형태로 제공하여 label이나 annotation처럼 내용이 수시로 변할 수 있는 정보를 실시간으로 반영하기에 좋음
- 응용 프로그래머들이 자주 사용함
- ex1) Redis, MongoDB 같은 분산 시스템을 구축할 때
- ex2) 모니터링을 위해 여러 Pod에서 로그를 수집할 때
- ex3) JVM이나 Node.js에서 리소스 제한에 따른 동적 메모리 설정을 할 때

metadata.labels, metadata.annotations는 볼륨 파일로만 접근 가능한 이유
- labels, annotations는 Key-Value 쌍의 집합이기 때문에, 환경 변수 하나에 이 수많은 목록을 다 집어넣기 힘듦
- labels는 Pod가 실행 중에도 바뀔 수 있음
- 환경 변수: 한 번 실행되면, 프로세스를 재시작하지 않는 이상 바꿀 수 없음
- 볼륨 파일: 쿠버네티스가 파일 내용을 실시간으로 업데이트해 줌
Using Downward API with Volume Mount


- labels, annotations로 metadata.labels, metadata.annotations 환경 변수로 설정
- "kubectl exec -it 'pod 이름' -- /bin/bash"로 Pod 안에 들어가서 Volume Mount 경로에 있는 파일 확인
Using Downward API with Environment Variables (1)

- spec.nodeName을 NODE_NAME에 저장하는 방식
- metadata.name, metadata.namespace, metadata.uid, spec.serviceAccountName, status.hostIP, status.podIP 들은 Volume mount로도 가능
- "kubectl exec -it 'pod 이름' -- env"로 환경변수 확인
Using Downward API with Environment Variables (2)

- 컨테이너 필드 메타데이터(requests.cpu, requests.memory, limits.cpu)는 환경 변수, 볼륨 파일 모두 가능
- "kubectl exec -it 'pod 이름' -- env"로 환경변수 확인
Downward API는 Pod 내의 컨테이너가 자신이 실행 중인 K8s 환경을 스스로 인식할 수 있게 해주는 가장 가볍고 안전한 방법
Job, CronJob
- 필요 상황: Pod를 한 번만 돌리고 사라지게 하고 싶을 때 (ex. 백업 한 번 하고 잔여 파일 삭제)
- Job: 일회성 작업을 수행하기 위한 리소스
- CronJob: 주기적인 작업을 수행하기 위한 리소스
Job

- 특징
- 성공적인 실행 보장: 지정된 작업이 성공적으로 완료될 때까지 Pod를 재시작
- 동시성 설정: 동시에 실행할 수 있는 Pod 수 조정 가능
- 완료 상태 관리: 작업 완료 후 상태 확인 가능
- 사용 사례
- 데이터 처리 Batch 작업
- 백업 및 복원 작업
- AI/ML Training(학습) Task
- DB Migration

- restartPolicy: 실패 시 컨테이너를 다시 살릴 것인가, 아니면 포드를 새로 만들 것인가?
- OnFailure: 실패 시 재시작 (컨테이너 수준의 재시작)
- Never: 실패 시 포드 새로 생성 (Pod 수준의 재시작)
- backoffLimit: Job 컨트롤러가 "이 작업은 가망이 없다"라고 판단하고 포기하기 전까지의 재시도 횟수
- restartPolicy: Never인 경우: 실패한 Pod의 개수가 backoffLimit에 도달하면 종료, Job 실패 처리
- restartPolicy: OnFailure인 경우: 컨테이너의 재시작 횟수가 backoffLimit에 도달하면 해당 Pod를 종료, Job 실패 처리
CronJob

- Job 리소스에 스케줄을 추가하여 주기적으로 실행되는 Job
- Linux의 crontab 기능과 유사하게 특정 시간 및 주기에 맞춰 작업 수행 가능
- 사용 사례
- 정기적인 데이터 백업
- 로그 파일 정리
- 정해진 시간에 반복적으로 수행되는 작업
- 특징
- 지속적으로 주기적인 작업 실행
- 일정에 맞게 Job을 생성하도록 실행 주기 설정 가능

- Scheduling: * * * * * (분 시 일 월 요일) 형식을 사용
Job & CronJob이 실패했을 때 어떻게 될 것인가?
DaemonSet
- 클러스터 내의 모든(혹은 특정 조건에 맞는) 노드에 Pod를 딱 하나씩 배치하는 리소스
- Node당 딱 하나만 만들어서 백그라운드에서 돌면서 뭔가 해야 할 일이 주어짐
- 동작 방식
- 새로운 노드가 클러스터에 추가되면 DaemonSet Pod가 자동으로 그 노드에 생성됨
- 노드가 삭제되면 해당 Pod는 Garbage Collection으로 작동
- RollingUpdate를 통해 노드별로 순차적인 업데이트가 가능
- 사용 사례
- 로그 수집기: 각 노드에서 발생하는 로그를 수집하여 중앙으로 전송
- 노드 모니터링: 각 노드의 리소스 상태를 감시
- 네트워크 플러그인: 쿠버네티스 네트워킹을 관리
'Cloud > Kubernetes' 카테고리의 다른 글
| [Cloud] HPA (Horizontal Pod Autoscaling) (0) | 2026.06.03 |
|---|---|
| [Cloud] StatefulSet (0) | 2026.06.03 |
| [Cloud] Kubernetes Volumes II (Storage Class, ConfigMap, Secret) (0) | 2026.05.04 |
| [Cloud] Kubernetes Volumes I (emptyDir, hostPath, Persistent Volume) (0) | 2026.04.21 |
| [Cloud] Kubernetes Basic (2) | 2026.04.16 |