쿠버네티스(Kubernetes)란?
Kubernetes(약어 K8S)는 컨테이너화된 애플리케이션의 배포, 관리 및 확장을 예약하고 자동화하기 위한 컨테이너 오케스트레이션 플랫폼이다.
등장 배경

서비스 배포 전략은 다음과 같은 순서로 발전해왔다. 전통적인 방식에서 가상화 그리고 최근에는 컨테이너 배포의 시대가 되었다.
전통적인 배포
초기에는 애플리케이션을 물리 서버에서 실행했다. 하나의 물리 서버에서 여러 애플리케이션을 실행했고, 이때 리소스 전부를 차지하는 애플리케이션이 있는 경우 다른 애플리케이션에까지 영향을 주는 경우가 생기곤 했다.
이에 대한 해결책으로는 물리 서버당 하나의 애플리케이션을 실행시킬 수 있지만, 이는 리소스를 효율적으로 사용하지 못한다.
가상화 배포
전통적인 배포 전략에서의 문제점을 해결하기 위한 방법은 가상화였다. 단일 물리 서버에서 가상 머신(VM)을 실행하여 애플리케이션을 분리하는 방식이다. 이는, 애플리케이션간 액세스또한 방지하여 간접적으로 보안성을 제공하기도 했다.
이때의 가상화는 하드웨어상에 하이퍼바이저를 통해 별도의 운영체제를 포함한 모든 구성요소를 실행한 것을 의미한다.
하이퍼바이저 (Hypervisor)
가상머신을 관리하는 소프트웨어 계층으로, 가상머신과 하드웨어간 인터페이스 역할을 수행한다. 각각 실행에 필요한 물리적 리소스에 접근할 수 있도록 하고, 가상 머신 간 간섭하지 않도록 한다.
가상 머신(Virual Machine)
물리 서버에 하이퍼바이저를 두고, 그 위에 독립적인 운영체제를 실행하여, 하나의 컴퓨터에 여러 운영 체제를 갖춘 여러 대의 컴퓨터처럼 사용하는 기술을 말한다.
컨테이너 개발
가상 머신은 별도의 OS를 함께 실행하기때문에 다소 무겁다. 이에 반해 컨테이너는 VM과 유사하지만 가벼운 특성으로, 최근에는 컨테이너를 통해 가상환경을 구축하고 해당 환경에 애플리케이션을 배포한다.
컨테이너
가상화를 더 가볍고 민첩하게 하는 방법으로, 호스트의 커널을 공유하면서 애플리케이션 실행 환경을 격리하는 방식이다. 하이퍼바이저를 통해 가상의 운영체제를 실행하는것이 아닌, 애플리케이션 실행에 필요한 모든것(라이브러리 등)을 패키지화하여 독립적으로 실행한다.
왜 컨테이너를 사용하는가?
컨테이너가 VM보다 가볍다는 이유 말고도 컨테이너가 주는 이점이 있기때문에 컨테이너 방식을 사용한다.
- 빠른 애플리케이션 생성과 배포 : VM 이미지보다 컨테이너 이미지 생성이 쉽고 효율적임
- 개발과 운영 분리 : 개발자는 개발 후, 실행 가능한 컨테이너 이미지만 만들면 됨
- 가시성: OS 수준의 매트릭이 아닌, 애플리케이션의 매트릭에 집중할 수 있다.
- 이식성, 일관성: 어느 환경에서나 동일하게 구동된다.
이처럼 컨테이너 기반으로 애플리케이션을 운영하는 환경에서, 컨테이너를 보다 효율적으로 관리하는 도구가 필요해졌다.
쿠버네티스가 하는 일
프로덕션 환경에서는 컨테이너가 제대로 실행중인지 확인하고, 리소스 매트릭에 따라 확장하며, 가용성을 위한 관리가 필요하다. 이러한 요구사항에 의해 컨테이너를 자동으로 관리하고 확장하는 컨테이너 오케스트레이션이 등장하게 되었다.
오케스트레이션은 컴퓨터 시스템과 소프트웨어의 자동화된 구성, 조율, 관리이다.
https://ko.wikipedia.org/wiki/%EC%98%A4%EC%BC%80%EC%8A%A4%ED%8A%B8%EB%A0%88%EC%9D%B4%EC%85%98_(%EC%BB%B4%ED%93%A8%ED%8C%85)
컨테이너 오케스트레이션으로 Docker Swarm과 Apache Mesos가 있긴 했지만, 쿠버네티스가 가장 널리 채택되고 발전해왔다.
- 배포 : 지정된 호스트에 컨테이너를 배포한다.
- 롤아웃/롤백 : 기존 컨테이너를 제거하고 새로운 버전의 컨테이너로 다시 배포하고, 필요 시 다시 되돌릴 수 있다.
- 서비스 검색: DNS(domain name system, 이름) 혹은 IP를 통해 서비스(쿠버네티스 구성요소)를 검색할 수 있음
- 스토리지 프로비저닝 : 컨테이너의 파일들을 로컬 저장소, 클라우드 등 원하는 저장소 시스템과 연결 가능
- 로드밸런싱 : 자동으로 네트워크가 안정적이도록 컨테이너에 분산시킴
- 오토스케일링 : 사용량에 따라 자동으로 클러스터의 워크로드(애플리케이션)를 늘리거나 감소시킴
- 자동 복원 (Self-healing) : 컨테이너가 오류로 종료되면, 자동으로 재시작함
쿠버네티스의 구성요소(컴포넌트)

