Post
KO

컨테이너를 다루는 표준 아키텍처, 쿠버네티스

쿠버네티스는 컨테이너 오케스트레이션을 위한 솔루션이다.

오케스트레이션(Orchestration)이란 복잡한 단계를 관리하고 요소들의 유기적인 관계를 미리 정의해 손쉽게 사용하도록 서비스를 제공하는 것을 의미 합니다. 다수 컨테이너를 유기적으로 연결, 실행, 종료 할 뿐만 아니라 상태를 추적하고 보존하는 등 컨테이너를 안정적으로 사용할 수 있게 만들어주는 것이 컨테이너 오케스트레이션 입니다.

![]()

출처 - (도서) 컨테이너 인프라 구축을 위한 쿠버네티스

쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다.** K8s**라는 표기는 “K”와 “s”와 그 사이에 있는 8글자를 나타내는 약식 표기이다.

쿠버네티스 클러스터를 자동으로 구성해주는 솔루션을 사용합니다.

kubeadm, kops(Kubernetes Operations), KRIB(Kubernetes Rebar Integrated Bootstrap), kubespray가 있다.

kubeadm이 가장 널리 사용된다.

![](/assets/images/posts/222688659291/def718334432.png?type=w580)

출처 - (도서) 컨테이너 인프라 구축을 위한 쿠버네티스

![](/assets/images/posts/222688659291/971340fe1d60.png?type=w580)

출처 - (도서) 컨테이너 인프라 구축을 위한 쿠버네티스

마스터 노드

kubectl

쿠버네티스 클러스터에 명령을 내리는 역할을 합니다. 통상적으로 API 서버와 주로 통신하여 위 이미지 상에서는 마스터 노드에 설치되어 있다.(커스터마이징 가능한 듯)

API 서버

쿠버네티스 클러스터의 중심 역할을 하는 통로이다. 상태값을 저장하는 etcd와 통신하지만, 그 밖의 요소들 또한 API 서버 중심으로 통신한다. 회사에 비유하면 모든 직원과 상황을 관리하고 목표를 설정하는 관리자에 해당된다.

etcd

구성 요소들의 상태 값이 모두 저장되는 곳이다. 회사의 관리자가 모든 보고 내용을 기록하는 노트라고 생각하면 된다. etcd 외에 다른 구성 요소는 상태 값을 관리하지 않는다. 따라서 etcd의 정보만 백업돼 있다면 긴급한 장애 상황에서도 쿠버네티스 클러스터는 복구할 수 있다. etcd는 분산 저장이 가능한 key-value 저장소이므로, 복제해 여러 곳에 저장해 두면 하나의 etcd에서 장애가 나더라도 시스템의 가용성을 확보할 수 있다.

컨트롤러 매니저

컨트롤러 매니저는 쿠버네티스 클러스터의 오브젝트 상태를 관리합니다. 예를 들어 워커 노드에서 통신이 되지 않는 경우, 상태 체크와 복구는 컨트롤러 매니저에 속한 노드 컨트롤러에서 이루어집니다. 레플리카셋 컨트롤러는 레플리카셋에 요청 받은 파드 개수대로 파드를 생성한다. 서비스와 파드를 연결 하는 역할을 하는 엔드 포인트 컨트롤러 역시 컨트롤러 매니저이다.

스케줄러

노드의 상태와 자원, 레이블, 요구조건 등을 고려해 파드를 어떤 워커 노드에 생성할 것인지를 결정하고 할당합니다. 스케줄러라는 이름에 걸맞게 파드를 조건에 맞는 워커 노드에 지정하고, 파드가 워커 노드에 할당되는 일정을 관리하는 역할을 담당한다.

워커 노드

kubelet

파드의 구성 내용(PodSpec)을 받아서 컨테이너 런타임으로 전달하고, 파드 안의 컨테이너들이 정상적으로 작동하는지 모니터링 한다.

컨테이너 런타임

파드를 다루는 컨테이너의 실행을 담당한다. 파드 안에서 다양한 종류의 컨테이너가 문제 없이 작동하게 만드는 표준 인터페이스이다.

파드(pod)

한 개 이상의 컨테이너로 단일 목적의 일을 하기 위해 모인 단위이다.

중요한 점은 파드는 언제라도 죽을 수 있는 존재이다. 이 점이 쿠버네티스를 처음 배울 때 가장 이해하기 어려운 부분이다.

![](/assets/images/posts/222688659291/46439608601b.jpg)

네트워크 플러그인

쿠버네티스 클러스터의 통신을 위해 네트워크 플러그인을 선택할 수 있고 구성해야 한다.

네트워크 플러그인은 일반적으로 CNI로 구성하는데, 주로 사용하는 CNI는 캘리코(Calico), 플래널(Flannel), 실리움(Cilium), 큐브 라우터(Kube-router), 로마나(Romana), 위브넷(WeaveNet), Canal이 있다.

CoreDNS

클라우드 네이티브 컴퓨팅 재단에서 보증하는 프로젝트로, 빠르고 유연한 DNS서버 이다. 쿠버네티스 클러스터에서 도메인 이름을 이용해 통신하는 데 사용한다. 쿠버네티스 클러스터를 구성하여 사용할 때는 IP보다 도메인 네임을 편리하게 관리해 주는 CoreDNS를 사용하는 것이 일반적이다.

사용자가 배포된 파드에 접속할 때

kube-proxy

쿠버네티스 클러스터는 파드가 위치한 노드에 kube-proxy를 통해 파드가 통신할 수 있는 네트워크 설정한다. 실제 통신은 br_netfilter와 iptables로 관리된다.

파드

이미 배포된 파드에 접속하고 필요한 내용을 전달받는다. 이때 대부분 사용자는 파드가 어느 워커 노드에 위치하는지 신경쓰지 않아도 된다.

![](/assets/images/posts/222688659291/c1fe6e0854de.png?type=w580)

출처 - (도서) 컨테이너 인프라 구축을 위한 쿠버네티스

This article is licensed under CC BY 4.0 by the author.