본문 바로가기
CSP (Cloud Service Provider)/GCP

[GKE 사용하기] 쿠버네티스 컴포넌트(Kubernetes Component)

by BTC_yljo 2022. 10. 12.

이번 시간에는 GKE를 잘 사용하기 위해 쿠버네티스 컴포넌트에 대해 알아보도록 하겠습니다.

 

쿠버네티스를 배포하면 클러스터가 생성됩니다. 쿠버네티스 클러스터는 크게 컨트롤 플레인(Control Plane)이라고도 불리는 마스터(Master)와 노드(Node) 두 개의 컴포넌트로 나누어집니다.

  • 마스터 : 쿠버네티스의 설정 환경을 관리하고,  클러스터의 작업자 노드와 포드(Pod)를 제어
  • 워커 노드 : 애플리케이션 워크로드의 구성 요소인 포드를 호스트.

운영 환경에서는 일반적으로 마스터는 여러 컴퓨터에서 실행되고 클러스터는 일반적으로 여러 노드를 실행하여 고가용성과 내결함성을 제공합니다.

 

1. 마스터 컴포넌트

마스터 컴포넌트는 클러스터에 대한 전반적인 결정을 내리고, 이벤트를 탐지하고 응답하는, 클러스터 전체를 컨트롤하는 시스템입니다.

 

1.1 kube-apiserver

  쿠버네티스는 모든 명령과 통신을 API를 통해서 하는데 그 중심이 되는 서버가 API서버입니다. API 서버는 쿠버네티스 컨트롤 플레인의 프론트엔드로, 내외부의 요청을 처리합니다. REST 호출이나 kubectl 커맨드라인 인터페이스 또는 kubeadm과 같은 기타 CLI를 통해 API에 액세스할 수 있습니다. 그리고 수평적으로 확장되도록 설계되어 더 많은 인스턴스를 배포함으로써 확장되는 형태 입니다. 여러 kube-apiserver 인스턴스를 실행하고, 인스턴스 간의 트래픽을 균형있게 조정할 수 있습니다.


1.2 etcd
일관성 있고 가용성이 높은 키-밸류 저장소로, 모든 클러스터 데이터에 대한 쿠버네티스의 백업 저장소로 사용됩니다. 즉, 클러스터의 모든 데이터를 저장하는 데이터베이스인 것이다. 데이터를 저장하는 용도이므로 데이터 백업 또는 클러스터링 후 여러 마스터 서버에 분산 실행하여 데이터의 안정성을 확보 해야합니다.

1.3 kube-scheduler
노드가 할당되지 않은 새로 생성된 포드를 감시하고 실행할 노드를 선택하는 컴포넌트입니다. 스케줄링 결정에 고려되는 요인에는 개별 및 집단 리소스 요구사항, 하드웨어/소프트웨어/정책 제약, 선호도 및 반선호도 규격, 데이터 위치, 작업 부하 간 간섭 및 데드라인이 포함됩니다.

1.4 kube-controller-manager
컨트롤러 매니저는 컨트롤러를 생성하고 이를 배포 및 관리하는 컴포넌트입니다. 논리적으로 각 컨트롤러는 별도의 프로세스이지만 복잡성을 줄이기 위해 모두 단일 바이너리로 컴파일되어 단일 프로세스에서 실행됩니다.

 

 

2. 노드 컴포넌트

노드 컴포넌트는 모든 노드에서 실행되며 실행 중인 포드를 유지하고, 쿠버네티스 런타임 환경을 제공합니다.

 

2.1 kubelet
클러스터의 각 노드에서 실행되는 에이전트입니다. 마스터의 API서버와 통신을 하면서, 노드가 수행해야 할 명령을 받아서 수행하고, 노드의 상태 등에 대해 마스터로 전달하는 역할을 합니다. 그리고 컨테이너가 PodSpecs에 따라 정상적으로 실행되고 있는지를 확인합니다. 

 

2.2 kube-proxy
kube-proxy는 쿠버네티스 서비스(Service) 구현에 기여하는 클러스터의 각 노드에서 실행되는 네트워크 프록시입니다. kube-proxy는 노드의 네트워크 규칙을 유지 관리하며, 이러한 네트워크 규칙을 통해 클러스터 내부 또는 외부의 네트워크 세션에서 포드로 네트워크 통신을 할 수 있습니다.

2.3 Container runtime

컨테이너 실행을 담당하는 소프트웨어로, 쿠버네티스는 Docker, containerd, CRI-O 등의 다양한 런타임을 지원합니다.

 

2.4 cAdvisor

cAdvisor는 각 노드에서 동작하는 모니터링 에이전트로, 노드 내에서 가동되는 컨테이너의 정보를 수집하여, API 서버로 전달합니다. 이 데이터들은 주로 모니터링을 위해서 사용됩니다.


3. Addons

Addon은 클러스터 기능을 구현하기 위해 쿠버네티스 리소스(DaemonSet, Deployment 등)를 사용합니다. 


3.1 DNS

쿠버네티스는 리소스의 엔드포인트(Endpoint)를 DNS로 맵핑하고 관리합니다. 포드나 서비스 등은 동적 IP를 배정기 때문에 IP 주소가 변경되고, 그러므로 해당 리소스에 대한 위치 정보가 필요합니다. 이러한 패턴은 Service discovery 패턴이라고 하는데, 쿠버네티스에서는 내부 DNS서버를 두고 있습니다. 새로운 리소스가 생기면, 그 리소스에 대한 IP와 DNS 이름을 등록하여, DNS 이름을 기반으로 리소스에 접근할 수 있도록 합니다.


3.2 컨테이너 리소스 모니터링

컨테이너 리소스 모니터링은 컨테이너에 대한 일반 시계열 메트릭을 중앙 데이터베이스에 기록하고 해당 데이터를 검색하기 위한 UI를 제공합니다.


3.3 클러스터 수준 로깅

클러스터 수준 로깅 메커니즘은 검색/브라우징 인터페이스가 있는 중앙 로그 저장소에 컨테이너 로그를 저장하는 역할을 합니다.

 

 

[출처]

https://kubernetes.io/docs/concepts/overview/components/#what-s-next

 

Kubernetes Components

A Kubernetes cluster consists of the components that represent the control plane and a set of machines called nodes.

kubernetes.io

https://bcho.tistory.com/1258?category=731548 

 

쿠버네티스 #4 - 아키텍쳐

쿠버네티스 #4 아키텍쳐 조대협 (http://bcho.tistory.com) 쿠버네티스에 대한 개념 이해가 끝났으면, 이제 쿠버네티스가 실제로 어떤 구조로 구현이 되어 있는지 아키텍쳐를 살펴보도록 하자. 아키텍

bcho.tistory.com

 

댓글