1장. Kubernetes 개요

Kubernetes는 Google에서 개발한 오픈 소스 컨테이너 오케스트레이션 툴입니다. Kubernetes를 사용하여 컨테이너 기반 워크로드를 실행하고 관리할 수 있습니다. 가장 일반적인 Kubernetes 사용 사례는 상호 연결된 마이크로 서비스 배열을 배포하여 클라우드 네이티브 방식으로 애플리케이션을 구축하는 것입니다. 온프레미스, 퍼블릭, 프라이빗 또는 하이브리드 클라우드에 걸쳐 호스트를 확장할 수 있는 Kubernetes 클러스터를 생성할 수 있습니다.

일반적으로 애플리케이션은 단일 운영 체제 위에 배포되었습니다. 가상화를 사용하면 물리적 호스트를 여러 가상 호스트로 분할할 수 있습니다. 공유 리소스의 가상 인스턴스에서 작업하는 것은 효율성 및 확장성에 적합하지 않습니다. VM(가상 머신)은 실제 머신만큼 많은 리소스를 사용하므로 CPU, RAM, 스토리지와 같은 VM에 리소스를 제공하면 비용이 많이 듭니다. 또한 공유 리소스에서 가상 인스턴스 사용량으로 인해 애플리케이션이 성능이 저하될 수 있습니다.

그림 1.1. 클래식 배포를 위한 컨테이너 기술의 진화

247 OpenShift Kubernetes 개요

이 문제를 해결하려면 컨테이너화된 환경에서 애플리케이션을 분리하는 컨테이너화 기술을 사용할 수 있습니다. VM과 유사하게 컨테이너에는 자체 파일 시스템, vCPU, 메모리, 프로세스 공간, 종속성 등이 있습니다. 컨테이너는 기본 인프라와 분리되며 클라우드 및 OS 배포 전반에서 이식 가능합니다. 컨테이너는 완전한 기능을 갖춘 OS보다 훨씬 가벼우며 운영 체제 커널에서 실행되는 경량의 격리된 프로세스입니다. VM은 부팅 속도가 느리고 물리적 하드웨어에 대한 추상화입니다. 하이퍼바이저를 통해 단일 시스템에서 VM을 실행합니다.

Kubernetes를 사용하여 다음 작업을 수행할 수 있습니다.

  • 리소스 공유
  • 여러 호스트에서 컨테이너 오케스트레이션
  • 새 하드웨어 구성 설치
  • 상태 점검 실행 및 자동 복구 애플리케이션 실행
  • 컨테이너화된 애플리케이션 스케일링

1.1. Kubernetes 구성 요소

표 1.1. Kubernetes 구성 요소

구성 요소목적

kube-proxy

클러스터의 모든 노드에서 실행되며 Kubernetes 리소스 간의 네트워크 트래픽을 유지 관리합니다.

kube-controller-manager

클러스터 상태를 관리합니다.

kube-scheduler

노드에 pod를 할당합니다.

etcd

클러스터 데이터를 저장합니다.

kube-apiserver

API 오브젝트의 데이터를 검증하고 구성합니다.

kubelet

노드에서 실행되며 컨테이너 매니페스트를 읽습니다. 정의된 컨테이너가 시작되어 실행 중인지 확인합니다.

kubectl

워크로드를 실행하려는 방법을 정의할 수 있습니다. kubectl 명령을 사용하여 kube-apiserver와 상호 작용합니다.

노드

노드는 Kubernetes 클러스터의 물리적 시스템 또는 VM입니다. 컨트롤 플레인은 모든 노드를 관리하고 Kubernetes 클러스터의 노드에서 Pod를 예약합니다.

컨테이너 런타임

컨테이너 런타임은 호스트 운영 체제에서 컨테이너를 실행합니다. Pod를 노드에서 실행할 수 있도록 각 노드에 컨테이너 런타임을 설치해야 합니다.

영구 스토리지

장치가 종료된 후에도 데이터를 저장합니다. Kubernetes는 영구 볼륨을 사용하여 애플리케이션 데이터를 저장합니다.

container-registry

컨테이너 이미지를 저장하고 액세스합니다.

Pod

Pod는 Kubernetes에서 가장 작은 논리 단위입니다. Pod에는 작업자 노드에서 실행할 하나 이상의 컨테이너가 포함되어 있습니다.