Kubernetes

uuuu.jini·2022년 9월 15일
0

Kubernetes

목록 보기
4/14

쿠버네티스(Kubernetes)란?


쿠버네티스는 컨테이너화 된 애플리케이션의 대규모 배포, 스케일링 및 관리를 간편하게 만들어주는 오픈 소스 기반 컨테이너 오케스트레이션(Container Orchestration) 도구이다.

같은 역할을 하는 도구로서 도커 스웜, 아파치 메소스, 노마드 등이 대규모 컨테이너의 효율적 제어라는 동일한 목적 아래 발전되어 왔으나, 2022년 현재는 쿠버네티스가 컨테이너 기반 인프라 시장에서 사실상의 표준으로 자리 잡은 상태이다.

Container Orchestration이란?


IT 업계에서 오케스트레이션이란 용어는 컴퓨터 자원과 어플리케이션, 서비스에 대한 자동화된 설정, 관리 및 제어 체계를 의미한다. 즉, 컨테이너화된 애플리케이션에 대한 자동화된 설정, 관리 및 제어 체계로 받아들일 수 있을 것이다.

마이크로서비스 아키텍쳐에서는 프로젝트에 포함된 세부 기능들이 작은 서비스 단위로 분리되어 구축된다. 이 각각의 서비스를 구현할 때 컨테이너 기술이 흔하게 이용된다. 한정된 적은 양의 컨테이너는 개별 관리자가 손수 관리할 수 있지만, 대규모의 상용 프로젝트 환경에서 수많은 컨테이너를 이런 식으로 제어하는 것은 불가능하다.

동시에 수백, 수천 개의 컨테이너를 배포하고 관리해야 하는 상황이라면 아래의 4가지 이슈에 대한 해답을 찾아야 한다.

  • 배포 관리: 어떤 컨테이너를 어느 호스트에 배치하여 구동시킬 것인가? 각 호스트가 가진 한정된 리소스에 맞춰 어떻게 최적의 스케줄링을 구현할 것인가? 어떻게 하면 이러한 배포 상태를 최소한의 노력으로 유지 관리할 수 있을까?
  • 제어 및 모니터링: 구동 중인 각 컨테이너들의 상태를 어떻게 추적하고 관리할 것인가?
  • 스케일링: 수시로 변화하는 운영 상황과 사용량 규모에 어떻게 대응할 것인가?
  • 네트워킹: 이렇게 운영되는 인스턴스 및 컨테이너들을 어떻게 상호 연결할 것인가?

위의 4가지 이슈 해결을 위해 컨테이너 오케스트레이션이 등장하였다.

쿠버네티스 필요 이유


쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공한다. 애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공한다.

  • 서비스 디스커버리와 로드 밸런싱: 쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있다. 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어 질 수 있다.
  • 스토리지 오케스트레이션: 쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 할 수 있다.
  • 자동화된 롤아웃과 롤백: 쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있다. 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있다.
  • 자동화된 빈 패킹(bin packing): 컨테이너화 된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공한다. 각 컨테이너가 필요로 하는 CPU와 메모리를 쿠버네티스에게 지시한다. 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해준다.
  • 자동화된 복구(self-healing): 쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, 사용자 정의 상태 검사에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여 주지 않는다.
  • 시크릿과 구성 관리: 쿠버네티를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리 할 수 있다. 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트 할 수 있다.

쿠버네티스 컴포넌트


쿠버네티스를 배포하면 클러스터를 얻는다.

쿠버네티스 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커 머신의 집합으로 모든 클러스터는 최소 한 개의 워커 노드를 가진다.

워커 노드는 애플리케이션의 구성요소인 파드를 호스트한다. 컨트롤 플레인(Control Plane) 은 워커 노드와 클러스터 내 파드를 관리한다. 프로덕션 환경에서는 일반적으로 컨트롤 플레인이 여러 컴퓨터에 걸쳐 실행되고, 클러스터는 일반적으로 여러 노드를 실행하므로 내결함성과 고가용성이 제공된다

파드(POD): 클러스터에서 실행 중인 컨테이너의 집합
노드(Node): 쿠버네티스의 작업 장비(worker machine)이다.

1] Control Plane 컴포넌트

클러스터에 관한 전반적인 결정(ex.스케줄링)을 수행하고 클러스터 이벤트를 감지하고 반응한다.

클러스터 내 어떠한 머신에서든지 동작할 수 있다. 그러나 간결성을 위해, 구성 스크립트는 보통 동일 머신 상에 모든 컨트롤 플레인 컴포넌트를 구동시키고, 사용자 컨테이너는 해당 머신 상에 동작시키지 않는다.

