본 포스팅은 따배쿠(따라하면서 배우는 쿠버네티스)을 보고 정리한 내용입니다.
docker push hub.example.com/nginx
- 개발자 혹은 운영자가 컨테이너를 쿠버네티스 플랫폼에 올려 사용하는 것이 목적입니다.
- 컨테이너 엔진(docker)를 이용하여 컨테이너를 빌드(생성)
Image nginx is pushed to Docker Hub
- 생성한 컨테이너 이미지를 컨테이너 저장소 (Docker Hub)에 업로드합니다.
- Docker Hub는 사내에 만들어졌을 수도 있고(Private) Docker Hub(Public)를 사용할 수도 있습니다.
kubectl create deploy web --image=hub.example.com/nginx or yaml 파일
- 쿠버네티스 명령어를 통해 생성한 컨테이너가 실행되도록 요청합니다.
kubectl issues REST call
- kubectl 명령이 Control-plane으로 전달됩니다.
- Master에는 REST API Server가 있어서 kubectl의 명령어를 받아들입니다.
Pod created and scheduled to a worker node
- 작업 중인 Node 중 어느 노드에 Pod가 생성되면 좋을지 Scheduler에게 API서버가 etcd 정보를 가지고 요청합니다.
- Scheduler는 노드들의 상태들을 보고 어느 노드가 가장 놓을지 선택 후 응답합니다.
etcd란??
- worker 노드들에 대한 상태 정보(하드웨어 리소스, 컨테이너 동작중인 상태, 이미지 상태)를 kublet(kubelt damon, cAdvisor)이 현재 이 워커노드에 컨테이너 기반 상태 정보 + 하드웨어 상태 정보도 수집하고 API server에 전달하고 이 정보를 etcd에 저장한다.
- 쿠버네티스 상태 정보도 저장한다.(deploy 요청..그 요청에 따른 실행 정보)
- API 서버는 문법체크를 하고 etcd 정보를 확인하고, 그 정보를 가지고 스케줄러에게 요청을 함
Kubelet is notified
- kubelet은 API 서버를 통해 etcd에 적힌 내용을 기반으로 pod를 생성한다.
kubelet instructs Docker to run the image
- kubelet은 요청을 받아서 도커 명령어로 바꿔서 docker daemon에게 실제 컨테이너 실행 요청을 진행한다.