Deployment 실습
1. Recreate 실습
Deployment - Recreate
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-1
spec:
selector:
matchLabels:
type: app
replicas: 2
strategy:
type: Recreate
revisionHistoryLimit: 1
template:
metadata:
labels:
type: app
spec:
containers:
- name: container
image: kubetm/app:v1
terminationGracePeriodSeconds: 10
- kind는 Deployment
- selector에 type:app
- Pod는 2개
- Recreate 방식으로 배포
- RevisionHistoryLimit: 1이여서 여러번 배포를 해도 하나의 ReplicaSet만 남음
- template으로 label에 type:app이 있음
- 이미지는 v1으로 만들어짐
Service
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
selector:
type: app
ports:
- port: 8080
protocol: TCP
targetPort: 8080
실습 과정
- Deployment - Recreate 생성
- 상세에서 ReplicaSet 등 Labels, Pods 개수, images 정보 확인
- Labels에 보면 pod-template-hash가 있음 --> Deployment는 여러 ReplicaSet을 만들고, 각 ReplicaSet은 자신의 Pod를 구별하기 위해서 추가적인 라벨과 selector를 붙임
- 생성된 파드에서도 template-hash 라벨을 확인
- Service 생성 후 Cluster IP 복사 후 마스터 노드에서 다음 커맨드 입력
while true; do curl 10.105.226.102:8080/version; sleep 1; done
- Deployment 편집으로 image를 v1에서 v2로 변경하고 마스터 노드 쉘 보기
- ReplicaSet 확인
기존 파드 v1은 2->0이 되고, v2는 2개가 생성됨 - Deployment에서 image v3로 변경하고 ReplicaSet 확인
ReplicaSet v1은 삭제되고 v2, v3만 남음
revisionHistoryLimit: 1이기 때문 - Deployment에서 image를 v3->v2로 변경하여 롤백 시행해도 되지만 명령어로 롤백 시행
deployment-1: 롤백할 대상kubectl rollout undo deployment deployment-1 --to-revision=2
--to-revision=2: 2번째로 배포한 대상으로 롤백하겠다
revison 확인 방법 - 대시보드, 명령어kubectl rollout history deployment deployment-1
- 롤백 완료
2. RollingUpdate 실습
Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-2
spec:
selector:
matchLabels:
type: app2
replicas: 2
strategy:
type: RollingUpdate
minReadySeconds: 10
template:
metadata:
labels:
type: app2
spec:
containers:
- name: container
image: kubetm/app:v1
terminationGracePeriodSeconds: 0
- minReadySeconds: 롤링업데이트를 지켜보기 위해 텀을 주는 명령어
Service
apiVersion: v1
kind: Service
metadata:
name: svc-2
spec:
selector:
type: app2
ports:
- port: 8080
protocol: TCP
targetPort: 8080
실습 과정
- Deployment 생성
- 서비스 생성
- 생성한 서비스의 cluster IP를 복사하여 마스터 노드에 다음 명령어 실행
while true; do curl 10.99.92.141:8080/version; sleep 1; done
- Deployment 편집으로 v2로 변경
Downtime 없이 v1, v2 번갈아가면서 접속되다가 v2로 변경됨
3. Blue/Green 실습
ReplicaSet
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replica1
spec:
replicas: 2
selector:
matchLabels:
ver: v1
template:
metadata:
name: pod1
labels:
ver: v1
spec:
containers:
- name: container
image: kubetm/app:v1
terminationGracePeriodSeconds: 0
- ReplicaSet으로 Selector와 Label은 ver:v1로 설정
Service
apiVersion: v1
kind: Service
metadata:
name: svc-3
spec:
selector:
ver: v1
ports:
- port: 8080
protocol: TCP
targetPort: 8080
- selector는 ver: v1으로 설정
ReplicaSet2
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replica2
spec:
replicas: 2
selector:
matchLabels:
ver: v2
template:
metadata:
name: pod1
labels:
ver: v2
spec:
containers:
- name: container
image: kubetm/app:v2
terminationGracePeriodSeconds: 0
실습 과정
- ReplicaSet 생성
- 서비스 생성
- 서비스의 cluster ip를 복사하여 다음 명령어 실행
while true; do curl 10.104.8.101:8080/version; sleep 1; done
- ReplicaSet2 생성
- 서비스의 selector에서 ver: v1 --> ver:v2로 변경
다운타임없이 바로 v2를 호출함 - 기존 ReplicaSet은 삭제를 해도 되고, replicas를 0으로 만들면 됨
출처
인프런 - 대세는 쿠버네티스
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 17. DaemonSet, Job, CronJob - 실습 (0) | 2021.02.14 |
---|---|
[k8s] 16. DaemonSet, Job, CronJob (0) | 2021.02.14 |
[k8s] 14. Deployment - Recreate, RollingUpdate (0) | 2021.02.13 |
[k8s] 13. ReplicaSet, Selector - 실습 (0) | 2021.02.13 |
[k8s] 12. Replication Controller, ReplicaSet (0) | 2021.02.12 |