티스토리 뷰

 

● 어플리케이션 배포시 주로 디플로이먼트 형태로 배포 및 관리

>> deployment 가 replicaset 을 만들고 관리를 한다

# deployment object 가 relicaset object 를 대신한다 [ rolling update / rollback 지원 ]

 

>> 자동으로 관리가 되기 때문에 사용자가 직접 관리하면 안된다

 

 

 

 

https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/

 

디플로이먼트

디플로이먼트(Deployment) 는 파드와 레플리카셋(ReplicaSet)에 대한 선언적 업데이트를 제공한다. 디플로이먼트에서 의도하는 상태 를 설명하고, 디플로이먼트 컨트롤러(Controller)는 현재 상태에서 의

kubernetes.io

 

 

 

 

○ 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.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
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
글 보관함