카테고리 없음

[ K8S ] 쿠버네티스 파드 생성 및 실행 순서

궁금한게 많은 개발자 2025. 5. 7. 17:02

Kubernetes에서 Pod 생성 및 실행 순서

 

  1. 사용자가 Pod 생성 요청
    • kubectl apply -f pod.yaml 명령어 등을 통해 사용자가 Pod 생성 요청을 합니다.
    • 요청은 Kubernetes API Server에 전달됩니다.
  2. API Server에서 요청 처리 및 etcd에 저장
    • API Server는 요청을 인증하고, 필요한 Admission Controller를 거친 후, etcd에 해당 Pod 객체를 저장합니다.
  3. Scheduler에 의해 노드 선정
    • Scheduler는 클러스터의 상태를 고려하여 해당 Pod를 실행할 적절한 노드를 선택합니다.
    • 선택된 노드 정보는 다시 etcd에 업데이트됩니다.
  4. 선택된 노드의 kubelet이 Pod 실행 시작
    • 선택된 노드의 kubelet은 API Server로부터 해당 Pod의 정보를 받아 실행을 시작합니다.
  5. (필요 시) CSI를 통한 스토리지 프로비저닝 및 마운트
    • Pod에 PersistentVolumeClaim(PVC)이 명시되어 있다면, kubelet은 CSI(Container Storage Interface)를 통해 필요한 PersistentVolume(PV)을 프로비저닝하고, 해당 볼륨을 노드에 마운트합니다.
  6. Pod Sandbox 생성
    • kubelet은 컨테이너 런타임을 통해 Pod Sandbox를 생성합니다.
    • 이 Sandbox는 Pod 내의 네트워크 및 IPC 등의 공유 리소스를 관리하는 기본 컨테이너입니다.
  7. CNI를 통한 네트워크 설정
    • kubelet은 CNI(Container Network Interface) 플러그인을 호출하여 Pod에 대한 네트워크 설정을 수행합니다.
    • 이 과정에서 veth 인터페이스 생성, IP 할당, 라우팅 설정 등이 이루어집니다.
  8. CRI를 통한 컨테이너 생성 및 시작
    • kubelet은 CRI(Container Runtime Interface)를 통해 컨테이너 런타임에게 실제 애플리케이션 컨테이너를 생성하고 시작하도록 요청합니다.
    • 컨테이너 런타임은 필요한 이미지를 풀링하고, 컨테이너를 생성하여 실행합니다.
  9. (필요 시) CDI를 통한 특수 하드웨어 리소스 할당
    • Pod에 GPU 등 특수 하드웨어 리소스가 필요한 경우, CDI(Container Device Interface)를 통해 해당 리소스를 할당합니다.
  10. Pod 상태 업데이트 및 서비스 시작
    • 모든 컨테이너가 정상적으로 시작되면, kubelet은 API Server에 해당 Pod의 상태를 Running으로 업데이트합니다.
    • 이후, 해당 Pod는 클러스터 내에서 서비스 트래픽을 처리할 준비가 완료됩니다.

 

컨트롤 플레인과 워커 노드에 대한 전반적인 구성도