들어가며
- kubernetes에서 많이 사용하는 deployment에 대해 알아보겠습니다.
Deployment 란?
- replicaset을 생성하는 것을 정의 할 수 있고 배포 작업을 좀 더 세분화하여 조작할 수 있는 기능입니다.
* replicaset : pod의 수를 보장해주는 Object입니다.
Deployment의 구조
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
- metadata.name 필드에 따라 deployment가 생성됩니다.
- metadata.labels 필드를 사용해 app:nginx label을 붙입니다.
- spec.replicaset 필드에 따라 deployment는 replica pod를 생성합니다.
- spec.selector 필드는 deploymnet가 관리할 pod를 찾는 방법을 정의합니다.
- template.sepc 필드는 nginx:1.14.2 버전 이미지를 실행하는 nginx container 1개를 실행하는 것을 나타냅니다.Deployment 조회
kubectl get deployment,replicaset NAME READY UP-TO-DATE AVAILABLE AGE deployment.extensions/devai 1/1 1 1 68d deployment.extensions/devai-monitor 1/1 1 1 68d deployment.extensions/devai-service-mariadb 1/1 1 1 68d deployment.extensions/devai-svc 1/1 1 1 68d deployment.extensions/jupyterhub-1-2-7-21 1/1 1 1 68d deployment.extensions/jupyterhub-sscd-v4-0-0-7-22 1/1 1 1 40d deployment.extensions/nginx-ingress-controller 1/1 1 1 103d deployment.extensions/nginx-ingress-default-backend 1/1 1 1 103d deployment.extensions/tiller-deploy 1/1 1 1 103d NAME DESIRED CURRENT READY AGE replicaset.extensions/devai-7c8449f664 1 1 1 68d replicaset.extensions/devai-monitor-59c45c5c9b 1 1 1 68d replicaset.extensions/devai-service-mariadb-6b8cc7855d 1 1 1 68d replicaset.extensions/devai-svc-68c467bcb9 1 1 1 68d replicaset.extensions/jupyterhub-1-2-7-21-558f96fbd9 1 1 1 68d replicaset.extensions/jupyterhub-sscd-v4-0-0-7-22-5b6657c44c 1 1 1 40d replicaset.extensions/nginx-ingress-controller-594c98858 1 1 1 103d replicaset.extensions/nginx-ingress-default-backend-76f7b59c87 1 1 1 103d replicaset.extensions/tiller-deploy-7848f5cf7c
Deployment 업데이트
- 업데이트 할 deployment의 yaml을 확인하여 deployment-name과 container-name, image-version 확인합니다.
kubectl edit deploy nginx-ingress-controller
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
- 변경할 이미지의 버전으로 변경합니다.
kubectl set image deployment/nginx-ingress-controller nginx-ingress-controller=nginx:0.30.0
- 변경 후 정상 운영 되는지 확인해 봅니다.
kubectl get pod NAME READY STATUS RESTARTS AGE devai-7c8449f664-fkk4g 1/1 Running 2 68d devai-monitor-59c45c5c9b-t98dm 1/1 Running 2 68d devai-service-mariadb-6b8cc7855d-zslv5 2/2 Running 10 68d devai-svc-68c467bcb9-tqjvp 1/1 Running 2 68d gitlab-server-gitlab-k9phj 1/1 Running 2 103d gitlab-server-postgresql-jdjxh 1/1 Running 6 103d gitlab-server-redis-zpndp 1/1 Running 5 103d jupyterhub-1-2-7-21-558f96fbd9-b6fxf 2/2 Running 4 68d jupyterhub-sscd-v4-0-0-7-22-5b6657c44c-ltkjl 2/2 Running 4 41d nginx-ingress-controller-594c98858-5x8l9 1/1 Running 0 10s nginx-ingress-default-backend-76f7b59c87-xtm8s 1/1 Running 2 103d tiller-deploy-7848f5cf7c-9cmkf 1/1 Running 2 103d
- 업데이트 할 deployment의 yaml을 확인하여 deployment-name과 container-name, image-version 확인합니다.
- Deployment rollback 및 rollback 기록 조회
- deployment를 이용하여 이전 작업으로 되돌아가거나, 작업했던 기록을 살펴볼 수 있습니다.
- rollout 기록 조회
kubectl rollout history deployment nginx-ingress-controller deployment.extensions/nginx-ingress-controller REVISION CHANGE-CAUSE 2 <none> 3 <none>
- CHANGE-CAUSE : 변경 사항에 대한 설명으로 별도의 입력이 없으면 'none'으로 표시됩니다.
- REVISION : 가장 최근에 한 작업이 3번이라는 것을 확인 할 수 있습니다. rollback
- 이전에 했던 작업 버전으로 되돌리는 작업kubectl rollout undo deployment [deployment name] --to-revision=[number]
rollout.CHANGE-CAUSE 기록 남기기
kubectl edit deployment [deployment name]
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kubernetes.io/change-cause: version change 0.30.0
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
- 해당 라인을 추가하여 준 뒤 yaml 파일을 저장합니다.
기록 조회
kubectl rollout history deployment nginx-ingress-controller deployment.extensions/nginx-ingress-controller REVISION CHANGE-CAUSE 2 <none> 3 version change 0.30.0
마무리
- deployment로 생성한 pod를 scale 명령어로 수를 늘릴 수 있지만 deployment의 spec을 사용하여 생성 시점부터 원하는 개수로 deployment를 생성할 수 있습니다.
- deployment를 사용하여 기록 관리를 할 수 있습니다.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.