쿠버네티스 입문 -2-
클라우드 네이티브 환경에서는 스케일을 쉽게 변경할 수 있는 것이 장점입니다. 이러한 환경에서 리소스를 쉽게 컨트롤할 수 있어야 합니다. 동시에 수십개, 수백개의 컨테이너를 배포하고 관리하는 상황에서 아래의 어려움를 해결해야 합니다
1. 배포 관리 : 호스트의 리소스에 맞춰 어떤 컨테이너를 할당해야 하나, 배포 상태를 최소한의 변경으로 유지할 수 있는가?
2. 제어와 모니터링 : 구동 중인 컨테이너 상태를 어떻게 유지하고 관리할 것인가
3. 스케일링 : 쉽게 자원을 줄이고 늘릴 수 있는가
4. 네트워킹 : 운영되는 컨테이너간의 통신은 어떻게 할 것인가?
위의 4가지 어려움을 쉽게해결해주는 것이 컨테이너 오케스트레이션입니다. 이 중 하나가 저희가 아는 쿠버네티스입니다. 쿠버네티스 특징은 기능단위의 모듈화, 자가 복구, API 기반 상호작용등이 있습니다. 각각의 리소스들은 개별적인 구성요소이며, 독립적으로 분산되어 있습니다. 또한 자원들을 self healing이 가능하도록 만들었습니다.(마스터 노드의 etcd, api-server 등도 static pod 입니다). 이러한 기능들이 서로 api-server를 통해 접근하여 실행하는 구조로 만들어습니다. 즉 쿠버네티스는 다양한 리소스들을 쉽게 관리하는 관리자입니다.
쿠버네티스에서 관리하기 위해 등록하는 '리소스'는 컨테이너의 실행과 서비스의 생성 등 많은 종류가 있습니다.
리소스는 총 5가지 카테고리로 분류 합니다.
카테고리
- workload api : 컨테이너 실행에 관련된 리소스입니다
파드, 레플리카셋, 디플로이먼트,데못셋, 스테이트 풀 셋, 잡, 크론잡등이 있습니다. 실제 클러스터 위에서 컨테이너를 기동하기 위해 사용됩니다. - service api : 컨테이너 외부에 공개하는 엔드포인트를 제공합니다
서비스와 인그레스등이 있습니다. 컨테이너 서비스 디스커버리와 외부에서 접속을 하는 엔드 포인트 제공 역할을 합니다 - config & storage api : 설정/기밀 정보/볼륨등에 관련된 리소스
시크릿, 컨피그맵등이 있습니다. 설정과 시크릿 정보를 컨테이너에 담기위해 사용됩니다. 시크릿과 컨피그 맵은 모두 key-value 형태입니다. - 클러스터 api : 보안이나 쿼터 등에 관련된 리소스
노드, 네임스페이스 , 서비스 어카운트, 룰등으로 보안 설정이나 정책, 클러스터 자체를 관리하기 위해 리소스 입니다. - 메타 데이터 api : 클러스터 내부의 다른 리소스를 관리하는 리소스
쿠버네티스에서 리소스를 등록하는 방법은 imperative(명령형) 과 declarative(선언형) 방식을 제공합니다.
명령형 접근은 어떤 리소스 상태로 가기 위한, 어떤 작업 해야하는 지를 나열하는 것입니다. 선언형은 우리가 어떤 리소스 상태를 원하는 지를 나타냅니다. 선언형으로 자원의 상태를 관리하는 것이 관리하기 편하기에 선언형 작업을 추천합니다.
선언형 yaml spec은 다음의 형태와 같습니다
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
apiVersion : 이 객체를 생성하는데 사용된 kubernetes api 버전
kind : 만들고자 하는 객체의 종류 ( Pod, Deployment, Service..)
metadata : 객체를 고유하게 식별할 수 있는 데이터를 나타냅니다 ( name, label, namespace 등이 있습니다)
spec : 객체에 대해 원하는 상태 (실제 리소스 상세 내용은 여기에 들어갑니다 )
다음에는 pod와 워크로드 api에 대해서 더 자세히 설명하겠습니다.
https://seongjin.me/kubernetes-core-concepts/
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#-strong-api-overview-strong-
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/