나중에 보려고 아래 내용을 따라 하며 대략 정리한겁니다.
더 자세한 내용을 보시려면 아래 링크에서 확인하세요.
참조 https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/
nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3 # 3개의 레플리카 파드 생성
selector: # 디플로이먼트가 관리할 파드를 찾는 방법.
matchLabels: # label 의 app 이름이 nginx 인것을 찾아라.
app: nginx
template:
metadata:
labels:
app: nginx # labels필드를 사용해서 app: nginx 레이블을 붙힘
spec:
containers: # 컨테이너 하나 생성
- name: nginx # name 필드의 값 nginx
image: nginx:1.7.9 # 도커허브의 nginx:1.7.9 이미지 사용
ports:
- containerPort: 80
참고: 디플로이먼트에는 파드 템플릿 레이블과 적절한 셀렉터를 반드시 명시해야 한다(이 예시에서는 app: nginx). 레이블 또는 셀렉터는 다른 컨트롤러(다른 디플로이먼트와 스테이트풀 셋 포함)와 겹치지 않아야 한다. 쿠버네티스는 겹치는 것을 막지 않으며, 만약 다중 컨트롤러가 겹치는 셀렉터를 가지는 경우 해당 컨트롤러의 충돌 또는 예기치 않은 동작을 야기할 수 있다.
1. 디플로이먼트 생성
$ kubectl apply -f nginx-deployment.yaml
2. 생성 확인
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 0/3 0 0 1s
아직 생성 중이면 이렇게 나오므로 잠시 후 다시 명령어 실행하면
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 18s
3. 레플리카셋(rs)를 확인
$ kubectl get rs
4. 각 파드에 생성된 레이블 확인
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-deployment-75675f5897-7ci7o 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453
nginx-deployment-75675f5897-kzszj 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453
nginx-deployment-75675f5897-qqcnn 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453
디플로이먼트 업데이트
참고: 디플로이먼트의 파드 템플릿(즉, .spec.template)이 변경된 경우에만 디플로이먼트의 롤아웃이 트리거(trigger) 된다. 예를 들면 템플릿의 레이블이나 컨테이너 이미지가 업데이트된 경우이다. 디플로이먼트의 스케일링과 같은 다른 업데이트는 롤아웃을 트리거하지 말아야 한다.
- nginx:1.7.9 에서 nginx:1.9.1 로 nginx 파드를 업데이트 하려면
- set
$ kubectl --record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
# 간단하게 사용
$ kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 --record
위에서 yaml 에 metadata: name : nginx-deployment 으로 했기때문에
deployment.apps/nginx-deployment 로 찾고,
뒤에 어떤것을 뭐로 set 할지 나옴 set image [디플로이먼트 이름] [이미지명]
updated 메시지:
deployment.apps/nginx-deployment image updated
- deployment edit
$ kubectl edit deployment.v1.apps/nginx-deployment
메시지 : deployment.apps/nginx-deployment edited
- rollout 상태 확인
$ kubectl rollout status deployment.v1.apps/nginx-deployment
- deployment 세부 정보 조회
$ kubectl describe deployments
디플로이먼트 롤백
위의 업데이트에서 nginx 버전을 잘못 입력한 경우 롤백 하는 방법.
예제에서는 nginx 이름을 잘못 입력하여 디플로이먼트를 업데이트하고 있다.
$ kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true
deployment.apps/nginx-deployment image updated
오타가 나도 업데이트가 됐다고 나온다.
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-1564180365 3 3 3 25s
nginx-deployment-2035384211 0 0 0 36s
nginx-deployment-3066724191 1 1 0 6s
마지막의 레플리카.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-1564180365-70iae 1/1 Running 0 25s
nginx-deployment-1564180365-jbqqo 1/1 Running 0 25s
nginx-deployment-1564180365-hysrc 1/1 Running 0 25s
nginx-deployment-3066724191-08mng 0/1 ImagePullBackOff 0 6s
참고: 디플로이먼트 컨트롤러가 잘못된 롤아웃을 자동으로 중지하고, 새로운 레플리카셋의 스케일 업을 중지한다. 이는 지정한 롤링 업데이트의 파라미터(구체적으로 maxUnavailable)에 따라 달라진다. 쿠버네티스는 기본값으로 25%를 설정한다.
디플로이먼트 상세보기
$ kubectl describe deployment
Replicas: 3 desired | 1 updated | 4 total | 3 available | 1 unavailable
이 문제를 해결하려면 디플로이먼트를 안정적인 이전 수정 버전으로 롤백해야 한다
디플로이먼트의 롤아웃 기록 확인
$ kubectl rollout history deployment.v1.apps/nginx-deployment
출력
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
1 kubectl apply --filename=nginx-deployment.yaml --record=true
2 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
3 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true
참고: 위에 나오는 CHANGE-CAUSE 변경하기
$ kubectl annotate deployment.v1.apps/nginx-deployment kubernetes.io/change-cause="image updated to 1.9.1"
각 수정 버전의 세부 정보 확인 ( 마지막에 위의 list 에 있는 REVISION 번호 입력 )
$ kubectl rollout history deployment.v1.apps/nginx-deployment --revision=2
이전 수정 버전으로 롤백
다음 단계에 따라 디플로이먼트를 현재 버전에서 이전 버전인 버전 2로 롤백한다.
# 바로 이전 버전으로 rollback
$ kubectl rollout undo deployment.v1.apps/nginx-deployment
# 또는 revision 을 지정해서 rollback
$ kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=2
조회
- deployment 세부 정보
$ kubectl describe deployments
name, namespace, labels, selector, replicas, container 등등 모든 정보를 볼수있습니다.
- list 조회
# deployment 확인
$ kubectl get deployments
# deployment name 지정 조회
$ kubectl get deployment [deployment name]
# 레플리카셋 확인
$ kubectl get rs
# 롤아웃이 완료될때까지 상태관찰
$ kubectl get rs -w
# pod 확인
$ kubectl get pods
'Docker, k8s' 카테고리의 다른 글
[Docker] react + nginx + Dockerizing 따라하기 (4) | 2020.04.01 |
---|---|
[Kubernetes] deployment yaml 사양 (0) | 2020.03.30 |
[Docker] alpine 이미지로 container 만들어보기 (1) | 2020.03.28 |
[Docker] Nginx + React + Docker 컨테이너 실행 (0) | 2020.03.28 |
[Docker] Docker cp : host 에서 Container 로 file copy (4) | 2020.03.27 |
댓글