Kubernetes란?

Kubernetes는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다.

Traditional Deployment : 초기 조직은 애플리케이션을 물리 서버에서 실행했다. 한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당의 문제가 발생했다.

Virtualized Deployment: 그 해결책으로 가상화가 도입되었다. 이는 단일 물리 서버의 CPU에서 여러 가상 시스템 (VM)을 실행할 수 있게 하였다. 가상화를 사용하면 VM간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스 할 수 없으므로, 일정 수준의 보안성을 제공할 수 있다.

가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며, 쉽게 애플리케이션을 추가하거나 업데이트할 수 있고 하드웨어 비용을 절감할 수 있어 더 나은 확장성을 제공한다. VM은 각 가상 머신마다 운영체제가 있어서 특정 애플리케이션을 실행할 때 쓸모없는 메모리 사용량이 많아지기 때문에 호스트의 자원을 비효율적으로 사용한다.

Container Deployment: 컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유한다. 그러므로 컨테이너는 가볍다고 여겨진다. VM과 마찬가지로 컨테이너에는 자체 파일 시스템, CPU 점유율, 메모리, 프로세스 공간 등이 있다. 기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식할 수 있다.

 

 

Kubernetes 동작 원리

kubernetes 는 다수의 서버를 관리하는 툴이다. 하나의 서버가 아니라, 여러 대의 서버를 관리하기 위한 툴이기에 여러가지 구성요소가 존재한다. kubernetes 는 마스터(master), 노드(node), 애드온(addon)으로 구성된다.

kubernetes cluster는 컨테이너화된 애플리케이션을 실행하는 Worker Node라고 한다.

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