- Kube-apiserver

API 서버는 쿠버네티스 API를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트이다. API 서버는 쿠버네티스 컨트롤 플레인의 프론트 엔드 이다.

쿠버네티스 API 서버의 주요 구현은 kube-apiserver이다. kube-apiserver는 수평으로 확장되도록 디자인되었다. 즉, 더 많은 인스턴스를 배포해서 확장할 수 있다. 여러 kube-apiserver 인스턴스를 실행하고, 인스턴스간의 트래픽을 균형있게 조절할 수 있다.

- etcd

모든 클러스터 데이터를 담는 쿠버네티스의 뒷단의 저장소로 사용되는 일관성,고가용성,키-값 저장소이다.

- kube-scheduler

노드가 배정되지 않은 새로 생성된 파드를 감지하고, 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트이다.

- Kube-controller-manager

컨트롤러 프로세스를 실행하는 컨트롤 플레인 컴포넌트

컨트롤러(Controller): API 서버를 통해 클러스터의 공유된 상태를 감시하고, 현재 상태를 원하는 상태로 이행시키는 컨트롤 루프.

논리적으로, 각 컨트롤러는 분리된 프로세스이지만, 복잡성을 낮추기 위해 모두 단일 바이너리로 컴파일되고 단일 프로세스 내에서 실행된다.

  • 노드 컨트롤러: 노드가 다운 되었을 때 통지와 대응에 관한 책임을 가짐
  • replication 컨트롤러: 시스템의 모든 레플리케이션 컨트롤러 오브젝트에 대해 알맞은 수의 파드들을 유지시켜 주는 책임을 가진다.
  • endpoint 컨트롤러: 엔드포인트 오브젝트를 채운다.(서비스와 파드 연결)
  • 서비스 어카운트&토큰 컨트롤러: 새로운 네임스페이스에 대한 기본 계정과 API 접근 토큰을 생성한다.

- cloud-controller-manager

클라우드별 컨트롤 로직을 포함하는 쿠버네티스 컨트롤 플레인 컴포넌트

클러스터를 클라우드 공급자의 API에 연결하고, 해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와만 상호 작용하는 컴포넌트를 구분할 수 있게 해준다. cloud-controller-manager는 클라우드 제공자 전용 컨트롤러만 실행한다. 자신의 사내 또는 PC 내부의 학습 환경에서 쿠버네티스 실행 중인 경우 클러스터에는 클라우드 컨트롤 매니저가 없다.

2] 노드 컴포넌트

동작 중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공하며, 모든 노드 상에서 동작한다.

- Kubelet

클러스터의 각 노드에서 실행되는 에이전트

Kubelet은 파드에서 컨테이너가 확실하게 동작하도록 관리한다.

컨테이너: SW와 그것에 종속된 모든 것을 포함한 가볍고 휴대성이 높은 실행 가능한 이미지이다.

다양한 매커니즘을 통해 제공된 파드 스펙(PodSpec)의 집합을 받아서 컨테이너가 해당 파드 스펙에 따라 건강하게 동작하는 것을 확실히 한다.

- Kube-proxy

클러스터의 각 노드에서 실행되는 네트워크 프록시로 쿠버네티스의 서비스 개념의 구현부이다.

노드의 네트워크 규칙을 유지 관리해주며, 네트워크 규칙이 내부 네트워크 세션이나 클러스터 바깥에서 파드로 네트워크 통신을 할 수 있도록 해준다.

- Container RunTime(컨테이너 런타임)

컨테이너 실행을 담당하는 SW이다.

3] 애드온

애드온은 쿠버네티스 리소스를 이용하여 클러스터 기능을 구현한다.

쿠버네티스 API


쿠버네티스 컨트롤 플레인의 핵심은 API 서버이다. API 서버는 최종 사용자, 클러스터의 다른 부분 그리고 외부 컴포넌트가 서로 통신할 수 있도록 HTTP API를 제공한다.

쿠버네티스 API를 사용하면 쿠버네티스의 API 오브젝트를 질의하고 조작할 수 있다.

대부분의 작업은 kubectl 커맨드 라인 인터페이스 또는 API를 사용하는 kubeadm과 같은 다른 커맨드 라인 도구를 통해 수행할 수 있다. REST 호출을 통해 직접 API에 접근할 수 도 있다.

profile
멋쟁이 토마토

0개의 댓글