DevOps/K8S

[k8s] 배포 흐름

kyoulho 2024. 8. 28. 20:57

쿠버네티스는 선언적인 시스템(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와 같은 모니터링 시스템을 통해 파드 및 클러스터의 상태를 모니터링하고, 로그를 수집하여 분석한다.
    • 로그 및 메트릭은 문제 해결이나 성능 최적화를 위해 사용된다.

'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