디플로이먼트(Deployment)
https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/
레플리카셋을 관리하고 컨트롤한다. 애플리케이션의 업데이트와 배포를 쉽게 하기 위해 만든 개념
디플로이먼트 생성 확인
vagrant@ubuntu:~/kub01$ vi deployment-nginx.yml
`YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx
template:
metadata:
name: my-nginx-pod
labels:
app: my-nginx
spec:
containers:
- name: nginx
image: nginx:1.10
ports:
- containerPort: 80
`
vagrant@ubuntu:~/kub01$ kubectl apply -f deployment-nginx.yml
deployment.apps/my-nginx-deployment created
vagrant@ubuntu:~/kub01$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
my-nginx-deployment 3/3 3 3 17s
vagrant@ubuntu:~/kub01$ kubectl get replicasets
NAME DESIRED CURRENT READY AGE
my-nginx-deployment-7484748b57 3 3 3 30s
vagrant@ubuntu:~/kub01$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-deployment-7484748b57-dlhbn 1/1 Running 0 38s
my-nginx-deployment-7484748b57-sc6bk 1/1 Running 0 38s
my-nginx-deployment-7484748b57-vr74n 1/1 Running 0 38s
디플로이먼트를 삭제했을 때, replicaset, pod도 함께 삭제됨 확인
vagrant@ubuntu:~/kub01$ kubectl delete deployment my-nginx-deployment
deployment.apps "my-nginx-deployment" deleted
vagrant@ubuntu:~/kub01$ kubectl get deployment
No resources found in default namespace.
vagrant@ubuntu:~/kub01$ kubectl get replicasets
No resources found in default namespace.
vagrant@ubuntu:~/kub01$ kubectl get pods
No resources found in default namespace.
디플로이먼트 사용 이유?
디플로이먼트는 컨테이너 애플리케이션을 배포하고 관리하는 역할
애플리케이션을 업데이트 할 때 레플리카셋의 변경 사항을 저장하는 리비전을 남겨 롤백 가능하게 해 주고, 무중단 서비스를 위한 파드의 롤링 업데이트 전략을 지정할 있음
--record 옵션을 추가해 디플로이먼트 생성
vagrant@ubuntu:~/kub01$ kubectl apply -f deployment-nginx.yml --record
deployment.apps/my-nginx-deployment created
vagrant@ubuntu:~/kub01$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-deployment-7484748b57-8ph87 1/1 Running 0 8s
my-nginx-deployment-7484748b57-fkc2q 1/1 Running 0 8s
my-nginx-deployment-7484748b57-v7hkr 1/1 Running 0 8s
kubectl set image 명령으로 pod 이미지 변경
vagrant@ubuntu:~/kub01$ kubectl set image deployment my-nginx-deployment nginx=nginx:1.11 --record
디플로이먼트 이름 컨테이너 이름
deployment.apps/my-nginx-deployment image updated
vagrant@ubuntu:~/kub01$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-deployment-556b57945d-mlj7s 1/1 Running 0 14s
my-nginx-deployment-556b57945d-sklj2 1/1 Running 0 6s
my-nginx-deployment-556b57945d-tdg2t 1/1 Running 0 4s
pods 의 NAME을 보면 바뀐것을 확인 할 수 있다. 실습 예제에선 nginx 버전을 바꿨기 때문에 기존 pod이 전부 내려가고 새로운 pod 가 replicasetd규칙에 의해 3개가 올라옴
replicas 값만 변경해서는 레플리카셋의 교체가 일어나지는 않는다.
리비전 정보를 확인
--record=true 옵션으로 디플로이먼트를 변경하면 변경 사항을 기록하여 해당 버전의 레플리카셋을 보관할 수 있다.
vagrant@ubuntu:~/kub01$ kubectl rollout history deployment my-nginx-deployment
deployment.apps/my-nginx-deployment
REVISION CHANGE-CAUSE
1 kubectl apply --filename=deployment-nginx.yml --record=true
2 kubectl set image deployment my-nginx-deployment nginx=nginx:1.11 --record=true
이전 버전의 레플리카셋으로 롤백
vagrant@ubuntu:~/kub01$ kubectl rollout undo deployment my-nginx-deployment --to-revision=1
deployment.apps/my-nginx-deployment rolled back
vagrant@ubuntu:~/kub01$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-deployment-7484748b57-2mks2 1/1 Running 0 12s
my-nginx-deployment-7484748b57-2xpsw 1/1 Running 0 15s
my-nginx-deployment-7484748b57-ngcd4 1/1 Running 0 14s
vagrant@ubuntu:~/kub01$ kubectl get replicasets
NAME DESIRED CURRENT READY AGE
my-nginx-deployment-556b57945d 0 0 0 11m
my-nginx-deployment-7484748b57 3 3 3 15m
vagrant@ubuntu:~/kub01$ kubectl rollout history deployment my-nginx-deployment
deployment.apps/my-nginx-deployment
REVISION CHANGE-CAUSE
2 kubectl set image deployment my-nginx-deployment nginx=nginx:1.11 --record=true
3 kubectl apply --filename=deployment-nginx.yml --record=true
디플로이먼트 상세 정보 확인
vagrant@ubuntu:~/kub01$ kubectl describe deploy my-nginx-deployment
Name: my-nginx-deployment
Namespace: default
CreationTimestamp: Mon, 21 Sep 2020 04:13:55 +0000
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 3
kubernetes.io/change-cause: kubectl apply --filename=deployment-nginx.yml --record=true
Selector: app=my-nginx
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=my-nginx
Containers:
nginx:
Image: nginx:1.10
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: my-nginx-deployment-7484748b57 (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 15m deployment-controller Scaled up replica set my-nginx-deployment-556b57945d to 1
Normal ScalingReplicaSet 15m deployment-controller Scaled down replica set my-nginx-deployment-7484748b57 to 2
Normal ScalingReplicaSet 15m deployment-controller Scaled up replica set my-nginx-deployment-556b57945d to 2
Normal ScalingReplicaSet 14m deployment-controller Scaled down replica set my-nginx-deployment-7484748b57 to 1
Normal ScalingReplicaSet 14m deployment-controller Scaled up replica set my-nginx-deployment-556b57945d to 3
Normal ScalingReplicaSet 14m deployment-controller Scaled down replica set my-nginx-deployment-7484748b57 to 0
Normal ScalingReplicaSet 3m43s deployment-controller Scaled up replica set my-nginx-deployment-7484748b57 to 1
Normal ScalingReplicaSet 3m42s deployment-controller Scaled down replica set my-nginx-deployment-556b57945d to 2
Normal ScalingReplicaSet 3m42s deployment-controller Scaled up replica set my-nginx-deployment-7484748b57 to 2
Normal ScalingReplicaSet 3m40s (x2 over 19m) deployment-controller Scaled up replica set my-nginx-deployment-7484748b57 to 3
Normal ScalingReplicaSet 3m40s deployment-controller Scaled down replica set my-nginx-deployment-556b57945d to 1
Normal ScalingReplicaSet 3m37s deployment-controller Scaled down replica set my-nginx-deployment-556b57945d to 0
반응형