본문 바로가기

리눅스 인프라/Docker, Jenkins, Kubernates

kubernetes 구성 요소에 대한 이해

kubernetes와 cluster란

쿠버네티스는 컨테이너를 오케스트레이션 도구이다. 오케스트레이션은 여러 서버에 걸친 컨테이너를 생성 배포 관리 확장을 쉽게 도와주는 것이다.

쿠버네티스는 클러스터를 구성하여 컨테이너 오케스트레이션을 수행한다.

클러스터란, 컨테이너화된 node들의 모음이다. 클러스터 환경을 설정하여 포함되어 있는 컨테이너화된 어플리케이션을 쉽게 배포, 이동, 관리 등을 할 수 있다. 또한 클러스터를 사용하면 다양한 환경(virtual, physical, cloud-based, and on-premises)에서 어플리케이션을 실행 관리할 수 있다.

클러스터는 크게 master node와 worker node로 이루어지는데, master node는 클러스터 전반적인 환경을 통제하고, worker node는 실제 어플리케이션을 실행한다.

이러한 역할을 수행하는 kubernetes의 구성 요소를 아래에서 자세히 알아보자.

1. Kubernetes control plane

controll plane은 Kubernetes 클러스터의 신경 역할을 한다. 클러스터 상태 데이터 및 구성을 제어한다. 예를 들어 kubelet으로 node와 통신하여 이벤트를 수집하고 반응하여 ,설정한 복제본 수에 만족하는 pod이 실행 될 수 있게 명령을 내린다. 

kube-apiserver

controll plane 외부 및 내부 요청 처리를 담당하는 api server이다. 요청이 유효한 지 확인하고 처리를 다른 구성 요소에 전달한다. 사용자는 kubectl 인터페이스를 사용해 controll plane에 명령을 내리는 REST 호출을 할 수 있다.

kube-scheduler

scheduler는 자동화된 워크플로 및 사용자 정의 조건에 따라 특정 node에서 pod을 예약한다. 할당된 node가 없는 새로 생성된 pod를 감시하고 실행할 node를 정한다.

kube-controller-manager

controller-manager는 Kubernetes 클러스터의 상태를 모니터링하고 제어한다. 클러스터와 그 안에 있는 개체의 현재 상태에 대한 정보를 수신하고 클러스터 운영자가 원하는 상태로 클러스터를 이동하라는 명령을 보낸다.

  • node controller: node가 다운될 때 이를 인지하고 대응하는 역할
  • Job controller: 일회성 작업을 나타내는 작업 개체를 감시한 다음 해당 작업을 완료할 때까지 실행하는 pod을 생성
  • EndpointSlice controller: service와 pod 간의 링크 제공
  • ServiceAccount controller: 새로운 네임스페이스에 대한 기본 serviceAccount를 생성

etcd

모든 클러스터 데이터에 대한 Kubernetes의 백업 저장소로 사용되는 일관되고 가용성이 높은 key-value 형태의 저장소이다.

cloud-controller-manager

클러스터를 클라우드 공급자의 API에 연결하고 해당 클라우드 플랫폼과 상호 작용하는 구성 요소를 클러스터와만 상호 작용하는 구성 요소에서 분리할 수 있다.

2. Nodes

node는 Kubernetes 클러스터의 일부로 pod을 실행할 수 있는 물리적 또는 가상 머신이다. 클러스터는 최대 5000개의 노드로 확장할 수 있다.

kubelet

모든 node는 controll plane과 통신할 수 있는 작은 애플리케이션인 kubelet이 포함되어 있다. kubelet은 pod 구성에 지정된 컨테이너가 특정 node에서 실행되고 있는지 확인하고 수명 주기를 관리한다. 그리고 controll plane에서 명령하는 작업을 실행한다.

kube-proxy

모든 node에는 Kubernetes 네트워킹 서비스를 지원하는 네트워크 프록시인 kube-proxy가 포함되어 있다. 클러스터 외부 및 내부의 모든 네트워크 통신을 처리하고 운영 체제의 패킷 필터링 계층에서 트래픽을 전달하거나 응답한다.

pods

Pod는 단일 애플리케이션 인스턴스 역할하며 각 pod는 하나 이상의 긴밀하게 결합된 컨테이너와 컨테이너 실행 방법을 제어하는 구성으로 구성된다.

상태 저장 애플리케이션을 실행하려면 Kubernetes 영구 볼륨을 사용하여 포드를 영구 스토리지에 연결할 수 있다.

3. addon

addon은 Kubernetes 리소스를 사용하여 클러스터 추가 기능을 구현한다.

예를 들어 Kubernetes 서비스에 대한 DNS 레코드 제공하는 DNS, 쿠버네티스에 대한 정보 web ui로 제공하는 Web UI(Dashboard) 등이 있다.

4. Kubernetes Persistent Storage

애플리케이션이 스토리지 리소스를 사용하고 요청할 수 있도록 Kubernetes 영구 스토리지를 볼륨을 설정할 수 있다.

PersistentVolume(PV)은 Kubernetes에서 컨테이너화된 애플리케이션을 위한 내구성 있는 스토리지를 지원하도록 설계된 스토리지 리소스이다. PV 리소스는 클러스터에 속하지만 포드와 독립적으로 존재한다.


Reference

https://spot.io/resources/kubernetes-architecture/11-core-components-explained/

https://www.samsungsds.com/kr/insights/220222_kubernetes1.html

https://www.vmware.com/topics/glossary/content/kubernetes-cluster.html

https://kubernetes.io/docs/concepts/overview/components/