쿠버네티스의 동작과정
- 개발자/운영자가 컨테이너들을 build한다
- build했던 이미지들을 도커 명령어로 hub에 올리기
- ( + 4 )쿠버네티스 명령어를 통해, 이 컨테이너가 실행될 수 있도록 요청
- master는 이 요청에 따라서, worker node들에게 해당 컨테이너를 배치
- scheduler는, 어디가 적절할지 판단한 뒤 REST API server에게 최적의 노드를 알려줌
- 이 API는, 할당받은 node의 kubelet에게, 해당 컨테이너를 실행해줄것을 요청함
- 해당 node의 kubelet은, 도커 명령어로 변환한 뒤, 도커 데몬에게 실행할 것을 요청함.
- 도커 데몬은, hub에서 해당 image를 찾은 뒤 실제로 실행함.
- 쿠버네티스는, 이렇게 실행되게 된 container를 “pod”라는 단위로 관리함
master Node
etcd
- key-value 타입의 저장소
kube-apiserver
- k8s API를 사용하도록 요청을 받고 요청이 유효한지 검사
kube-scheduler
- 파드를 실행할 노드 선택
kube-controller-manager
- 파드를 관찰하며 개수를 보장
worker Node
Kubelet
- 모든 노드에서 실행되는 k8s 에이전트
- 데몬 형태로 동작
kube-proxy
- k8s의 network 동작을 관리
- iptables rule을 구성
컨테이너 런타임
- 컨테이너를 실행하는 엔진
- docker, containerd,runc
1) API는 명령어를 받는다
2) etcd는 워커 노드들에 대한 상태 정보 & kubernetes 정보를 key:value 형태로 저장
3) API는, 들어온 명령을 받아서 scheduler에게 어디에 실행할지 물어봄. scheduler는 etcd 정보를 바탕으로, 판단한뒤 응답해줌
4) API는 응답받은 정보를 바탕으로 ( 어디에 실행할 지 ), 특정 node의 kubelet에게 특정 컨테이너를 실행해줄 것을 요청함
kubelete은 데몬이다. kubelet안에는 cAdvisor가 포함되어있음. 현재 컨테이너정보를 수집해서 마스터에게
전달하는 역할을 함.그래서 이 정보들을 etcd에 저장함 etcd는 각 kubelet에 대한 상태정보를 가지고있음
5) kubelet은 직접 실행할 수 없음, 도커 명령어로 변환한뒤, 도커(데몬)에게 해당 요청을 전달해줌.
6) 도커 데몬은, hub에서 해당 image를 받아온 뒤, 해당 컨테이너를 실행함
7) 만약 노드2가 nginx를 가지고 있는데 다운되어버리면 controller는 잘 작동하는지 계속 확인하다가
정상적으로 작동을 안한다면 다시 api에게 노드2의 nginx 가 꺼졋으니까 다시 실행해줘 ! 라는 명령어를
날리게 한다. 즉 , 갯수를 보장시켜주는 것이 컨트롤러
네트워크 애드온
CNI:weave,calico,flaneld,kube-route
dns 애드온
coreDNS
대시보드 애드온
컨테이너 자원 모니터링
cAdvisor
클러스터 로깅
컨테이너 로그,k8s 운영 로그들을 수집해서 중앙화
ELK(ElasticSearch,Logstash,Kibana)
수집된 로그정제
정제된 결과를 UI ->Kibana
EFK(ElasticSearch,Fluentd,kibana)
DataDog(3개를 묶어서 한번에 보여줌)
( 참고 : 따배쿠 https://www.youtube.com/watch?v=6n5obRKsCRQ&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c )
'따배쿠' 카테고리의 다른 글
따배쿠 3장 kubectl 실습 및 pod 생성하기 (0) | 2023.07.15 |
---|