Study Memory Work
[K8S/CKA 자격증] Worloads & Scheduling - Deployment 본문
Deployment
- 컨테이너 기반으로 애플리케이션을 동작시킬 때 가장 많이 사용하는 API (배포)
- Pod를 직접 실행하지 않고 Deployment를 이용하여 컨테이너를 실행하는가?
- ReplicaSet 컨트롤러를 통해 replica 수 보장 및 scaling in/out 가능
(Pod직접실행 시, watch해주는 controller가 없어서 오류가 나면 재실행되지 않음.) - Rolling update 또는 Roll back 지원
- ReplicaSet 컨트롤러를 통해 replica 수 보장 및 scaling in/out 가능
- 동작과정 :
- deployment 명령을 내리면
- Deployment 가 생성, ReplicaSet controller 생성
- controller 가 pod 실행/보장
- deployment yaml 파일 구조
apiVersion: apps/v1
kind: Deployment
metadata:
name: webserver # deploy Name
spec:
replicas: 2 # pod template count
selector: # 여러 pod를 구분하는 구분자. pod 갯수를 보장해주기 위해 필요
matchLabels: # Pod 묶음
app_env_stage: dev
template: # pod template
metadata:
labels: # selector 의 label 에 맞춰야 함.
app_env_stage: dev
spec:
containers:
- image: nginx:1.14
name: webserver
ports:
- containerPort: 80
- replica 수 보장
- 위 replicaset이 관리하는 pod를 delete 하면 바로 새로운 pod가 생성되어 pod의 갯수를 보장해준다.
- 어플리케이션 scaling in/out
- Deployment는 ReplicaSet 컨트롤러를 이용해 Pod scaling을 지원
- Scale-out: 애플리케이션 Pod수를 확장하여 처리능력을 향상
- Scale-in: 애플리케이션 Pod수를 줄여서 리소스 낭비 최소화
# pod 갯수 업데이트 하기
$ kubectl scale deployment <deploy_name> --replicas=N
- Rolling Update
- 동작 중인 애플리케이션의 서비스 중단 없이 점진적으로 Pod 업데이트
$ kubectl set image deployment <deploy_name> <container_name>=<new_version_image> --record
# --record -> history 기록을 위한 옵션
# 변경여부 확인
$ kubectl describe pod <pod_name>
- Rollingback
- 동작중인 애플리케이션 서비스 중단 없이 이전 버전으로 되돌리기
# rolling update 시, '--record' 옵션으로 남겨놓은 history 확인하기.
# history가 있어야 이전 버전으로 돌가가는 rollingback이 가능하다.
$ kubectl rollout history deployment <deploy_name>
# 이전 버전으로 rollingback
$ kubectl rollout undo deployment <deploy_name>
# 원하는 revision 번호로 rolingback
$ kubectl rollout undo deployment <deploy_name> --to-revision=NUMBER
[문제6] Deployment & Scaling
작업 클러스터 : k8s
a. webserver 라는 이름으로 deployment를 생성하시오.
- Name: webserver
- 2 replicas
- label: app_env_stage=dev
- container name: webserver
- container image: nginx:1.14
b. 다음, webserver Deployment의 pod 수를 3개로 확장하시오.
# deployment 생성을 위한 yaml파일 생성
$ kubectl create deployment webserver --image=nginx:1.14 --replicas=2 --dry-run:client -o yaml > dev.yaml
$ vi dep.yaml
###
apiVersion: apps/v1
kind: Deployment
metadata:
name: webserver
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app_env_stage: dev
template:
metadata:
labels:
app_env_stage: dev
spec:
containers:
- name: webserver
image: nginx:1.14
###
# 2. pod 생성
$ kubectl apply -f dep.yaml
$ kubectl get deployments # deployment 확인
$ kubectl get replicasets # replicaset 확인
$ kubectl get pod --show-label ## pod의 레이블 정보까지 보여줌
# 3. pod 수 3개로 확장
$ kubectl scale deployment webserver --replicas=3
[문제7] Rolling update & Roll back
작업 클러스터 : k8s
Deployment를 이용해 nginx 파드를 3개 배포한 다음 컨테이너 이미지 버전을 rolling update하고 update record를 기록합니다.
마지막으로 컨테이너 이미지를 previous version으로 roll back 합니다.
- name: eshop-payment
- Image : nginx
- Image version: 1.16
- update image version: 1.17
- label: app=payment, environment=production
# 1. 클러스터 확인
$ kubectl config current-context
# 2. Deploument 생성하기
$ kubectl create deployment eshop-payment --image=nginx:1.16 --replicas=3 --dry-run:client -o yaml > dep.yaml
$ vi dep.yaml
###
apiVersion: apps/v1
kind: Deployment
metadata:
name: eshop-payment
spec:
replicas: 3
selector:
matchLabels:
app: payment
environment: production
template:
metadata:
labels:
app: payment
environment: production
spec:
containers:
- name: nginx
image: nginx:1.16
###
$ kubectl apply -f dep.yaml --record
# 3. rolling update
$ kubectl set image deployment eshop-payment nginx=nginx:1.17 --record
$ kubectl rollout history deployment eshop-payment
# rollingback
$ kubectl rollout undo deployment eshop-payment
$ kubectl
'Infra > Kubernetes' 카테고리의 다른 글
[K8S/CKA 자격증] Worloads & Scheduling - node 정보보기 (0) | 2023.01.22 |
---|---|
[K8S/CKA 자격증] Worloads & Scheduling - node 관리 (0) | 2023.01.22 |
[K8S/CKA 자격증] Worloads & Scheduling - Pod (3) | 2023.01.20 |
[K8S/CKA 자격증] API 인증 / rbac 인증 (문제O) (0) | 2023.01.13 |
[K8S] The connection to the server localhost:8080 was refused - did you specify the right host or port? 해결방법 (0) | 2023.01.13 |