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' 카테고리의 다른 글
[Spark-Study] Day-2 예제 돌려보기 (3) | 2021.06.24 |
---|---|
[Spark-Study] Day-1 스파크 셋팅 (0) | 2021.06.14 |
2020.07.16 스터디 (0) | 2020.07.16 |
JBUG- Collection (0) | 2014.07.30 |
JBUG - JDK8 Study (2) | 2014.07.23 |