20210823 (월) Kubernetes 개념
9:34
on-premise 환경에서의 프라이빗 클라우드 환경을 가정하여 kubernetes cluster 구축
컨테이너 환경을 제공
Container | |
Namespace | Mount point Process Network - IPC 통신 UTS User |
CGroup (Control Group) | CPU Memory Network I/O Disk I/O |
Docker compose : 하나의 docker host 내에서 복수의 container 제어
Docker swarm : 클러스터 관리 기능을 가졌지만 쿠버네티스에 밀려서 표준과는 거리가 있음.
SaaS : End-user에 제공되는 클라우드 서비스, Kubernetes는 일종의 PaaS
Kubernetes (k8s) : 조타수, 파일럿을 의미하는 그리스어에서 유래
구글 내부의 Borg 프로젝트에서 시작하여 Linux Foundation 의 CNCF에 Kubernetes라는 이름으로
기증하여 여러 Vendor사와 공동 개발
Kubernetes에서 제공하는 기능
Container Platform
Microservice Platform
이식성 있는 Cloud Platform
Kubernetes가 제공하지 않는 기능
CI/CD (Continuous Intergration/Continuous Delivery) 지속적 통합, 지속적 배포 파이프라인 미 제공
애플리케이션 레벨 서비스 (미들웨어, 빅데이터에 대한 처리, 데이터베이스 등) 미 제공
로깅, 모니터링, 경고 솔루션 미제공 : 별도 모니터링 환경을 구성할 필요성
Kubernetes Architecture
Kubernetes Cluster의 구성요소에는 Control Plane, Nodes, Add-on
1. Control Plane :
Kubernetes cluster 전체를 제어함.
Kubernetes clsuter의 전반적인 결정(pod 실행에 대한 결정, 스케쥴링 등)과 cluster의 이벤트를 감지/대응
API Server (kube-apiserver) :
Kubernetes cluster의 모든 구성요소들이 Control Plane에 위치하는 API Server와 메시지를 주고 받음
키-값 저장소 (etcd) :
Kubernetes Cluster의 모든 정보를 저장하는 데이터베이스로 일관성과 고가용성을 지원하는 키-값 저장소
Kubernetes Scheduler (kube-Scheduler) :
새로 생성되는 파드(Pod)를 감지하고 적절한 노드에 배정하는 역할 수행
Kubernetes Controller Manager(Kube-controller-manager) :
Controller는 API Server를 통해 Cluster의 상태를 감시하고 필요한 상태로 이행하는 기능 수행
Control Manager는 Cotroller를 담당하는 Control Plane의 구성 요소임
Kubernetes Controller Manager 종류
Node Controller : Node를 관리하며 만약 Node가 다운되는 경우 알림 및 대응 수행
Replication Controller : Replication Controller 를 사용하는 모든 Object를 관리하며 적정 수준의 Pod를 유지하는 기능을 담당
Endpoint Controller : Service와 Pod를 연결함
Service Account, Token Controller : Kubernetes의 Namespace, Account, Token을 담당
Cloud Controller
Cloud 제공업체의 기능과 Cloud에서 동작하는 Kubernetes 구성요소와의 상호작용을 할 수 있게하는 Controller
2. Node :
Kubernetes Cluster에서 컨테이너의 런타임 실행환경을 제공하고 동작중인 파드(Pod)를 유지하는 기능담당
Kubelet (각 노드에서 실행되는 에이전트) :
Control Plane으로부터 파드(Pod)의 구성정보를 받아서 컨테이너가 정확하게 동작하도록 관리/보장하는 역할
Kubernetes Proxy(kube-proxy) :
Host 레벨의 네트워크 규칙을 구성하고 외부 연결을 파드에 포워딩을 담당함
Container Runtime :
컨테이너의 동작을 책임지는 구성요소. (Docker, containerd, CRI-O, 그외 Kubernetes CRI 구현한 모든 런타임)
CRI(Container Runtime Interface)
3. Add-on :
Kubernetes Cluster에 추가할 수 있는 확장 기능을 제공
Kubernetes Cluster의 Add-on 주요 구성 요소 :
Cluster DNS :
Kubernetes Cluster 내의 여러 오브젝트 (Pod, Container, Service 등)에 대한 DNS 레코드를 기록하여 주소 기반으로 오브젝트를 찾을 수 있도록 지원
Dashboard
Kubernetes Cluster를 관리하기 위한 Web 기반의 Dashboard
Container Resource Monitoring
실시간 정보 정도만 제공하고, 기본적으로 저장(기록)되지 않음.
컨테이너에 대한 Resource 사용량을 모니터링하는 기능 제공
Cluster Logging
컨테이너 로그를 로그 저장소에 저장하고 관리하는 기능 제공
4. Kubernetes API
Kubernetes 의 모든 구성요소는 API 서버와 메시지를 주고 받음
API 버전 표기법 : /api/v1 , /apis/extensions/v1beta1
Kubernetes API 버전 종류
Alpha Version API
버전이름에 alpha가 포함됨 (v1alpha1)
버그가 있을 수 있으며 기능 활성화 시 버그에 노출될 수 있음.
default : 비활성화
기능에 대한 기술 지원이 언제든지 공지 없이 중단될 수 있음
다음 릴리즈에서 공지 없이 API 호환성이 깨지는 방식으로 변경될 수 있음
Beta Version API
버전이름에 beta가 포함됨 (v1beta1)
코드가 잘 테스트되고, 이 기능을 활성화 해도 안전함.
세부적인 내용이 변경될 수 있으나 전반적인 기술지원이 중단되지 않음
다음 릴리즈에서 API 호환성이 깨지는 방식으로 변경될 수 있지만 이전할 수 있는 마이그레이션 가이드 지원 예정
API 변경 시 기존 리소스에 대한 삭제 및 재생성이 필요할 수 있으며 이 때 다운타임이 발생할 여지가 있음
Stable Version API
버전 이름이 vX(숫자) 형태로 정의됨.
Stable Version의 기능은 이후에 소프트웨어 릴리즈에 포함됨
Kubernetes API 그룹
Kubernetes에서 기능을 추가할 때 해당 기능을 사용하기 위한 API를 더 쉽게 확장할 수 있도록 도와줌
-Core그룹
YAML - apiVersion : [VERSION]
HTTP REST API - /api/[GROUP]/[VERSION]
-Core 이외의 그룹
다양한 서비스를 지원하다보니 운영이 다소 복잡함.