2020. 2. 15. 16:27ㆍdevops/kubernetes
Deployment는 reflica의 상위 오브젝트입니다. 보통 디플로이먼트가 생성되면 해당 디플로이먼트에 대응하는 레플리카셋도 함께 생성됩니다. 따라서 디플로이먼트를 사용하면 포드와 레플리카셋을 직접 생성할 필요가 없습니다.
deployment yaml 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: replicaset-nginx
spec:
replicas: 4
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
kubectl apply -f deployment-nginx.yaml
확인
kubectl get deploy 1 ↵ 11644 15:54:10
NAME READY UP-TO-DATE AVAILABLE AGE
replicaset-nginx 4/4 4 4 3m10s
kubectl delete deploy my-nginx-deployment
디플로이먼트를 사용하는 이유
레플리카셋만을 사용하지 않고 디플로이먼트를 이용하는 이유는 애플리케이션을 배포하고 사용하는데 많은 도움을 줍니다. 예를 들어 업데이트할 때 리비전을 남여 롤백을 가능하게 해주고 롤링 업데이트를 지정할수도 있습니다. --record 옵션을 사용하여 replica-nginx를 만듭니다.
kubectl apply -f replicasets-nginx.yaml --record ✔ 11645 15:54:12
deployment.apps/replicaset-nginx configured
그러고 나서 이미지의 버전을 업데이트 해보겠습니다. 이때는 set image 명령어를 사용합니다.
kubectl set image deployment replicaset-nginx nginx=nginx:1.11 --record
deployment.extensions/replicaset-nginx image updated
레플리카 결과를 보면 아래와 같다.
Desired Current Ready가 0인 것은 처음에 생성된 레플리카인 것을 확인할 수 있습니다. 기존 이미지를 업데이트 함으로써 예전 레플리카정보를 남겨놓습니다. 이전에 옵션으로 주었던 --record를 통해서 변경사항을 위와 같이 남겨두게 됩니다.
그리고 아래와 같은 명령어로 history 정보를 확인할 수 있습니다.
kubectl rollout history deployment replicaset-nginx
deployment.extensions/replicaset-nginx
REVISION CHANGE-CAUSE
1 kubectl apply --filename=replicasets-nginx.yaml --record=true
2 kubectl set image deployment replicaset-nginx nginx=nginx:1.11 --record=true
그리고 여기서 revision의 숫자를 확인한 다음
kubectl rollout undo deployment replicaset-nginx --to-revision=1(옮기고 싶은 번호)
쿠버네티스 리소스의 자세한 정보를 출력하는 kubectl describe 명령어를 사용해 정보를 출력할 수 있습니다.
kubectl describe deploy replicasets-nginx
Name: replicaset-nginx
Namespace: default
CreationTimestamp: Sat, 15 Feb 2020 15:51:02 +0900
Labels: app=my-nginx
Annotations: deployment.kubernetes.io/revision: 2
kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{"kubernetes.io/change-cause":"kubectl apply --filename=replicasets-...
kubernetes.io/change-cause: kubectl set image deployment replicaset-nginx nginx=nginx:1.11 --record=true
Selector: app=my-nginx
Replicas: 4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
.......
요약하자면
레프릴카셋의 리비전 관리 뿐만 아니라 다양한 롤링 업데이트 정책을 사용할 수도 있다는 장점이 있습니다. 따라서 레플리카 셋을 만들지 말고 디플로이먼트를 만드는 것이 쿠버네티스에서 권장하고 있습니다.
'devops > kubernetes' 카테고리의 다른 글
kubernetes 리소스의 관리와 설정 - namespace (0) | 2020.02.19 |
---|---|
kubernetes started(5) 서비스(Service) (0) | 2020.02.15 |
kubernetes started(3) 레플리카 셋(Replica Set) (0) | 2020.02.15 |
kubernetes started(2) pod (0) | 2020.02.13 |
kubernetes started(1) (0) | 2020.02.13 |