쿠버네티스를 배포하면 위의 사진처럼 클러스터가 구성된다.
쿠버네티스 클러스터엔 크게 두가지로 분류할 수 있고, 클러스터 제어를 담당하는 컨트롤 플레인(Control Plane)과 컨트롤 플레인의 요청을 동작하는 워커 노드로 구성된다.
컨트롤 플레인은 마스터 노드 위에서 구성되며, 워커 노드와 클러스터 내 파드(가장 작은 컴퓨팅 단위)를 관리한다.
워커 노드는 파드를 호스트하고, 클러스터내 최소 한개의 워커 노드를 가진다.
이때, 마스터 노드와 워커 노드 모두 1개 이상 존재할 수 있으며 가용성을 위해 더 많아질 수 있다.
Control plane 컴포넌트
Kube-apiserver
쿠버네티스 API 서버를 노출하는 컴포넌트로, 모든 명령과 쿼리를 HTTP API 형태로 제공한다.
etcd
분산 시스템의 실행을 위한 중요 정보를 보관하고 관리하는 분산 키-값 저장소이다. 구성 데이터, 상태 데이터, 및 메타데이터를 관리함.
etcd는 RSM(Replicated state machine)으로 똑같은 데이터를 여러 서버에 복제하는 형태로 값을 저장한다.
kube-scheduler
노드에 바인딩되지 않은 파드를 찾아 적합한 노드에 할당(스케줄링)하는 역할을 수행한다.
kube-controller-manager
클러스터 내의 컨트롤러를 실행하는 프로세스. 논리적으로는, 컨트롤러와 분리된 프로세스지만, 복잡성을 낮추기 위해 컨트롤러와 함께 단일 프로세스로 실행된다.
컨트롤러(Controller)
클러스터의 상태를 관찰한 후 요구사항에 따른 조치를 취하는 프로세스이다. 실제 쿠버네티스의 핵심 동작(파드 상태 유지 등)을 수행한다.
- 노드 컨트롤러: 노드가 다운되었을때 대응
- 잡 컨트롤러 : 일회성 작업을 나타내는 잡 오브젝트를 감시 후 완료할때까지 동작하는 파드 생성
cloud-controller-manager (Optional)
클라우드 제공업체에서 제공하는 컨트롤러를 관리, 실행하는 컴포넌트이다. 클라우드와 연결되어 클라우드와 상호작용하는 요소와 클러스터 내에서만 상호작용하는 요소를 분리한다.
노드(워커 노드) 컴포넌트
kubelet
워커노드에서 마스터 노드(컨트롤 플레인)으로부터 명령을 수신하고 실행하는 소프트웨어 에이전트. 파드 생성, 실행 및 모니터링 등 역할을 수행한다.
kube-proxy
쿠버네티스 클러스터 내부에서 네트워크 요청을 전달하는 역할.
컨테이너 런타임
파드에 포함된 컨테이너 실행을 실질적으로 담당하는 애플리케이션.
쿠버네티스는 컨테이너 제어를 위한 표준 규약인 CRI(Container Runtime Interfeace)를 제공하고, 이를 준수한 애플리케이션(containerd, CRI-O)을 통해 파드의 컨테이너를 실행한다.
쿠버네티스와 도커 관계에 대해 알아보면, 쿠버네티스에서 표준으로 도커를 사용하지 않는다는 글을 쉽게 접할 수 있는데 이에 해당한다.
관련한 자세한 글: https://www.samsungsds.com/kr/insights/docker.html
흔들리는 도커(Docker)의 위상 - OCI와 CRI 중심으로 재편되는 컨테이너 생태계 | 인사이트리포트 |
컨테이너에 대한 관심이 급격히 증가하면서 대부분의 주요 IT 벤더와 클라우드 공급자들은 컨테이너 기반의 솔루션을 발표했고 관련 스타트업 또한 급증해 컨테이너의 생태계를 넓혀왔습니다.
www.samsungsds.com
애드온
DNS
네트워크에서 사용하는 DNS와 동일한 역할로, 클러스터내의 파드와 서비스를 위한 네이밍 서비스를 제공한다. IP 주소 대신 DNS 이름을 사용하여 접속할 수 있도록 하는데 사용된다.
대시보드
쿠버네티스 클러스터를 위한 웹 기반 UI, 클러스터뿐 아니라 동작하는 애플리케이션에 대한 관리와 문제 해결을 지원한다.
References
https://kubernetes.io/ko/docs/concepts/overview/
https://www.ibm.com/kr-ko/topics/virtualization
https://www.ibm.com/kr-ko/topics/kubernetes
https://www.samsungsds.com/kr/insights/220222_kubernetes1.html
https://tech.kakao.com/posts/484