1대의 Master Node
Control plane Component : kube-apiserver, kube-scheduler, kube-controller-manager, etcd
n대의 Workers
Worker Component : kubelet, container runtime,kube-proxy,docker
📁 /etcd/kubernetes/manifests
ㄴ kube-apiserver.yaml
ㄴ etcd.yaml
ㄴ kube-scheduler.yaml
ㄴ kube-proxy.yaml
ㄴ kube-controller-manager.yaml
사용자가 kubectl create (pod 생성명령어) 하면 kube-aiserver에 보내면 etcd(DB역할)에 이 pod 정보를 저장.
kube-scheduler 는 수시로 각각의 노드 자원을 체크함(ex.어떤 노드에 컨테이너가 어떤 돌아가고있는지). api-server를 watch하면서 etcd에 pod생성요청이 새로 들어오는지 감시함.
pod 생성 요청이 있으면 떠있는 노드들을 체크해서 이 pod가 어느 노드에 보내면 좋을지 판단해 etcd의 pod에 node정보를 붙여줌.
각 node에 있는 kubelet은 kube-aiserver에 watch가 걸려있어서 pod에 자신의 노드 정보가 있는지 확인하고있음.
자신한테 할당된 노드를 감지하면 이 정보를 가져와서 pod를 만듦.
kubelet이 pod를 만들 때 docker한테 container를 생성하라고 요청하면 docker가 container를 만들어줌
cf. 📁 /etcd/kubernetes/manifests 에 있는 kube-proxy.yaml 파일은 domonset 이라서 모든 node에 kube-proxy 가 생성되어있음. 이 상태에서 kublet은 kube-proxy에 네트워크 생성 요청함. kube-proxy가 새로 생긴 container와 통신할 수 있도록 도와줌.
📁 /etcd/kubernetes/manifests
ㄴ kube-proxy.yaml
proxy가
demon set 이라서 모든 node에 kube-proxy파일이 생성되어있음.
worker node에 있는 kubelet들은 master의 kube-api-server를 watch해서 pod에 자신의 node 정보가 붙어있는지 확인.
자신의 node가 붙은 pod를 발견하면 그 정보를 가져와서 pod를 생성한다.
📁 /etcd/kubernetes/manifests
ㄴ kube-controller-manager.yaml
Master Node의 controller manager가 띄워져있고
Demonset, StatefulSet, DeploymentSet, ReplicaSet 기능들이 Thread형태로 있음.
(Deployment creation)
사용자가 kubectl create로 deployment에 replica 2옵션으로 생성요청하면,
이 명령이kube-apiserver에 전달되고 etcd에 정보가 저장됨. controller-manager에 deployment 쓰레드는 kube-apiserver한테 deployment관련 정보가 들어오면 알려달라 watch 걸어둔상태임. 이걸 읽으면 repliacaset을 만들어달라고 요청함.
이러면 또 replicaset쓰레드가 repliacatset object가 있는지 wathch를 걸어둔 상태라 replicaset안에 replicas가 몇 개인지 확인하고, 그 만큼 pod를 만들라고 요청함. 그러면 kube-scheduler가 노드를 자원을 고려해 pod에 스케줄링된 노드를 할당한다. 각 노드에있는 kubliet은 자신에게 할당된 pod를 감지하고 pod안에 컨테이너 내용을 docker한테 생성하게함. 그러면 docker가 container를 만들고, kube-proxy가 network를 통해 새로 생긴 container와 통신하게해줌.
'Chapter01 > Kubernetes' 카테고리의 다른 글
[ Kubernetes ] 클러스터의 관리 및 오케스트레이션 (0) | 2025.02.26 |
---|---|
[ Kubernetes ] 자주 쓰는 명령어 (0) | 2025.02.25 |
[ Kubernetes ]MetalLB와 Ingress 사용해 배포하기 (2) | 2024.09.30 |
[ Kubernetes ] MetalLB와 Ingress를 사용해 외부에서 접근 가능한 인프라 구축 (0) | 2024.09.30 |
[ Kubernetes ] .yaml로 Nginx Pod을 K8S cluster에 배포하기 (0) | 2024.09.03 |