쿠버네티스의 개념
컨테이너화된 애플리케이션의 배포, 확장 등을 관리하는 것을 자동화하기 위한 플랫폼 : 컨테이너 오케스트레이션 엔진
- 선언적 코드(매니페스트)를 이용하여 배포하는 컨테이너로 주변 리소스를 관리함으로서, Infra as Code를 구현
- 스케일링: 클러스터를 구성하여, 여러 쿠버네티스 노드를 관리한다. 컨테이너를 배포할 때, 이미지를 기반으로 여러 컨테이너를 배포해 부하 분산/다중화 구조를 만들 수 있다.
- 스케쥴링을 통해, 노드의 성능을 기준으로 배포 가능
- 리소스 관리, 복구 자동화, 로드 밸런싱 등
구조
쿠버네티스 클러스터

쿠버네티스를 배포하면 클러스터를 얻는다.
쿠버네티스 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커 머신의 집합. 모든 클러스터는 최소 한 개의 워커 노드를 가진다.
워커 노드는 애플리케이션의 구성요소인 파드를 호스트한다. 컨트롤 플레인은 워커 노드와 클러스터 내 파드를 관리한다. 프로덕션 환경에서는 일반적으로 컨트롤 플레인이 여러 컴퓨터에 걸쳐 실행되고, 클러스터는 일반적으로 여러 노드를 실행하므로 내결함성과 고가용성이 제공된다.
참고 링크: https://kubernetes.io/ko/docs/concepts/overview/components/
마스터노드
: 컨트롤 플레인
- 클러스터 전체의 워크로드 리소스등의 주요 구성 요소들을 배포하고 제어
- 구성요소: etcd, scheduler, controller manage, dns, api-server
워커 노드
: 파드
- 동작 중인 파드를 유지시키고 쿠버네티스 런타임 환경 제공
- 노드 안의 파드를 구성시키기 위한 요소
API 서버(kube-apiserver)
- 모든 통신을 API 중심으로 한다
- 컨트롤 플레인의 핵심
- 클러스터의 다른 부분에서 사용할 수 있도록 HTTP API 제공
- 마스터 노드에서 실행하는 대부분의 작업은 kubectl의 커맨드 라인, api를 사용하는 kubeadm의 커맨드 라인을 통해 가능하지만 API를 통해서도 직접 통신 가능
오픈소스로 생태계 겉핥기
- Helm 차트: 쿠버네티스 패키지 매니저
- Argo CD: GitOps Style의 지속적 배포 지원 시스템, Git Repository의 변경 내용을 K8s 클러스터에 동기화
- Ansible: 인프라 상태의 코드를 선언하고, 모든 서버에 동일하게 배포함으로서 환경을 동일하게 유지하도록 돕는 laC 툴
- Terraform: 클라우드 리소스를 선언하고, 주요 클라우드 서비스를 프로바이더 형식으로 지원하는 laC