Devsecops

k8s 아키텍쳐 본문

Kubernetes/K8s 동작방식

k8s 아키텍쳐

Futurism 2023. 3. 7. 15:09
728x90

k8s 아키텍쳐

Kublet

- 해당 데몬으로 k8s 동작

- k8s를 통해 컨테이너에게 명령을 내릴때 API Server(Master Node)가 가장 먼저 응답

- 응답 후 허가받은 유저인지 확인(홈 디렉토리에 있는 인증서 확인, 6443 port)

- etcd에서 정보를 받고 scheduler 전송

- scheduler 정보를 받으면 실행하려는 특정 pod 를 어디에 배치하면 가장 좋은지 결정(etcd로 부터 가져온 정보를 가지고 최적 배치 결정), (ex) ngnix 2개 실행해줘)

- 어디가 적합한지를 결정하면 etcd에 저장 후 각 WorkNode의 kublet에게 명령 전달

- WorkNode의 kublet는 docker에게 명령 전달

 

CAdvisor

- Kublet 부속품

- 컨테이너 엔진 기반하에 현재 시스템이 가지고 있는 하드웨어 시스템(CPU, Memory 등) 어느 정도 사용중인지 컨테이너 이미지들이 얼마나 다운로드 되어있는지, 실행 중인 컨테이너들이 어떻게 동작중인지 모니터링 하는 툴

- Kbulet이 CAdvisor를 통해 수집 후 Master API로 전달

- Master는 받고 etcd로 저장

 

CNI(Container Network Interface)

- 컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기 위한 표준

- 컨테이너와 컨테이너가 통신할 수 있도록 지원

- CNI를 통해 IP address 연결(내부 컨테이너끼리 통신하기 위한 IP)

 

etcd

- 전체적인 k8s의 운영에 대한 정보를 저장

- key - value 형태로 저장

 

Controller

- 컨테이너의 갯수를 보장(많으면 삭제, 적으면 생성)

- 실행 중인 pod를 모니터링(만일 컨테이너가 하나 다운되면 API Server 에게 알려서 다시 구동)

 

service 명령

- 앞서서 실행된 동일 web 컨테이너와 같은 것들을 로드밸런싱 하기 위해 있는 명령어

- API Server에서 명령을 받으면 문법 확인 후 web이름으로 deploy가 동작 중인지 확인
- 확인 후 단일 진입점을 만든다(클러스터 IP를 만든다, etcd에 기록)
- 요청이 오면 단일 진입점에서 로드밸런싱이 이루어짐

 

CoreDNS

- server 정보에 대해서 naming resolving 을 지원

- 클러스터 IP, server name매핑 정보 저장

 

Kube-proxy(NIC)

- Port Listen

- Clinet 가 요청할 때 어떤 컨테이너로 갈지 서비스 구조에 따라 로드밸런싱 하는 역할 수행

- 네트워크에 연결하기 위해서 커널의 백단에서 iptables 커널의 nat filter기능을 통해 룰을 정하고 포워딩 시키는 역할 수행

728x90