Kubernetes
쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다.
Kubernetes is a portable, extensible, open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation
•
워크로드: 주어진 기간에 시스템에 의해 실행되어야 할 작업의 할당량. 쿠버네티스에서는 컨테이너로 구성된 작업을 의미.
•
이식성: 다른 환경에서 동일한 소프트웨어를 사용할 수 있다는 것
•
선언적 구성(declarative configuration) vs. 명령어 구성(imperative configuration)
◦
선언적 구성: 결과를 생성하기 위해 원하는 상태를 선언(ex. apply, diff)
◦
명령어 구성: 사용자가 직접 일련의 조치를 취하는 구성(ex. create, delete, replace)
Kubernetes Objects
•
쿠버네티스 시스템에서 영속성을 가지는 기본 구성 단위
•
쿠버네티스의 구성요소(Components, ex. kube-apiserver, etcd, kubelet, ...)와는 다른 개념이므로 유의
기본 오브젝트
Pod
•
"고래 떼"를 일컫는 말에서 유래
•
'하나 이상의 컨테이너'로 구성된 오브젝트
•
동일한 네트워크와 볼륨(스토리지)을 공유
•
스케일링과 복제가 되는 기본 단위
•
Pod를 직접 배포하는 일은 없음
Replica Set
•
구) Replication Controller
•
Stateless 어플리케이션을 복제하기 위한 용도로 사용
•
Pod의 복제를 담당하는 오브젝트
Service
•
Pod로 트래픽을 프록시하고 로드밸런싱을 담당하는 오브젝트
Storage
Persistent Volume
•
Pod에서 사용하는 데이터를 보존하기 하기 위한 볼륨 오브젝트
Config Map
•
Pod에서 사용하는 설정파일 오브젝트
•
ex) Nginx의 nginx.conf, Elasticsearch의 elasticsearch.yml 등
Secret
•
Pod에서 사용하는 암호화된 설정파일 오브젝트
•
ex) Database 계정, 패스워드
클러스터 구성 오브젝트
Namespace와 Label
https://subicura.com/2019/05/19/kubernetes-basic-1.html
Namespace
•
쿠버네티스 오브젝트를 위한 폴더
•
쿠버네티스 오브젝트는 생성되면 무조건 하나의 Namespace에 속하게 된다.
•
최초 클러스터 구성시 default와 kube-system Namespace가 생성됨
•
Namespace 별로 역할기반접근제어(RBAC, Role-Based Access Control) 규칙을 다르게 설정할 수 있음
•
Namespace 별로 리소스(cpu, memomry) 제한을 줄 수 있음
Label
•
쿠버네티스 오브젝트를 식별하기 위한 key-value
•
Label Query 또는 Label Selector를 통해서 특정 key-value를 가진 오브젝트에 대해서만 명령을 내릴 수 있음
Annotation
•
오브젝트에 할당한 메타데이터
•
Label과 다르게 식별용도로 사용하지 않음
•
시스템이 필요한 정보들을 담고 있어서 쿠버네티스 클라이언트나 라이브러리가 활용하는데 사용 (ex. nginx-ingress에서 사용하는 정보)
•
배포시 변경사유나 담당자 정보를 적는 데에도 사용
고급 오브젝트
Deployment
•
오브젝트의 한 버전에서 다른 버전으로 안전한 롤아웃을 나타내기 위해 사용하는 오브젝트
•
Replica Set에 배포방식을 추가한 것
Ingress
•
경로 및 호스트 기반 HTTP 로드밸런서와 라우터 객체(L7)
•
외부에서 유입되는 트래픽을 특정 Service로 라우팅하는 역할
Stateful Set
•
Database와 같이 Stateful 성격을 가지는 Pod를 관리하는 오브젝트
•
Deployment가 Stateless 어플리케이션을 배포하기 위해 사용한다면 Stateful Set은 Stateful 어플리케이션을 배포하기 위해서 사용
•
Pod 이름에 대해서 임의의 해시가 아닌 규칙성을 부여하여 순차적으로 증가
•
배포시 순차적인 기동과 업데이트
•
개별 Pod 마다 다른 볼륨을 사용할 수 있음
배치 워크로드
Job
•
배치 또는 일회성 워크로드 오브젝트
•
Job에 의해 생성된 Pod는 작업을 완료하고 종료할 때까지만 실행됨
•
동일한 Pod를 여러개 만들어서 병렬처리 가능
Cron Job
•
Job에 스케줄링 기능을 추가한 오브젝트
클러스터 에이전트와 유틸리티
데몬셋
•
모든 노드(서버)에 1개씩 배포되는 오브젝트
•
주로 모니터링 용도로 사용