1. Deployment, ReplicaSet, DaemonSet, StatefulSet 구성
1.1 Deployment
Deployment는 애플리케이션의 무중단 배포, 롤링 업데이트, 롤백 등을 지원하는 가장 일반적인 리소스이다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
1.2 ReplicaSet
ReplicaSet은 지정한 수의 동일한 Pod가 항상 동작하도록 보장하는 역할을 한다. 보통은 Deployment를 통해 생성되며, 단독 사용은 거의 하지 않는다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-rs
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
1.3 DaemonSet
DaemonSet은 클러스터의 모든 노드에 하나씩 Pod를 실행하고자 할 때 사용한다. 대표적인 예는 로그 수집, 모니터링 에이전트 등이다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: log-agent
spec:
selector:
matchLabels:
app: agent
template:
metadata:
labels:
app: agent
spec:
containers:
- name: agent
image: fluentd
1.4 StatefulSet
StatefulSet은 고유한 네트워크 ID와 고정된 스토리지를 갖는 상태 저장 애플리케이션에 사용한다. 예: Cassandra, MongoDB, etcd 등.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
2. Job, CronJob 생성 및 관리
2.1 Job
Job은 일회성 작업을 위한 리소스로, 지정된 수의 성공적인 Pod 완료를 보장한다.
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
2.2 CronJob
CronJob은 리눅스의 크론처럼 특정 시간마다 Job을 실행한다.
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from Kubernetes
restartPolicy: OnFailure
3. Pod Lifecycle 및 Restart 정책 이해
Pod Lifecycle 주요 상태
- Pending: 스케줄되었으나 컨테이너 생성 전
- Running: 컨테이너가 하나 이상 실행 중
- Succeeded: 모든 컨테이너 정상 종료
- Failed: 컨테이너 하나 이상 비정상 종료
- Unknown: 상태를 알 수 없음
Restart 정책
- Always (기본값): 항상 재시작 (Deployment 사용 시 기본)
- OnFailure: 실패 시 재시작 (Job 등에서 사용)
- Never: 절대 재시작하지 않음
4. initContainer, sidecar 패턴
4.1 initContainer
initContainer는 메인 컨테이너가 시작되기 전 필요한 작업을 처리한다. 예: 설정 복사, 외부 서비스 체크 등
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'echo initializing... && sleep 5']
4.2 Sidecar 패턴
Sidecar는 메인 컨테이너를 보조하는 컨테이너로, 같은 Pod 내에서 함께 실행된다. 예: 로그 수집, 프록시 등
※ CKA mock exam에서 SideCar 패턴을 구현하는 문제가 있는데, 정답 코드에는 initContainer로 구현되어있다. initContainer는 한 번 실행되고 종료되는 일회성 컨테이너이기 때문에, sidecar처럼 계속 동작하거나 반복 실행되게 만드는 것과는 어울리지 않는다. 목적 상 아무리 봐도 container로 구현하는게 맞는 것 같다... (개인적인 생각)
containers:
- name: app
image: myapp
- name: sidecar-logger
image: fluentd
'Cloud > Kubernetes' 카테고리의 다른 글
| [CKA - 5] 스토리지 관리 (0) | 2025.08.20 |
|---|---|
| [CKA - 4] 네트워킹 & 서비스 (0) | 2025.08.19 |
| [CKA - 3] 스케줄링 및 노드 관리 (0) | 2025.08.08 |
| [CKA - 1] Kubernetes 클러스터 구성 및 관리 (1) | 2025.08.06 |
| [CKA] 환경구성 없이 2025 CKA 합격 (1) | 2025.08.05 |