Recent Comments
Link
Recent Posts
Today
Total
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
관리 메뉴

Study Memory Work

[K8S/CKA 자격증] Worloads & Scheduling - Deployment 본문

Infra/Kubernetes

[K8S/CKA 자격증] Worloads & Scheduling - Deployment

Hera Choi 2023. 1. 22. 15:43

Deployment

  • 컨테이너 기반으로 애플리케이션을 동작시킬 때 가장 많이 사용하는 API (배포)
  • Pod를 직접 실행하지 않고 Deployment를 이용하여 컨테이너를 실행하는가? 
    • ReplicaSet 컨트롤러를 통해 replica 수 보장scaling in/out 가능 
      (Pod직접실행 시, watch해주는 controller가 없어서 오류가 나면 재실행되지 않음.)
    • Rolling update 또는 Roll back 지원
  • 동작과정 :
    • 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

1. replicaSet controller name , 2. pod name
replicaset List

  • replica 수 보장

replicaset은 Label(selector)을 기준으로 pod를 관리(갯수를 보장)한다. -> 설정파일에서 지정해줘야 함.

 

webui label을 기준으로 2개의 pod를 관리하며 현재 2개의 pod가 떠있고 준비중임.

 - 위 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

 

$ kubectl scale deployment deploy-nginx --replicas=3

  • 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 Deploymentpod 수를 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