Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- k8s
- keda
- 클라우드 국비지원교육
- kubernetes
- docker
- 클라우드 국비지원교육 후기
- storageclass
- karpenter
- aews vault
- 합격 후기
- aews ci/cd
- 외부 모듈
- aews
- 단기 합격
- Python
- AWS
- prometheus
- Terraform
- outposts local cluster
- Jenkins
- VPA
- aws outposts
- 도커
- eks endpoint access
- EKS
- 클라우드 엔지니어
- observability
- grafana
- POD
- 국비지원교육
Archives
- Today
- Total
모험가
Deployment - Recreate, RollingUpdate (기초) 본문
이 글은 인프런의 대세는 쿠버네티스 강의를 보며 정리한 글입니다.
대표적으로 4가지가 있음
1. ReCreate (pod들을 삭제하고 새 버전의 pod들을 배포 <downtime>이 발생)
2. Rolling Update (새 버전의 pod를 생성하고 이전 버전의 pod를 죽이고를 순차적으로 시킴 <많은 리소스가 필요>
3. Blue/Green (새로운 버전의 controller을 만들고 service의 라벨을 바꾸어 새로운 버전의 pod들에 연결 / 문제시 롤백이 쉬움 <순간적으로 많은 리소스가 필요>
4. Canary (똑같이 기존의 파드들에 라벨을 (type) 달고 서비스에 연결 -> 새로운 버전의 controller을 만들고 pod2에도 라벨로 연결 (type) 이후 기존 Controller의 replicaset을 0으로 맞춰줘서 다 없앰
컨트롤러들을 연결하는 Ingrees controller이 필요!
Recreate에는 strategy에 type에 revisionHistoryLimit이 존재함
replicas가 0인 replicaset을 몇개 남길지 정하는 것
이것은 디폴트 값이 10임
rolling update에는 terminationGracePeriodSeconds이 존재함원래 새로운 버전의 replicaset이 만들어져서 pod가 생성되고 지우고 하는 과정이 순식간에 일어나는데이것의 시간을 제어하기 위한 것
실습
1. ReCreate

1-1) Deployment 생성
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
1-2) Service 생성
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
selector:
type: app
ports:
- port: 8080
protocol: TCP
targetPort: 8080
Command (확인용)
while true; do curl 10.99.5.3:8080/version; sleep 1; done
Kubectl (롤백)
kubectl rollout undo deployment deployment-1 --to-revision=2
kubectl rollout history deployment deployment-1
2. RollingUpdate

2-1) 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
2-2) Service
apiVersion: v1
kind: Service
metadata:
name: svc-2
spec:
selector:
type: app2
ports:
- port: 8080
protocol: TCP
targetPort: 8080
Command 생성
while true; do curl 10.99.5.3:8080/version; sleep 1; done
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
Service 생성
apiVersion: v1
kind: Service
metadata:
name: svc-3
spec:
selector:
ver: v1
ports:
- port: 8080
protocol: TCP
targetPort: 8080
모든 과정에서 업데이트는 edit으로 버전 수정하면 됨.
실습은 꼭 해보기..
'쿠버네티스 > 기초' 카테고리의 다른 글
| DaemonSet, Job, CronJob (기초) (0) | 2022.08.08 |
|---|---|
| 컨트롤러 (기초) ReplicaSet, Controller (0) | 2022.08.05 |
| Namespace, ResourceQuota, LimitRange (기초) (0) | 2022.08.05 |
| ConfigMap, Secret (기초) (0) | 2022.08.05 |
| Volume (기초) (0) | 2022.07.28 |