쿠버네티스란?
컨테이너화된 워크롣와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼
쿠버네티스 기능
분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공,
애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공
- Automatic Binpacking
Worker node의 가용성을 유지하면서 보유한 리소스를 충분히 활용할 수 있도록 스스로 스케쥴링하며 컨테이너를 배치함
- Storage Orchestraton
로컬 저장소를 선택하거나 NFS, iSCSI 등과 같은 공유 네트워크 스토리지를 컨테이너에 할당/마운트 하여 사용 가능함
- Secret&Configuration Management
Application 연동 및 접근 제어를 위한 보안 키, 설정 내역을 컨테이너 이미지의 변경 없이 업데이트 할 수 있고 외부로 노출하지 않고 사용 가능함
- Horizontal Scaling
CPU 사용률과 같은 metric을 기반으로 pod의 Deployments, replicaset을 스케줄링하여 수평적 확장 가능함
- Service Discovery&Load Balncing
컨테이너에 IP 주소를 자동으로 할당하고 클러스터 내 트래픽을 로드 밸런싱 할 수 있는 컨테이너 세트에 단일 DNS 이름을 할당함
- Self Healing
실패한 컨테이너를 자동으로 다시 시작하고, 사용자가 정의한 헬스 체크에 응답이 없는 컨테이너를 종료함. 워커 노드 장애시 사용 가능한 다른 워커 노드에 컨테이너를 다시 기동함
- Batch Execution
컨테이너 기반의 서비스 관리 뿐 아니라 배치 및 CI 작업 부하를 관리할 수 있으므로 원하는 경우 실패한 컨테이너 대체 가능함
- Automatic Rollbacks&Rollouts
컨테이너의 응용 프로그램이나 구성에 대한 변경 사항을 점진적으로 업데이트 하고 문제 발생 시 자동으로 롤백 할 수 있음
쿠버네티스 구성요소
Master Node
- Kubernetes Master
Kubernetes Cluster에서 컨테이너의 관리 및 배포를 관리하는 액세스 제어 플레인
클러스터 복제 패턴에 따라 마스터 수는 1개 이상임
- API Server
Kubernetes API를 노출하는 컴포넌트로, Kubernetes 오브젝트 관리/제어를 위한 프론트엔드
- Scheduler
Node가 배정되지 않은 새로 생성된 Pods를 감지하고 그것이 구동될 Node를 선택함
- Controller-Manager
4개의 컨트롤러는 논리적으로는 개별 프로세스이지만 복잡성을 낮추기 위해 단일 바이너리로 컴파일
-Node Controller: 노드가 다운되었을 때 통지와 대응
-Replication Controller: 모든 replication controller object에 대해 알맞는 수의 pods를 유지
-Endpoint Controller: 서비스와 Pods를 연결
-Service Controller: 새로운 네임스페이스에 대한 기본 계정과 API 접근 토큰 생성
- Etcd: 모든 클러스터 데이터를 담는 key-value 저장소
Replicaset, controller, scheduler, kubelet 등은 etcd에 바로 접근하지 않고 API Server를 통해 etcd 데이터에 접근할 수 있음
Worker Node
- Kubernetes Worker Node
동작중인 Pods를 유지시키고 Kubernetes 런타임 환경을 제공함
- Kubelet
각 Node에 구동되는 Agent로 Kubernetes Master와 통신하며 Pod Spec에 기술된 컨테이너들이 정상적으로 작동하도록 함
- Kube-proxy
호스트 상에서 네트워크 규칙을 유지하고 연결에 대한 포워딩을 수행함으로서 쿠버네티스 서비스 추상화가 가능하도록 함
- Container Runtime
컨테이너가 실행될 수 있는 환경(Docker, containerd, cri-o, rktle 등)
- Plugin Network
Kubernetes 기본 네트워크인 kubenetes은 기능 제약이 있어 사용자 요구사항에 따라 별도의 CNI를 사용함
- DNS
Kubernetes 서비스를 위해 DNS 레코드를 제공해주는 DNS 서버, 기본 kube-dns를 제공하나 성능 개선을 위해 별도의 플러그인 DNS를 사용하기도 함
- WEB UI
Kubernetes 클러스터를 위한 범용의 웹 기반 UI로 클러스터와 클러스터 내 동작하는 어플리케이션에 대한 관리와 실패 처리가 가능함
- Resource Monitoring
중앙 데이터베이스 내에 컨테이너들에 대한 포괄적인 시계열 메트릭스를 기록하고 데이터 조회를 위한 UI를 제공함