본문 바로가기

가상 머신/쿠버네티스

[ 쿠버네티스 / Kurbernetes ] 이미지가 컨테이너에서 실행되는 과정 순서대로 보기

반응형

쿠버네티스(Kubernetes)에서 이미지를 사용하여 컨테이너를 실행하는 과정은 여러 단계를 거쳐 이루어집니다.
이 과정은 사용자가 kubectl 명령어를 실행하는 순간부터 시작하여, 실제로 컨테이너가 실행될 때까지의 일련의 작업을 포함합니다.
아래는 그 순서를 설명한 내용입니다.

1. 사용자가 명령어를 실행

사용자가 kubectl 명령어를 사용하여 포드를 생성하거나, 배포(Deployment)를 생성합니다.

kubectl apply -f deployment.yaml

2. API 서버로 요청 전송

kubectl 명령어는 Kubernetes API 서버(kube-apiserver)로 요청을 보냅니다. API 서버는 클러스터의 중앙 제어 포인트로, 모든 작업을 조정합니다.

3. API 서버에서 요청 처리

API 서버는 요청을 받아들여, 이를 등cd 데이터베이스에 저장합니다. etcd는 Kubernetes의 분산 키-값 저장소로, 클러스터의 모든 상태 정보를 저장합니다.

4. 컨트롤러 매니저가 요청 감지

API 서버에 의해 저장된 상태 변경을 컨트롤러 매니저(kube-controller-manager)가 감지합니다. 컨트롤러 매니저는 클러스터의 상태를 원하는 상태로 유지하기 위해 다양한 컨트롤러를 실행합니다.

5. 스케줄러가 포드 할당

스케줄러(kube-scheduler)는 새로운 포드를 적절한 워커 노드에 할당합니다. 스케줄러는 리소스 요구 사항, 정책, 노드의 상태 등을 고려하여 최적의 노드를 선택합니다.

6. kubelet이 포드 생성 요청 수신

선택된 노드의 kubelet은 API 서버로부터 포드 생성 요청을 수신합니다. kubelet은 각 노드에서 실행되는 에이전트로, 컨테이너의 생성, 시작, 모니터링을 담당합니다.

7. 컨테이너 런타임을 통한 이미지 다운로드

kubelet은 컨테이너 런타임(Docker, containerd 등)을 사용하여 필요한 컨테이너 이미지를 다운로드합니다. 이미지는 컨테이너 레지스트리(예: Docker Hub, Google Container Registry 등)로부터 가져옵니다.

8. 컨테이너 생성 및 시작

이미지가 다운로드되면 컨테이너 런타임은 이를 바탕으로 컨테이너를 생성하고 시작합니다. 이 과정에서 설정된 포드 스펙에 따라 네트워크 설정, 볼륨 마운트 등이 수행됩니다.

9. 네트워크 설정 및 서비스 연결

컨테이너가 실행되면 kubelet은 CNI(Container Network Interface) 플러그인을 사용하여 네트워크 설정을 수행합니다. 또한, kube-proxy는 클러스터 내에서 서비스 디스커버리와 로드 밸런싱을 지원합니다.

10. 상태 보고

kubelet은 실행 중인 포드의 상태를 지속적으로 모니터링하고, 이를 API 서버에 보고합니다. 컨트롤러 매니저와 스케줄러는 이 정보를 바탕으로 클러스터의 상태를 관리합니다.

11. 요약된 순서

  1. 명령어 실행: kubectl 명령어로 포드 생성 요청.
  2. API 서버: 요청을 받아들여 etcd에 저장.
  3. 컨트롤러 매니저: 요청을 감지하고 작업을 시작.
  4. 스케줄러: 포드를 적절한 노드에 할당.
  5. kubelet: 포드 생성 요청을 수신.
  6. 이미지 다운로드: 컨테이너 런타임을 통해 필요한 이미지 다운로드.
  7. 컨테이너 생성: 이미지를 바탕으로 컨테이너를 생성하고 시작.
  8. 네트워크 설정: CNI 플러그인을 통해 네트워크 설정 수행.
  9. 상태 보고: 포드의 상태를 지속적으로 API 서버에 보고.

이 과정을 통해 Kubernetes는 사용자 요청에 따라 컨테이너를 적절하게 배포하고 실행합니다.
각 단계는 Kubernetes의 다양한 구성 요소들이 협력하여 이루어지며, 클러스터의 상태를 원하는 대로 유지하는 데 중요한 역할을 합니다.

반응형