본문 바로가기

About/Kubernetes

[k8s][따배쿠] 쿠버네티스 아키텍처 - Kubernetes 동작 원리

https://www.youtube.com/watch?v=Iue9TC13vPQ&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=7 

본 포스팅은 따배쿠(따라하면서 배우는 쿠버네티스) 4-1. 쿠버네티스 아키텍처 - Kubernetes 동작 원리 편을 보고 정리한 내용입니다.

 

쿠버네티스에서 컨테이너 동작 Flow


쿠버네티스에서 서비스를 운영하기 위한 전체 동작 Flow는 다음과 같습니다. 하나하나씩 살펴보도록 하겠습니다.

쿠버네티스에서 컨테이너 동작 Flow

1. Docker push hub.example.com/nginx

개발자 혹은 운영자는 컨테이너를 쿠버네티스 플랫폼에 올려 사용하는 것이 목적입니다.

이 경우 우선 Docker를 이용하여 컨테이너를 빌드(생성)합니다. 컨테이너는 main UI를 만드는 컨테이너, 로그인 작업 컨테이너, 상품 주문 컨테이너 등 다양한 형태의 컨테이너로 생성합니다. (docker build 사용)

2. Image nginx is pushed to Docker Hub

생성한 컨테이너 이미지를 컨테이너 저장소 (Docker Hub)에 업로드합니다.

Docker Hub는 사내에 만들어졌을 수도 있고(Private) Docker Hub(Public)를 사용할 수도 있습니다.

3. kubectl create deploy web --image=hub.example.com/nginx

개발자(혹은 운영자)는 쿠버네티스 명령어를 통해 생성한 컨테이너가 실행되도록 요청합니다.

이 때 yaml 파일을 이용하는 것도 가능하며 위의 예시에서는 CLI를 통해 컨테이너가 실행되도록 요청하였습니다.

kubectl create deploy web --image=hub.example.com/nginx

위 명령어를 해석하면 다음과 같습니다.
"쿠버네티스의 Deploy를 이용하여 hub.example.com/nginx에 있는 이미지를 Web이라는 이름의 서비스를 실행해"

 4. kubectl issues REST call

kubectl 명령이 Master Node(혹은 Control-plane)으로 전달됩니다. 

Master에는 REST API Server가 있어서 kubectl의 명령어를 받아들입니다.

5. Pod created and scheduled to a worker node

작업 중인 Node 중 어느 노드에 파드가 생성되면 좋을지 Scheduler에게 요청합니다.

Scheduler는 노드들의 상태들을 보고 어느 노드가 가장 놓을지 선택 후 응답을합니다.

6. Kubelet is notified

Scheduler가 Pod를 생성하기 적당한 노드를 찾아 해당 노드의 kubelet에 파드 생성 요청을 합니다.

7. kubelet instructs Docker to run the image

Pod 생성 요청을 받은 kublet이 Docker 데몬에게 실제 컨테이너의 생성을 요청합니다.

8. Docker pulls and runs nginx

컨테이너 생성 요청을 받은 Docker 데몬이 Docker Hub에서 이미지를 찾아서 이미지를 생성합니다.

이렇게 생성된 컨테이너를 쿠버네티스에서는 'Pod'라는 단위로 관리합니다.

쿠버네티스 컴포넌트


쿠버네티스 아키텍처

마스터 컴포턴트(Control Plane)

컴포넌트 설명
etcd - key-value 타입의 저장소
- 쿠버네티스 마스터 및 노드들의 다양한 상태 정보 저장
kube-apiserver k8s API를 사용하도록 요청을 받고 요청이 유효한지 검사
kube-scheduler 파드를 실행할 노드 선택
kube-controller-manager 파드를 관찰하며 개수를 보장

워커 노드

컴포넌트 설명
kubelet - 모든 노드에서 실행되는 k8s 에이전트
- 데몬 형태로 동작
kube-proxy - k8s의 network 동작을 관리
- iptables rule을 구성
컨테이너 런타임 - 컨테이너를 실행하는 엔진
- docker, containerd, runc

애드온

분류 종류
네트워크 애드온 CNI - wave, calico, flaneld
dns 애드온 CoreDNS
대시보드 애드온 쿠버네티스 웹 UI 대시보드
컨테이너 자원 모니터링 cAdvisor
클러스터 로깅 - 컨테이너 로그, k8s 운영 로그들을 수집해서 중앙화
- ELK(ElasticSearch, Logstash, Kibana), EFK(ElasticSearch, Fluentd, Kibana), DataDog

쿠버네티스의 동작원리와 컴포넌트에 대하여 알아보았습니다.