
Kubernetes는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 시스템입니다.
Kubernetes 환경에서 가장 큰 구조는 Cluster입니다.
쿠버네티스 백서에서는 Cluster를 아래와 같이 정의하고 있습니다.
클러스터란 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커 머신의 집합. 모든 클러스터는 최소 한 개의 워커 노드를 가진다.
Kubernetes는 Master Node(Control Plane)와 Worker Node로 이루어져 있으며, 각 노드 내부의 다양한 Component를 통해 동작합니다.

Kubernetes의 아키텍쳐는 위의 구성도를 참고해주세요.
Kubernetes Cluster는 api-server, etcd, scheduler, controller 등의 컴포넌트가 설치된 Master Node(Controle Plane)와, kubelet과 kube-proxy, 컨테이너 런타임이 설치된 Worker Node로 구성됩니다.
거기에 추가적으로 Master Node의 api-server와 통신하며 Cluster에 명령을 내릴 서버가 구성되어야 하는데, Master Node 내부에 구성할 수도 있고 로컬 PC에 구성할 수도 있습니다.
Kubernetes 관리자는 kubectl을 이용해서 Kubernetes Cluster 에 명령을 내릴 수 있습니다.
kubectl은 KUBECONFIG 환경변수를 참조해 명령을 내릴 클러스터의 정보를 인식합니다.
KUBECONFIG 환경변수가 정의되어 있지 않다면 $HOME/.kube/config 파일을 참고합니다.
Master Node는 단일로 구성할 수 있지만 백업을 위해 여러대의 서버를 Master Node로 구성할 수 있으며, 다중 구성 시 항상 홀수개로 구성되어야 합니다.
Master Node의 핵심 컴포넌트는 api-server, etcd, Scheduler, Controller로 구성되어 있습니다.
구성도상에 있는 Cloud Controller는 AWS, Azure, GCP와 같은 Public Cloud의 서버, 스토리지, 로드밸런서 등의 자원을 Kubernetes가 사용할 수 있도록 돕습니다.
Kubernetes 선언적인(declarative) 구조를 가지고 있습니다.
각 요소가 추구하는 상태(desired status)를 선언하면 현재 상태(current status)와 비교하여 맞는지 점검하고, 추구하는 상태에 맞추려고 노력하는 방식으로 설계되어 있습니다.
이렇게 api-server를 통해 선언한 추구하는 상태값들을 저장하는 장소가 etcd입니다.
Kubernetes 클러스터의 중심 역할을 하는 통로Kubernetes api를 사용하도록 요청을 받고 요청이 유효한지 검사kubectl이 설치된 로컬 머신에서 kubectl 명령어 수행시 문법, 권한 검사api-server와 etcd는 거의 한 몸으로 움직이게 설계됨etcd 외에 다른 구성 요소들은 상태값을 관리하지 않으므로 etcd를 잘 백업해두면 장애가 발생해도 etcd를 통해 쿠버네티스 클러스터 복구 가능etcd가 장애가 나도 시스템 가용성 확보Pod를 실행할 노드 선택Pod를 관찰하여 선언한 개수를 보장Container Runtime(Docker, Containerd, Rocket 등)Core DNSCNIDashboardELK, EFK, Datadog 등 로깅 컴포넌트Worker Node는 실제 컨테이너들이 배포되는 서버들입니다.
관리자는 Pod를 배포할 때 어떤 Worker Node에 Pod를 배포할지 선택할 수도 있지만,
일반적으로는 scheduler에 의해 배포 대상 Worker Node가 선택됩니다.
워커노드의 핵심 컴포넌트들은 kubelet, kube-proxy, Container runtime(Docke 등)이 있습니다.
Kubernetes 에이전트kubelet이 정지되면 Container runtime에 요청을 보내는 역할을 수행해주는 컴포넌트가 정지되었으므로 Pod 생성, 삭제 등이 해당 노드에서 정상적으로 수행되지 않음Kubernetes의 network 동작을 관리kube-proxy 서비스가 중단된 경우 네트워킹이 제대로 이루어지지 않음Cluster IP를 통해 WEB 등 서비스 요청시 오류 발생docker, containerd, runc 등