-
[따배쿠] 쿠버네티스 컨테이너 동작 Flowkubernetes 2024. 11. 9. 18:00
[쿠버네티스 컨테이너 동작 Flow]
- 동작 흐름
- User(개발자/운영자)는 필요한 여러 컨테이너를 빌드한다.
- docker push를 통해 도커 허브에 저장한다.
- k8s 명령어를 통해, 도커 허브에 있는 이미지를 가지고 컨테이너 실행 요청을 master node에게 보낸다. ex) kubectl create deploy web --image=hub.examle.com/nginx
- Master node(컨트롤 플레인)이 요청을 받는다
- Master node의 REST API server가 Scheduler에게 어떤 노드에 컨테이너를 실행하면 좋을지 질문하고, 응답 받는다.응답받은 노드의 kubelet에 요청을 전달한다. ex) 최적 노드가 node1일 경우 node1의 kubelet
- kubelet은 받은 요청을 docker 명령으로 바꿔서 docker demon에게 실제 컨테이너 실행 요청을 한다. ex) node1의 kubelet은 node1의 Docker demon에 실행 요청
- Docker demon은 받은 요청대로 실제 도커 허브에 이미지가 존재하는지 확인하고, 컨테이너를 실행시킨다.
이렇게 작동하는 컨테이너를 'pod'라고 일컫는다.
[상세 1 : 쿠버네티스 컴포넌트]
1. Master node (Control plane) 컴포넌트
- etcd : key-value 타입의 쿠버네티스 상태 정보 저장소 (보통 worker node들의 상태 정보, 쿠버네티스 상태 정보, 실행 중인 Docker container 정보, 이미지 상태 등을 저장하고 있음)
- kube-apiserver (거의 Main Role) : k8s api를 사용하도록 요청을 받고, 요청이 유효한지 검사
- kube-scheduler : 파드를 실행할 최적 노드 선택
- kube-controller-manager : 파드를 관찰하며 생성 개수 보장
보통 Worker node 컴포넌트 내 kubelet에 cAdvisor라는 컨테이너 모니터링 툴이 내장되어 있는데
이를 통해 kubelet이 컨테이너 상태 정보를 etcd 저장소에 전달한다 ~~ 이런 느낌 ㅎ
2. Worker node 컴포넌트- kubelet : 모든 노드에서 실행되는 k8s 에이전트, 데몬 형태로 동작 (컨테이너 모니터링 툴인 cAdvisor가 속해있다.)
- kube-proxy : k8s의 network 동작 관리, iptables rule을 구성
- 컨테이너 런타임 : 컨테이너를 실행하는 엔진 ex) Docker, Containerd, runc
현재 컨테이너 엔진으로는 Docker, 컨테이너 오케스트레이션으로는 k8s를 주로 사용한다 ! !
[상세 2 : 쿠버네티스 컴포넌트 동작 흐름]
Flow
1. User가 pod 생성 명령 요청 (CLI 명령 OR yaml 파일) ex) kubectl run webui --image=nginx:1.14
2. Master node의 api server가 해당 요청을 받고 문법이나 권한이 합당한지 확인한다.
3. 또한 api server가 etcd 저장소에 있는 정보를 확인해서, scheduler에게 요청을 보낸다.
컨테이너를 실행할 때 어떤 node에 배포하는게 제일 최적일까? 라는 요청
4. scheduler는 api server가 준 etcd 저장소 정보를 통해, 어떤 node에 배포하는 게 최적일지 판단 후 응답 ex) node2가 최적일 거 같아!
5. api server는 해당 정보를 가지고 Worker node 내 kubelet에 접속한다. ex) node2에 접속
6. api server은 해당 Worker node의 kubelet에 컨테이너 실행 명령을 전달한다. ex) kubelet아 nginx 웹 서버 컨테이너 하나 실행해줘~
7. kubelet은 docker에게 도커 명령어로 컨테이너 실행 명령을 내린다. ex) Docker야 nginx 웹 서버 컨테이너 하나 실행해줘~
8. Docker은 Docker hub에서 원하는 nginx 이미지가 있는지 확인 후, 동작한다.
** controller는 파드를 모니터링 하다가, pod 개수가 요청만큼 존재하지 않을 때 api server에 전달하여
파드 개수를 보장해준다.
[Add on]
1. 네트워크 애드온
- CNI (weave, callico, flaneID, kube-route ...)
2. DNS 애드온
- coreDNS
3. 대시보드 애드온
4. 컨테이너 자원 모니터링
- cAdvisor
5. 클러스터 로깅
- 컨테이너 로그, k8s 운영 로그들을 수집하여 중앙화
- ELK (ElasticSearch, Logstash, Kibana), EFK (ElasticSearch, Fluentd, Kibana), DataDog 등
참고 영상
https://www.youtube.com/watch?v=Iue9TC13vPQ&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=8
'kubernetes' 카테고리의 다른 글
[따배쿠] Pod - liveness Probe를 이용해서 Self-healing Pod 만들기 (1) 2024.12.01 [따배쿠] Pod (0) 2024.11.10 [따배쿠] namespace (0) 2024.11.10 [따배쿠] kubectl command (0) 2024.11.09 [따배쿠] kubectl (0) 2024.11.03