안녕하세요? 오늘은 Kubernetes를 구동 시키기 위해서 필요한 기본적인 Components들에 대해서 요약해서 알아보는 시간을 가져 보도록 하겠습니다. (글 매우 짧고, 성의 없음 주의)
Kubernetes Cluster Components (출처: https://kubernetes.io/ko/docs/concepts/overview/components/)
컨트롤 플레인 컴포넌트는 클러스터의 전반적인 구동 관련 로직을 수행합니다. 스케쥴링, 클러스터 이벤트 등을 감지하고 반응 합니다. 고가용성을 위해, 한 클러스터 내, 여러 머신에서 실행되는 컨트롤 플레인을 만들기도 합니다.
Kubernetes API를 노출하는 Kubernetes Control Plane Component입니다. 컨트롤 플레인에 명령을 주기 위해 사용하는 엔드 포인트 역할을 하며, 실제로 JWT Token을 인증으로 사용하여, yaml을 전송 하는 방식으로 사용 합니다. 한 개가 아닌, 여러 개를 둬서 kube-apiserver 인스턴스 트래픽을 조절 할 수 있습니다.
현재 클러스터의 데이터 (클러스터에 어떤 노드가 몇 개나 있고 어떤 파드가 어떤 노드에서 동작하고 있는지 등)를 저장하는, 일관성과 고가용성을 보장하는 키-값 저장소입니다. 이는 replica를 마련하는 등의 고가용성 계획이 존재 하여야 합니다.
Node가 배정되지 않은 채로 새로 생성된 Pod를 감지하여, 실행할 노드를 선택 해 줍니다. 고려 사항으로는 리소스 요구사항, 하드웨어/소프트웨어/정책 적인 제약 상황, Affinity, Anti-Affinity, 데이터 지역성, 워크로드 간 간섭, 데드라인 등이 있습니다.
Controller(API Server를 통해 클러스터의 상태를 감지하고, 현재 상태를 원하는 상태로 변경하는 역할) 프로세스를 실행 하는 컴포넌트 입니다. 컨트롤러는 분리된 프로세스이지만, 복잡성을 낮추기 위해 단일 프로세스 내에서 실행 됩니다.
컨트롤러는 다음을 가집니다.
AWS, GCP, Azure, Naver Cloud 같은 클라우드 제공 플랫폼에서만 사용되며, 클러스터를 클라우드 공급자의 API에 연결하여, 외부 클라우드 매너저와 상호 작용 하게 할 수 있습니다.
동작 중인 Pod를 유지시키고, K8S 런타임 환경을 제공 합니다. 모든 노드 상에서 작동합니다.
클러스터의 각 Node에서 작동하는 에이전트이며, Pod 내에서, Container가 확실하게 동작 할 수 있도록 관리 합니다. PodSpec의 집합을 받아, 컨테이너가 해당 PodSpec에 따라 건강하게 동작 하는 것을 목표로 합니다. k8s 외부의 컨테이너는 개입하지 않습니다.
kube-proxy는 클러스터의 각 Node에서 실행되는 네트워크 프록시 이며, Service 개념의 구현부 입니다. Node의 네트워크 규칙을 유지 및 관리하며, 내부 네트워크 혹은 클러스터 바깥으로 통신이 가능하게 해주는 역할을 합니다.
컨테이너 실행을 담당하는 소프트웨어 입니다. 구현체로는 Kubernetes CRI, containerd, CRI-O 등이 있습니다.
Addons은, K8S Resource (Daemonset, Deployment 등)을 이용, 클러스터 기능을 구현한 컴포넌트 입니다. 이는 kube-system
네임 스페이스에 저장 됩니다.
클러스터 내에서 작동하는 DNS 서버로, 구성환경 내 다른 DNS 서버와 더불어, K8S 내부 서비스를 위해 DNS 레코드를 제공 해주는 역할을 한다.
이 외에 웹 UI, 컨테이너 리소스 모니터링, 클러스터 레벨 로깅 등이 있습니다.
다음 시간에는 Kubernetes Object에 대해서 알아 보겠습니다.