티스토리 뷰
● 어플리케이션 배포시 주로 디플로이먼트 형태로 배포 및 관리
>> deployment 가 replicaset 을 만들고 관리를 한다
# deployment object 가 relicaset object 를 대신한다 [ rolling update / rollback 지원 ]
>> 자동으로 관리가 되기 때문에 사용자가 직접 관리하면 안된다
https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/
○ deployment.yml 생성
# template 의 label 과 key: value 가 같아야한다
[vagrant@ms work]$ kubectl api-resources |grep -w Deployment
deployments deploy apps/v1 true Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 5
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.14
name: nginx
ports:
- containerPort: 80
○ name: nginx 는 Deployment 의 이름이다
○ labels 의 key 와 value 가 모두 동일해야 한다
[vagrant@ms work]$ kubectl get pods
# 각 work node 가 모두 nginx 를 다운로드 받아서 올라간다
# 자세하게 출력 가능하다
[vagrant@ms work]$ kubectl describe pods nginx-56496f7bdd-4t7hl
kubectl get pods -o wide
[vagrant@ms work]$ kubectl get replicasets.apps
NAME DESIRED CURRENT READY AGE
nginx-56496f7bdd 5 5 5 26m
>> 정상작동
Rolling update
● deployment.yml 1.14 >> 1.15 버전으로 수정
# replicas 는 10으로 증가
● 업데이트 진행
[vagrant@ms work]$ kubectl apply -f deployment.yml
deployment.apps/nginx configured
○ 기본값으로 지정된 사항
>> 75 % 이상이 접속 되어야 한다 / 25 % 가 추가로 생성되어야 한다
[ 75 % 까지 동작 보장 / 최대 125 % 까지 증가 ]
■ 동시 업데이트를 하지 않는다
>> 13 개 pods 가 존재한다 / Running 8개
>> 15개 pods / Running 8개
>> 업데이트가 모두 끝나고 10개로 고정되었다
○ describe 로 StrategyType 와 RollingUpdateStrategy 확인 가능하다
[vagrant@ms work]$ kubectl describe deployments.apps nginx
Name: nginx
Namespace: myns
CreationTimestamp: Fri, 08 Mar 2024 11:13:29 +0900
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 2
Selector: app=nginx
Replicas: 10 desired | 10 updated | 10 total | 10 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
● rolling update 도중의 pod 개수를 수정 가능하다
>> minReadySeconds 10초간 기다리고 업데이트
>> maxUnavilabe 롤링업데이트 동안 동작하지 않아도 되는 파드 개수
>> maxSurge 롤링업데이트 동안 추가로 실행되어야 될 파드의 개수
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 10
selector:
matchLabels:
app: nginx
minReadySeconds: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 5
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.17
name: nginx
ports:
- containerPort: 80
>> 최소 Running 은 9개 보장
>> 15개 파드가 존재
● 문제가 생겼을 때, 롤백도 가능하다 [ 사용자가 업데이트 한 기록 ]
1. 1.13 버전
2. 1.15 버전
3. 1.17 버전
[vagrant@ms work]$ kubectl rollout history deployment nginx
deployment.apps/nginx
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none>
○ 일부러 오류를 내서 버전 확인
# pod ip 확인
kubectl get pods -o wide
● 롤백 진행
[vagrant@ms work]$ kubectl rollout undo deployment nginx
deployment.apps/nginx rolled back
○ 1.15 버전으로 롤백되었다
● 롤백 히스토리 확인
1. 1.14 버전
3. 1.17 버전
4. 1.15 버전
# 2번이었던 1.15버전이 4번으로 옮겨졌다
[vagrant@ms work]$ kubectl rollout history deployment nginx
deployment.apps/nginx
REVISION CHANGE-CAUSE
1 <none>
3 <none>
4 <none>
● 롤링 업데이트를 할 때마다 레블리카셋이 하나씩 늘어난다
>> replicasets.apps 에서 rollout history 로 볼 수 있다
kubectl set image [ 리소스 타입 ] [ 리소스 이름 ] [ 컨테이너 ]
# - - record=true 라고 적으면 적용되는데 , 나중에 업데이트되면 사용 불가능
[vagrant@ms work]$ kubectl set image deployment nginx nginx=nginx:1.18 --record true
Flag --record has been deprecated, --record will be removed in the future
error: all resources must be specified before image changes: true
[vagrant@ms work]$ kubectl set image deployment nginx nginx=nginx:1.18
deployment.apps/nginx image updated
[vagrant@ms work]$ kubectl rollout history deployment nginx
deployment.apps/nginx
REVISION CHANGE-CAUSE
1 <none>
3 <none>
4 <none>
5 <none>
>> 업데이트할 때 마다 늘어났다
[vagrant@ms work]$ kubectl get replicasets.apps
NAME DESIRED CURRENT READY AGE
nginx-56496f7bdd 0 0 0 67m
nginx-584f64656 10 10 10 64s
nginx-6b8f6d655f 0 0 0 14m
nginx-847cd7fd69 0 0 0 36m
● 더 자세한 정보를 알기 위해서는 describe 를 사용한다
○ 현재 사용하는 nginx >> 1.18 버전 / revision 5번
[vagrant@ms work]$ kubectl describe replicasets.apps nginx-584f64656
○ 다른 레플리카셋에 기록된 nignx >> 1.15 버전 / revision 4번
[vagrant@ms work]$ kubectl describe replicasets.apps nginx-847cd7fd69
● revision 직접 지정하여 롤백이 가능
[vagrant@ms work]$ kubectl rollout undo deployment nginx --to-revision 1
deployment.apps/nginx rolled back
>> revision 은 숫자는 계속 증가
[vagrant@ms work]$ kubectl rollout history deployment nginx
deployment.apps/nginx
REVISION CHANGE-CAUSE
3 <none>
4 <none>
5 <none>
6 <none>
○ 1.14로 롤백하였다
[vagrant@ms work]$ kubectl get replicasets.apps
NAME DESIRED CURRENT READY AGE
nginx-56496f7bdd 10 10 10 89m
nginx-584f64656 0 0 0 22m
nginx-6b8f6d655f 0 0 0 36m
nginx-847cd7fd69 0 0 0 58m
[vagrant@ms work]$ kubectl rollout history deployment nginx
>> 롤백 롤업데이트시 마다, 꼭 pod ip 확인 ( 계속 바뀐다;; )
● deployment 삭제 ( 상위 오브젝트 삭제 )
[vagrant@ms work]$ kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 10/10 10 10 92m
[vagrant@ms work]$ kubectl delete deployments.apps nginx
deployment.apps "nginx" deleted
[vagrant@ms work]$ kubectl get pods
No resources found in myns namespace.
'Kubernetes [ 쿠버네티스 ]' 카테고리의 다른 글
Kubernetes 시작 전 점검 사항 (0) | 2024.03.11 |
---|---|
Kubernetes LoadBalacer Type (0) | 2024.03.08 |
Kubernetes 상위 오브젝트와 리소스 (0) | 2024.03.08 |
Kubernetes - replica 설정 변경 3가지 방법 (0) | 2024.03.08 |
Kubernetes ReplicaSet (0) | 2024.03.07 |