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 DNS
CNI
Dashboard
ELK
, 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
등