본문 바로가기

Study/Study group

k8s 스터디 흔적

반응형

kubectl 롤링 업데이트 해보기!

img만들고

docker build -t idock.xxx.io/teri_epi/kubia:v1

docker build -t idock.xxx.io/teri_epi/kubia:v2

 

docker hub에 push

docker push idock.xxx.io/teri_epi/kubia:v1

docker push idock.xxx.io/teri_epi/kubia:v2

 

k : kubectl  / rolling update!

k rolling-update kubia-v1 kubia-v2 --image=idock.daumkakao.io/teri_epi/kubia:v2

 

kubectl 롤링 업데이트는 더이상 사용되지 않는다. Why? -> 더 나은 업데이트 방법이 존재!

kubectl를 통한 업데이트는 네트워크가 원활하지 않을 시 업데이트 프로세스가 모두 중단!

-> 디플로이먼트라는 새로운 리소스를 도입!!

 

디플로이먼트 : 레플리케이션컨트롤러 or 레플리카셋을 통해 업데이트를 수행.

애플리케이션을 배포하고 이를 선언적으로 업데이트하는데 사용하는 상위 수준의 리소스.

디플로이먼트 생성 : 레플리케이션컨트롤러 작성과 큰차이가 없다.

라벨셀렉터, 원하는 복제본 수, 포트 템플릿으로 구성된다.

 

소스 : github.com/luksa/kubernetes-in-action/blob/master/Chapter09/kubia-deployment-v1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubia
spec:
  replicas: 3
  template:
    metadata:
      name: kubia
      labels:
        app: kubia
    spec:
      containers:
      - image: luksa/kubia:v1
        name: nodejs
  selector:
    matchLabels:
      app: kubia

k create -f kubia-deployment-v1.yaml --record

k rollout status deployment kubia

 

k get po
NAME                     READY   STATUS    RESTARTS   AGE
kubia-556c55c694-5kjzc   1/1     Running   0          6d22h
kubia-556c55c694-mb5pk   1/1     Running   0          6d22h
kubia-556c55c694-z85lw   1/1     Running   0          6d22h

 

위에서 가운데 숫자의 의미는?

레플리카셋의 pod 템플릿의 해시 값!

디플로이먼트는 pod를 직접 관리 하지 않는다. 그 대신 레플리카셋을 생성하고 레플리카셋이 관리를 하도록 위임한다.

k get replicasets
NAME               DESIRED   CURRENT   READY   AGE
kubia-556c55c694   3         3         3       6d22h

레플리카셋의 이름도 해당 pod 템플릿의 해시 값을 포함한다.

 

디플로이먼트 전략

- 디폴트 전략 : RollingUpdatge라는 롤링 업데이트 전략을 수행.

                       오래된 pod를 하나씩 제거하는 동시에 새로운 pod를 추가해 전체 업데이트 프로세스에 걸쳐 애플리케이션을

                       사용할 수 있도록 함.

- Recreate 전략 : 레플리케이션컨트롤러의 pod 템플릿을 수정 한 후 모든 pod를 삭제하는것과 마찬가지로

                            한번에 모든 기존 pod를 삭제한 새로운 pod를 생성한다.

                            새버전을 시작하기전에 이전 버전을 완전히 중지해야하는 경우 이 전략을 사용한다.

 

k patch deployment kubia -p '{"spec":{"minReadySeconds": 10}}'

업데이트 프로세스를 조금 늦출 필요가 있으며 위의 명령어를 통해 실제로 롤링 방식으로 수행되는지 확인 할 수 있다.(10초로 설정)

 

k set image deployment kubia nodejs=idock.xxx.io/teri_epi/kubia:v2

deployment.extensions/kubia image updated

위의 명령을 수행하면  kubia 디플로이먼트의 pod 템플릿이 업데이트돼 nodejs컨테이너에서 사용하고 있는 이미지가 v1에서 idock.xxx.io/teri_epi/kubia:v2로 변경 된다.

 

디플로이먼트와 그밖의 리소스를 수정하는 방법

1. k edit : 기본 편집기에서 객체의 매니페스트 파일을 연다. ex) k edit deployement kubia

2. k patch : 객체의 개별 속성을 수정한다. ex) k patch deployment kubia -p '{"spec":{"minReadySeconds": 10}}'

3. k apply : 전체 YAML 또는 JSON 파일의 속성 값을 적용해 객체를 수정한다. YAML/JSON객체가 존재 하지 않으면 생성.

                   리소스의 전체 정의가 요구된다.(ex. k apply -f kubia-depoyment-v2.yaml)

4. k replace : 객체를 YAML/JSON 파일의 새 객체로 바꾼다. 적용명령과 달리 명령은 객체가 존재 해야한다. 그렇지 않으면 오류 출력.

                    ex) k replace -f kubia-deployment-v2.yaml

5. k set image :  pod, 레플리케이션컨트롤러의 템플릿, 디플로이먼트, 데몬셋, 잡 또는 레플리카셋에 정의 된 컨테이너 이미지를 변경.

                    ex) k set image deployment kubia nodejs=idock.xxx.io/teri_epi/kubia:v2

 

배포

k set image deployment kubia nodejs=idock.xxx.io/teri_epi/kubia:v3

deployment.extensions/kubia image updated

 

k rollout status deployment kubia

Waiting for deployment "kubia" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "kubia" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "kubia" rollout to finish: 1 old replicas are pending termination...
deployment "kubia" successfully rolled out

 

롤백

k rollout undo deployment kubia

deployment.extensions/kubia rolled back

 

히스토리

k rollout history deployment kubia

단) --record를 해주지 않으면 나오지 않는다.

특정 디플로이먼트 리비전으로 롤백하기

k rollout undo deployment kubia --to-revision=1

error: unable to find specified revision 1 in history

여기에서 중요한 부분은 --record 옵션을 사용하지 않으면 히스토리에 나오지 않으며 리비전 번호 또한 없다.

즉, 위의 오류처럼 롤백이 불가능하다.

 

롤아웃 프로세스 일시 중지

k rollout pause deployment kubia

deployment.extensions/kubia paused

 

롤아웃 프로세스 재개

k rollout resume deployment kubia

deployment.extensions/kubia resumed

 

레디네스 프로브 적용

k apply -f  kubia-deployment-v3-with-readinesscheck.yaml

반응형

'Study > Study group' 카테고리의 다른 글

k8s 스터디 흔적  (0) 2020.10.22
2020.07.16 스터디  (0) 2020.07.16
JBUG- Collection  (0) 2014.07.30
JBUG - JDK8 Study  (2) 2014.07.23
JBUG - JDK8 Study(정규표현식)- Differences Among Greedy, Reluctant, and Possessive Quantifiers  (0) 2014.07.17
JBUG - JDK8 Study(Concurrency_01)  (2) 2014.07.03