많은 회사들이 이젠 k8s 로 서버를 관리하고 있을 것이라 생각한다.
나도 이제 1년정도 개발 후, k8s 환경에 서버를 배포하고있는데 모르는게 정말 많다.
배포를 관리하는 개발자 (혹은 운영자) 라면 k8s 에 배포한 파드(pod)를 Lens 프로그램으로 이것저것 살펴보게 된다.
이때 나눠진 메뉴들은 내 직감(?) 은 알고있는데 난 그게 참 설명하기가 어렵다(이걸 모른다고 하는건가??;;)
하나하나 차근차근 정리하다보면 내 것이 될 것이라 생각한다.
오늘은 쿠버네티스 컨트롤러에 대해 정리하려고 한다.
컨트롤러란?
k8s 클러스터 내부에서 파드를 설정하고 배포하는 방법을 정의함
컨트롤러는 런타임 요구사항에 따라서 파드를 그룹화하고 파드의 복제, 파드의 시작순서를 정의할 수 있음
한 마디로 파드 배포 설정 관리자
Replicaset
복사되어야하는 파드의 세트를 정의함
그룹에서 각 파드에 대한 정확한 구성가능
권한이 있어야하는 리소스를 정의할 수 있음
애플리케이션의 스케줄링, 쉬운 확장처리(scaling), 롤링업데이트 또는 멀티트랙업데이트를 수행할 수 있음
Deployment
파드와 Replicaset 을 관리할 수 있음
새로운 버전의 ReplicaSet을 만들고 파드를 이전 버전에서 새로운 버전으로 마이그레이션 함
사용하지 않은 오래된 ReplicaSet 을 관리함
StatefulSet
시작순서와 StatefulSet 의 생명주기동안 유일한 식별자를 보장하는 파드를 생성할 수 있음 --> 스토리지, 네트워킹과 같은 지속적인 구성요소들이 보장되므로 k8s 에서 안정적인 어플리케이션 실행이 가능함
항상 동일한 순서로 파드를 생성할 수 있으므로 안정적인 애플리케이션 실행이 가능
라고 말하지만... 실제로 보거나 사용하지 않으면 이해하기 힘들다.
그래서 실제로 간단한 버전을 만들어보고 감을 익혀보자.
Deployment 생성하기
Deployment 를 생성을 제목으로 잡은 이유는 ReplicaSet manifest 를 지정하지 않아도 Deployment 를 통해 ReplicaSet 을 생성하고 관리할 수 있다.
아래의 예제로 Deployment, ReplicaSet, Pod 를 생성하고 조회해보자
File name: nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
출처: https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/
필요한 부분만 간단하게 살펴보자.
- spec.replicas 레플리카 파드(ReplicaSet 의 파드) 개수를 지정함
- spec.template.spec.containers Pod 에 실행될 컨테이너를 지정함. 여기에서는 nginx 라는 1개의 컨테이너가 실행됨 (여러개도 가능)
다음 명령어로 Deployment 를 생성한다.
kubectl apply -f nginx-deployment.yaml
생성이 제대로 되었으면 내가 만든 Pod, ReplicaSet, Deployment 를 조회해보자.
Deployment 조회
다음 명령어로 Deployment 리스트를 조회한다.
kubectl get deploy
Deployment 가 생성되면 아래와 비슷한 결과를 확인할 수 있다.
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 18s
- NAME Deployment 의 metadata.name 입력 값
ReplicaSet 조회
다음 명령어로 ReplicaSet 리스트를 조회한다
kubectl get rs
모두가 눈치챘겠지만 rs 는 ReplicaSet 의 줄임말이다.
Deployment 로 생성된 ReplicaSet 은 아래와 비슷하게 출력된다.
NAME DESIRED CURRENT READY AGE
nginx-deployment-75675f5897 3 3 3 18s
- NAME {DeploymentName}-{RandomString} RandomString 은 pod-template-hash 의 seed 값이다.
- CURRENT 현재 실행 중인 레플리카 수
- READY 사용자가 사용할 수 있는 레플리카 수
Pod 조회
다음 명령어로 Pod 리스트를 조회한다
Kubectl get pods
Deployment 로 생성된 Pod 가 아래와 비슷하게 출력된다.
NAME READY STATUS RESTARTS AGE
nginx-deployment-75675f5897-7ci7o 1/1 Running 0 18s
nginx-deployment-75675f5897-kzszj 1/1 Running 0 18s
nginx-deployment-75675f5897-qqcnn 1/1 Running 0 18s
StatefulSet 은 설명하기 전에
k8s volume 설명이 더 필요해보여 다음편에...
참고자료
https://docs.oracle.com/en/operating-systems/olcne/orchestration/about.html#controllers
https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/
'IT' 카테고리의 다른 글
[CloudWatch] AWS 클라우드 와치 (0) | 2020.12.28 |
---|---|
[Go/Golang] 클로저(Closure) (0) | 2020.12.17 |
[Go/Golang] Go 언어는 무엇이고 왜 쓰고 언제쓸까? (0) | 2020.11.18 |
[Spring Boot] 스프링 클라우드 (Spring Cloud) (+ RabbitMQ 연결) (0) | 2020.10.28 |
[정보보안] CVE (Common Vulnerabilities & Exposures) (0) | 2020.10.13 |