[Data Engineering] Kubernetes 기본 개념 및 구조
Kubernetes의 기본 개념 및 구조 파악해보기
Kubernetes란?
쿠버네티스는 컨테이너화된 애플리케이션을 배포, 관리, 확장하는 데 필요한 대부분의 수동 프로세스를 자동화하는 오픈소스 컨테이너 오케스트레이션 플랫폼입니다.
쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했습니다. K8s라는 표기는 “K”와 “s”와 그 사이에 있는 8글자를 나타내는 약식 표기입니다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했습니다.
단순한 컨테이너 플랫폼이 아닌 마이크로서비스, 클라우드 플랫폼을 지향하고 컨테이너로 이루어진 것들을 손쉽게 담고 관리할 수 있는 그릇 역할을 합니다. 서버리스, CI/CD, 머신러닝 등 다양한 기능이 쿠버네티스 플랫폼 위에서 동작합니다.
Kubernetes개념
쿠버네티스는 애플리케이션의 코드, 구성 및 종속성을 번들링하는 컨테이너를 관리하기 위한 플랫폼으로, 자체 리소스를 사용하여 격리된 프로세스로 실행될 수 있습니다. 애플리케이션마다 쿠버네티스 포드로 분류되는 컨테이너가 하나 또는 다수 제공됩니다.
쿠버네티스는 베어 메탈 서버, 가상 머신, 퍼블릭 클라우드 공급업체, 프라이빗 클라우드, 하이브리드 클라우드 환경 등에서 실행될 수 있습니다. 쿠버네티스의 주요 이점 중 하나는 다양한 종류의 인프라에서 작동한다는 것입니다.
쿠버네티스 클러스터는 쿠버네티스 구현 상세 정보에 설명된 대로 사용자가 3가지 핵심 설계 원칙을 따르도록 개발되었습니다. 쿠버네티스 배포 시 고려해야 할 사항은 다음과 같습니다.
- 보안성: 최신 보안 모범 사례를 따라야 합니다.
- 사용자 친화성: 몇 가지 간단한 명령으로 작동할 수 있어야 합니다.
- 확장 가능성: 하나의 공급업체만을 선호해서는 안 되고 구성 파일을 통해 사용자 정의할 수 있어야 합니다.
Kubernetes 클러스터
작동 중인 쿠버네티스 배포를 클러스터라고 하며, 클러스터는 컨테이너를 실행하는 호스트 그룹입니다.
kubernetes 용어
컨트롤 플레인 : 컨테이너의 life cycle을 정의, 배포, 관리하기 위한 API와 인터페이스들을 노출하는 컨테이너 오케스트레이션 레이어.
노드(node) : 쿠버네티스의 작업 장비.컨트롤 플레인에서 할당된 요청 태스크를 수행하는 머신.
파드(pod) : 클러스터에서 실행중인 컨테이너의 집합.
서비스(service) : 네트워크 서비스로 pod집합에서 실행중인 애플리케이션을 노출하는 방법
볼륨(Volume) : 포드의 컨테이너에 액세스할 수 있는 데이터가 포함된 디렉토리. 볼륨은 포드 내에서 실행되는 모든 컨테이너보다 오래 지속되며, 컨테이너를 다시 시작해도 데이터는 보존.
네임스페이스(namespace) : 가상 클러스터. 네임스페이스를 통해 쿠버네티스는 동일한 물리 클러스터 내에 있는 여러 클러스터(여러 팀 또는 프로젝트 용도)를 관리.
Kubectl
쿠버네티스 API를 사용하여 쿠버네티스 클러스터의 컨트롤 플레인과 통신하기 위한 커맨드라인 툴. Kubectl을 통하여 kubernetes에게 명령어를 사용합니다.
Master Node 구성요소
마스터 서버는 다양한 모듈이 확장성을 고려하여 기능별로 쪼개져 있는 것이 특징입니다. 관리자만 접속할 수 있도록 보안 설정을 해야 하고 마스터 서버가 죽으면 클러스터를 관리할 수 없기 때문에 보통 3대를 구성하여 안정성을 높입니다.
kube-apiserver
APi서버는 쿠버네티스 API를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트입니다. kube-api는 수평으로 확장되도록 디자인 되어있으며 더 많은 인스턴스를 배포해서 확장할 수 있습니다. 이를 통해 인스턴스를 실행하고 인스턴스간의 트래픽을 균형있게 조절합니다.
etcd
모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소로 사용되는 일관성·고가용성 키-값 저장소.
nodes, pods, configs, secrets, accounts, roles, bindings에 대한 정보가 저장되며 nodes 및 pods가 추가되거나 배포되면 업데이터가 됩니다. 또한 etcd는 클러스토로 설치를 권고하고 있으며, Raft알고리즘을 사용하여 처리합니다.
kube-scheduler
node가 배정되지 않은 새로 생성된 pod를 감지하고, 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트.
kube-controller-manager
컨트롤러 프로세스를 실행하는 컨트롤 플레인 컴포넌트.
이들 컨트롤러는 다음을 포함합니다.
- 노드 컨트롤러 : 노드가 다운되었을 때 통지와 대응에 관한 책임을 가집니다다.
- 잡 컨트롤러 : 일회성 작업을 나타내는 잡 오브젝트를 감시한 다음, 해당 작업을 완료할 때까지 동작하는 파드를 생성합니다다.
- 엔드포인트슬라이스 컨트롤러 : (서비스와 파드 사이의 연결고리를 제공하기 위해) 엔드포인트슬라이스(EndpointSlice) 오브젝트를 채웁니다다
- 서비스어카운트 컨트롤러 : 새로운 네임스페이스에 대한 기본 서비스어카운트(ServiceAccount)를 생성합니다다.
cloud-controller-manager
클라우드별 컨트롤 로직을 포함하는 쿠버네티스 컨트롤 플레인 컴포넌트입니다. 클라우드 컨트롤러 매니저를 통해 클러스터를 클라우드 공급자의 API에 연결하고, 해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와만 상호 작용하는 컴포넌트를 구분할 수 있게 해 줍니다.
노드 컴포넌트
노드 컴포넌트는 동작 중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공하며, 모든 노드 상에서 동작합니다.
kubelet
클러스터의 각 노드에서 실행되는 agent. pod에서 컨테이너가 동작하도록 관리합니다.
kube-proxy
각 노드에서 실행되는 네트워크 프록시로, 노드의 네트워크 규칙을 유지 관리합니다.
kube-dns
클러스터 내의 특정 도메인을 찾고자 할 때 사용됩니다.
Kubernetes의 장점
복잡한 대규모 환경 지원 : 여러 애플리케이션을 실행하는 프로덕션 환경에서는 다수의 컨테이너가 여러 호스트 전반에 배포되어 함께 작동해야합니다. 쿠버네티스는 대규모 워크로드에 필요한 규모로 컨테이너를 배포하기 위한 오케스트레이션 및 관리 기능을 제공합니다.
확장성 : 쿠버네티스는 조직의 요구 사항에 따라 자동으로 확장하며, 애플리케이션에 필요한 용량을 제공하는 동시에 리소스와 비용을 줄입니다.
이식성 : 쿠버네티스는 자체 데이터센터에서 온사이트로, 퍼블릭 클라우드에서, 그리고 퍼블릭 및 프라이빗 인스턴스에 대한 하이브리드 구성에서 실행될 수 있습니다. 쿠버네티스를 이용하면 동일한 명령을 어디서나 사용할 수 있습니다.
배포와 일관성 : 쿠버네티스는 인프라 전체에서 일관적으로 배포됩니다. 컨테이너는 변경 불가능한 인프라의 개념을 구현하며, 애플리케이션을 실행하는 데 필요한 모든 종속성과 설정 지침이 컨테이너와 함께 번들로 제공됩니다.
운영과 개발의 분리 및 자동화 : 컨테이너를 통해 개발자는 시간을 절약할 수 있어 반복 주기가 가속화됩니다. 동시에 운영 팀의 경우 쿠버네티스를 사용하면 시스템의 안전성에 확신을 갖게 됩니다.
하이브리드 클라우드 전략 지원 : 많은 조직이 노사이트 데이터센터와 퍼블릭또는 프라이빗 클라우드 솔루션을 결합하고 여러 클라우드 공급업체에 워크로드를 분산하여 다양한 가겨고가 서비스 수준을 활용할 수 있습니다. 쿠버네티스의 일관성과 이식성 덕분에 이러한 하이브리드 전략을 지원할 수 있습니다.
기존 애플리케이션에 대한 지속적인 지원 : 쿠버네티스는 컨테이너화된 레거시 애플리케이션 및 클라우드 네이티브 애플리케이션은 물론 마이크로서비스로 리팩토링되는 애플리케이션을 제공하고 관리하는 데 도움이 될 수 있습니다.
복잡한 환경의 관리 : 컨테이너의 마이크로서비스를 통해 스토리지, 네트워킹, 보안 등 여러 서비스를 더욱 쉽게 오케스트레이션할 수 있지만 환경에 컨테이너 수가 크게 증가하므로 복잡성이 커지기도 합니다. 쿠버네티스는 컨테이너를 pod로 분류하므로 사용자가 워크로드를 예약하고 네트워킹과 스토리지 같은 필요한 서비스를 컨테이너에 제공하는 데 도움이 됩니다.
참고자료
- https://kubernetes.io/ko/docs/concepts/overview/
- https://subicura.com/k8s/guide/#%E1%84%80%E1%85%A1%E1%84%8B%E1%85%B5%E1%84%83%E1%85%B3
- https://subicura.com/2019/05/19/kubernetes-basic-1.html
- https://aws.amazon.com/ko/kubernetes/
- https://www.redhat.com/ko/topics/containers/what-is-kubernetes
- https://tech.kakao.com/posts/484