쿠버네티스는 선언적인 시스템(Declarative System)으로, 사용자가 원하는 시스템의 상태를 정의하고, 시스템이 이 상태를 유지하도록 하는 방식으로 동작한다.
API 서버
- 쿠버네티스 API 서버는 클러스터의 중앙 API 엔드포인트로, 사용자와 클러스터 간의 인터페이스 역할을 한다.
- 사용자가 쿠버네티스 클러스터에 요청을 보내면, API 서버가 이 요청을 처리하고 클러스터의 상태를 업데이트한다.
- API 서버는 모든 리소스의 현재 상태를 관리하고, 이를 etcd에 기록한다.
etcd
etcd
는 쿠버네티스의 분산 키-값 저장소로, 클러스터의 구성 정보를 영구적으로 저장한다.- 모든 쿠버네티스 리소스의 상태는
etcd
에 저장되며, API 서버는 이 정보를 읽고 쓴다. etcd
는 클러스터의 현재 상태와 목표 상태를 저장한다.
파드 생성 흐름
1. 파드 생성 요청
- kubectl create pod(s) → API 서버 & etcd
- 사용자가
kubectl create
명령어를 통해 파드 생성 요청을 보낸다. kubectl
은 API 서버에 요청을 전달하고, API 서버는 요청된 리소스의 상태 정보를 etcd에 저장한다.
- 사용자가
2. 파드 생성 감시
- API 서버 & etcd → 컨트롤러 매니저
- API 서버는 etcd에 저장된 상태를 바탕으로 파드 생성 요청을 감시한다.
- 컨트롤러 매니저는 API 서버로부터 새로운 파드 생성 요청을 확인하고 이를 처리할 준비를 한다.
3. 파드 생성
- 컨트롤러 매니저 → API 서버 & etcd
- 컨트롤러 매니저는 API 서버를 통해 새로운 파드를 생성한다.
- 생성된 파드의 정보는 etcd에 저장되고, 이 상태는 API 서버에 반영된다.
4. 새로운 파드가 워커 노드에 들어갔는지 감시
- API 서버 & etcd → 스케줄러
- 스케줄러는 API 서버와 etcd에서 파드의 상태를 모니터링하고, 새로운 파드가 적절한 워커 노드에 스케줄링되었는지 확인한다.
- 스케줄러가 파드의 배치를 결정하면, 파드는 해당 워커 노드에 배포된다.
5. 파드 배치 및 실행
- 스케줄러 → 워커 노드 (kubelet)
- 스케줄러가 파드를 특정 워커 노드에 스케줄링하면, 해당 워커 노드의
kubelet
이 파드를 실행할 준비를 한다. kubelet
은 API 서버에서 파드의 스펙을 가져와 워커 노드에서 파드를 생성하고, 필요한 컨테이너 이미지를 다운로드한 후 컨테이너를 실행시킨다.
- 스케줄러가 파드를 특정 워커 노드에 스케줄링하면, 해당 워커 노드의
6. 파드의 상태 모니터링
- kubelet → API 서버 & 컨트롤러 매니저
kubelet
은 파드의 상태를 주기적으로 확인하고, 이 정보를 API 서버에 보고한다.- API 서버는 이 정보를 etcd에 저장하여 전체 클러스터의 상태를 최신으로 유지한다.
- 컨트롤러 매니저는 파드가 정상적으로 실행되고 있는지 감시하고, 필요시 재시작이나 복구 작업을 수행한다.
7. 서비스와의 연결
- 파드 → 서비스
- 만약 파드가 서비스와 연관되어 있다면, 서비스는 해당 파드와의 트래픽을 처리할 수 있도록 네트워크 연결을 설정한다.
- 서비스는 로드 밸런싱을 통해 여러 파드로 트래픽을 분산시키고, 파드 간의 통신을 관리한다.
8. 파드 종료 또는 재시작
- 컨트롤러 매니저 & kubelet
- 파드가 종료되거나 장애가 발생하면,
kubelet
은 이를 API 서버에 보고한다. - 컨트롤러 매니저는 필요한 경우 새로운 파드를 생성하거나 종료된 파드를 복구한다.
- 파드가 종료되거나 장애가 발생하면,
9. 로그와 모니터링
- 모니터링 시스템 → API 서버 & etcd
- 쿠버네티스는 Prometheus와 같은 모니터링 시스템을 통해 파드 및 클러스터의 상태를 모니터링하고, 로그를 수집하여 분석한다.
- 로그 및 메트릭은 문제 해결이나 성능 최적화를 위해 사용된다.
728x90
'DevOps > K8S' 카테고리의 다른 글
[k8s] Pod (0) | 2024.08.29 |
---|---|
[k8s] NodePort (0) | 2024.08.29 |
[k8s] Namespace (0) | 2024.08.28 |
[k8s] Service (0) | 2024.08.28 |
[K8s] 설치 시 스왑 비활성화의 필요성 (0) | 2024.08.26 |