-
[Kubernetes] 쿠버네티스 컴포넌트공부/데이터 2023. 3. 1. 23:38
쿠버네티스 컴포넌트
쿠버네티스를 배포하면 클러스터가 생깁니다. 클러스터는 컨테이너화된 애플리케이션을 실행하는 워커 노드의 집합입니다. 워커 노드는 애플리케이션의 구성요소인 파드를 호스트하며, 컨트롤 플레인은 워커 노드와 클러스터 내 파드를 관리합니다. 프로덕션 환경에서는 일반적으로 컨트롤 플레인은 여러 컴퓨터에 걸쳐 실행되며, 클러스터는 여러 노드를 실행하여 내결함성과 고가용성을 제공합니다.
쿠버네티스 클러스터를 구성하는 다양한 컴포넌트
컨트롤 플레인 컴포넌트
💡 컨테이너의 라이프사이클을 정의, 배포, 관리하기 위한 API와 인터페이스들을 노출하는 컨테이너 오케스트레이션 레이어.
컨트롤 플레인 컴포넌트는 클러스터의 스케줄링과 같은 결정을 내리며, 클러스터 이벤트를 감지하고 반응합니다. 예를 들어, 디플로이먼트의
replicas
필드 요구 조건이 충족되지 않으면 새로운 파드를 구동합니다.컨트롤 플레인 컴포넌트는 클러스터에서 어떤 머신에서든 동작할 수 있습니다. 하지만 구성 스크립트는 일반적으로 모든 컨트롤 플레인 컴포넌트를 동일한 머신에서 구동시키고, 사용자 컨테이너는 해당 머신에서 구동시키지 않습니다.
kube-apiserver
API 서버는 쿠버네티스의 컨트롤 플레인 중 하나로, 쿠버네티스 API를 노출하는 역할을 합니다. 주요 구현체는 kube-apiserver로, 수평으로 확장성이 높습니다. 인스턴스를 추가로 배포하여 확장할 수 있으며, 균형있게 트래픽을 분산시킬 수 있습니다.
etcd
쿠버네티스 클러스터에서는 일관성과 고가용성을 보장하는 키-값 저장소인 etcd를 사용합니다. etcd를 뒷단의 저장소로 사용하는 경우, 백업을 계획하는 것이 필수입니다.
kube-scheduler
노드가 배정되지 않은 새로운 파드를 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트입니다. 스케줄링 결정을 위해 고려되는 요소는 리소스 요구 사항, 제약 조건, 어피니티 및 안티-어피니티 명세, 데이터 지역성, 워크로드 간 간섭, 데드라인입니다.
kube-controller-manager
컨트롤러는 컨트롤 플레인 컴포넌트에서 실행되는 프로세스입니다. 각각의 컨트롤러는 분리된 프로세스로 논리적으로는 독립적이지만, 단일 바이너리로 컴파일되고 단일 프로세스 내에서 실행되어 복잡성을 낮춥니다.
컨트롤러는 다음을 포함합니다.
- 노드 컨트롤러
- 노드가 다운되었을 때 통지와 대응에 관한 책임을 가짐
- 잡 컨트롤러
- 일회성 작업을 나타내는 잡 오브젝트를 감시한 다음, 해당 작업을 완료할 때까지 동작하는 파드를 생성함
- 엔드포인트 컨트롤러
- 엔드포인트 오브젝트를 채움(즉, 서비스와 파드를 연결시킴)
- 서비스 어카운트 & 토큰 컨트롤러
- 새로운 네임스페이스에 대한 기본 계정과 API 접근 토큰을 생성
cloud-controller-manager
클라우드 컨트롤러 매니저는 쿠버네티스의 컨트롤 플레인 컴포넌트 중 하나로, 클라우드별 컨트롤 로직을 담고 있습니다. 이를 통해 클러스터를 클라우드 공급자의 API에 연결하고 해당 플랫폼과 상호 작용하는 컴포넌트와 클러스터와만 상호 작용하는 컴포넌트를 구분할 수 있습니다.
cloud-controller-manager는 클라우드 제공자 전용 컨트롤러만 실행합니다. 자사의 학습 환경에서 쿠버네티스를 실행 중인 경우, 클러스터에는 클라우드 컨트롤러 매니저가 없습니다.
kube-controller-manager와 마찬가지로, cloud-controller-manager는 논리적으로 독립적인 여러 컨트롤 루프를 단일 프로세스로 실행하는 단일 바이너리입니다. 이를 복제하여 수평 확장이 가능(2개 이상 복제 실행)하며, 이를 통해 성능을 향상시키거나 장애를 대응할 수 있습니다.
다음 컨트롤러들은 클라우드 제공 사업자의 의존성을 가질 수 있습니다.
- 노드 컨트롤러
- 노드가 응답을 멈춘 후 클라우드 상에서 삭제되었는지 판별하기 위해 클라우드 제공 사업자에게 확인
- 라우트 컨트롤러
- 기본 클라우드 인프라에 경로를 구성
- 서비스 컨트롤러
- 클라우드 제공 사업자 로드밸런서를 생성, 업데이트, 삭제
노드 컴포넌트
노드 컴포넌트는 파드를 유지하고 쿠버네티스 런타임 환경을 제공하며 모든 노드에서 동작합니다.
kubelet
Kubelet은 클러스터 내 각 노드에서 실행되는 에이전트입니다. Kubelet은 파드 안에 있는 컨테이너가 정상적으로 작동하도록 관리합니다. 이를 위해 Kubelet은 파드 스펙(PodSpec)을 받아들이고 해당 파드 스펙에 따라 컨테이너가 건강하게 작동하도록 보장합니다. Kubelet은 쿠버네티스를 통해 생성되지 않은 컨테이너는 관리하지 않습니다.
kube-proxy
kube-proxy는 쿠버네티스의 서비스 개념을 구현하는 네트워크 프록시로, 클러스터의 각 노드에서 실행됩니다. 노드의 네트워크 규칙을 유지 관리하여 내부 네트워크 세션 및 클러스터 외부에서 파드로 네트워크 통신이 가능하게 합니다. 패킷 필터링 계층이 없는 경우 kube-proxy는 트래픽을 직접 포워드합니다.
컨테이너 런타임
컨테이너 런타임은 컨테이너 실행을 담당하는 소프트웨어이며, 쿠버네티스는 containerd, CRI-O와 같은 컨테이너 런타임 및 모든 Kubernetes CRI 구현체를 지원합니다.
애드온
애드온은 쿠버네티스 리소스(데몬셋, 디플로이먼트 등)를 사용하여 클러스터 기능을 구현합니다. 따라서 애드온에 대한 네임스페이스 리소스는
kube-system
네임스페이스에 속합니다.DNS
쿠버네티스 클러스터는 대부분의 경우에는 클러스터 DNS가 필요합니다. 클러스터 DNS는 다른 DNS 서버와 함께 작동하여 쿠버네티스 서비스를 위한 DNS 레코드를 제공합니다. 쿠버네티스에서 실행되는 컨테이너는 자동으로 DNS 검색에 이 DNS 서버를 포함합니다.
웹 UI (대시보드)
대시보드는 쿠버네티스 클러스터 및 클러스터에서 실행 중인 애플리케이션의 관리와 문제 해결을 위한 웹 기반 UI입니다.
컨테이너 리소스 모니터링
컨테이너 리소스 모니터링은 중앙 데이터베이스에 컨테이너의 시계열 매트릭스를 기록하고 열람을 위한 UI를 제공합니다.
클러스터-레벨 로깅
클러스터-레벨 로깅은 검색/열람 인터페이스와 함께 중앙 로그 저장소에 컨테이너 로그를 저장합니다.
레퍼런스
- 노드 컨트롤러