kubectl create -f deployment.yaml 명령어를 입력하여 "Deployment"를 생성한다.
kubectl get deployment 명령어를 입력하여 "Deployment"를 확인한다.
kubectl describe deployment myapp-deployment 명령어를 입력하여 "Deployment"에 대한 자세한 정보를 확인한다.
Name: myapp-deployment
Namespace: default
CreationTimestamp: Thu, 20 Feb 2025 14:43:55 +0900
Labels: app=nginx
tier=frontend
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=myapp
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=myapp
Containers:
nginx:
Image: nginx
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Node-Selectors: <none>
Tolerations: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: myapp-replicaset (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 2m11s deployment-controller Scaled up replica set myapp-replicaset from 2 to 3
kubectl get all 명령어를 입력하여 생성된 모든 객체를 확인한다.
NAME READY STATUS RESTARTS AGE
pod/myapp-replicaset-2z8c4 1/1 Running 0 3m22s
pod/myapp-replicaset-ckn8d 1/1 Running 0 19h
pod/myapp-replicaset-jfkq8 1/1 Running 0 18h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/myapp-deployment 3/3 3 3 3m22s
NAME DESIRED CURRENT READY AGE
replicaset.apps/myapp-replicaset 3 3 3 19h
Rollout and Versioning
새로운 Deployment를 만들거나 기존 Deployment에서 이미지를 업데이트할 때마다 Rollout이 트리거된다.
kubectl create -f deployment.yaml 명령어를 입력하여 "Deployment"를 생성한다.
kubectl rollout status deployment.apps/myapp-deployment 명령어를 입력하여 상태를 확인한다.
Waiting for deployment "myapp-deployment" rollout to finish: 0 of 6 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 1 of 6 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 2 of 6 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 3 of 6 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 4 of 6 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 5 of 6 updated replicas are available...
deployment "myapp-deployment" successfully rolled out
kubectl delete deployment myapp-deployment 명령어를 입력하여 "Deployment"를 삭제한다.
삭제 직후 kubectl rollout status deployment.apps/myapp-deployment 명령어를 입력하여 복제본이 제거되는 것을 확인한다.
Waiting for deployment "myapp-deployment" rollout to finish: 0 of 6 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 1 of 6 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 2 of 6 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 3 of 6 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 4 of 6 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 5 of 6 updated replicas are available...
deployment "myapp-deployment" successfully rolled out
kubectl rollout history deployment.apps/myapp-deployment 명령어를 입력하여 Deployment의 히스토리를 확인한다.
REVISION CHANGE-CAUSE
1 <none>
이번에는 Deployment를 생성할 때 "--record" 옵션을 추가하여 히스토리를 기록한다.
kubectl create -f deployment.yaml --record 명령어를 입력하여 "Deployment"를 생성한다.
다시 kubectl rollout history deployment.apps/myapp-deployment 명령어를 실행하면 실행할 때의 명령어가 저장되어 있는 것을 확인할 수 있다.
수정 후 kubectl describe deployment myapp-deployment 명령어를 입력하여 변경된 내용을 확인한다.
// 생략 ..
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 8m deployment-controller Scaled up replica set myapp-deployment-5655d5f56f from 0 to 6
Normal ScalingReplicaSet 68s deployment-controller Scaled up replica set myapp-deployment-5bc74bc7d5 from 0 to 2
Normal ScalingReplicaSet 68s deployment-controller Scaled down replica set myapp-deployment-5655d5f56f from 6 to 5
Normal ScalingReplicaSet 68s deployment-controller Scaled up replica set myapp-deployment-5bc74bc7d5 from 2 to 3
Normal ScalingReplicaSet 58s deployment-controller Scaled down replica set myapp-deployment-5655d5f56f from 5 to 4
Normal ScalingReplicaSet 58s deployment-controller Scaled up replica set myapp-deployment-5bc74bc7d5 from 3 to 4
Normal ScalingReplicaSet 57s deployment-controller Scaled down replica set myapp-deployment-5655d5f56f from 4 to 3
Normal ScalingReplicaSet 57s deployment-controller Scaled up replica set myapp-deployment-5bc74bc7d5 from 4 to 5
Normal ScalingReplicaSet 55s deployment-controller Scaled down replica set myapp-deployment-5655d5f56f from 3 to 2
Normal ScalingReplicaSet 51s (x3 over 55s) deployment-controller (combined from similar events): Scaled down replica set myapp-deployment-5655d5f56f from 1 to 0
Events 영역을 확인해보면 기본 전략이 "RollingUpdate" 전략이기 때문에 이전 ReplicaSet이 하나씩 줄어들고 새 ReplicaSet이 하나씩 늘어나는 것을 확인할 수 있다.
이번에는 "set image" 명령어를 사용하여 이미지를 변경해 보도록 한다. kubectl set image deployment myapp-deployment nginx=nginx:1.18-perl --record 명령어를 입력한다.
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/myapp-deployment image updated
업데이트가 완료되었으면 다시 kubectl rollout history deployment.apps/myapp-deployment 명령어를 입력하여 변경된 내용을 확인한다.