사용자가
Deployment를 생성 →ReplicaSet→Pod 생성→kubelet이 Pod 실행 →probe로 상태 체크
kubectl apply -f deployment.yaml
→ kube-apiserver로 요청 전달됨
etcd에 Deployment 정의가 저장됨
kube-controller-manager
kube-scheduler
해당 Node의 kubelet
container runtime 호출)probe 체크
livenessProbe: 컨테이너가 살아있는지readinessProbe: 요청 받을 준비가 되었는지
Service는 Pod IP가 바뀌어도 클라이언트가 고정된 주소로 접근 가능하게 해주는 네트워크 객체
NodePort Service 생성kube-apiserver → etcd에 저장kube-proxy가 Service 정보 감지iptables 업데이트NodeIP:31231로 요청iptables → 적절한 Pod IP로 라우팅kubelet이 트래픽을 컨테이너에 전달http://<NodeIP>:31231/version

민감한 정보를 etcd에 저장하고, Pod 내부에 메모리 기반 볼륨으로 마운트해서 전달
사용자가 kubectl apply -f secret.yaml 실행
→ kube-apiserver를 통해 Secret이 etcd에 저장됨
이후 생성되는 Pod가 해당 Secret을 참조하고 있으면:
kubelet이 kube-apiserver에 Secret 요청
Secret은 tmpfs 메모리 볼륨에 마운트되어 Pod 내부에 주입됨
예: /usr/src/myapp/datasource/postgresql-info.yaml
컨테이너는 위 경로에서 Secret 값을 파일 형태로 읽을 수 있음
Secret 내용이 수정되면:
kubelet이 주기적으로 이를 감지하고memory 기반 (emptyDir: medium: Memory)로 생성됨
CPU/메모리 부하가 기준을 넘으면 Pod 개수를 자동으로 늘리거나 줄이는 컨트롤러
kubectl autoscale deployment my-app --cpu-percent=50 --min=2 --max=5
| 항목 | 주기 |
|---|---|
| container 리소스 조회 | 10초 |
| kubelet 사용량 수집 | 60초 |
| controller-manager metric 조회 | 15초 |
| HPA 반응 시간 | 1~85초 |
metrics-server가 설치되어 있어야 HPA가 동작함
기본적으로 CPU/메모리 metric 기반이지만, Custom Metrics API를 통해 사용자 정의 metric으로도 확장 가능

📚 인프런 : 쿠버네티스 어나더 클래스 - 지상편