strategy 업데이트 방식 결정 가능, Recreate, RollingUpdate 사용 가능, 기본값은 RollingUpdate Recreate 는 오래된 파드를 정지시키고 새로운 파드를 다시 작성하는 방식, 가장 심플하고 빠르지만 서버가 모두 내려가 버리기에 다운타임이 발생한다.
rollingUpdate.maxUnavailable spec.replicas 수 기준 unavailable 상태인 Pod 의 최대 개수를 설정. 기본값은 25%
rollingUpdate.maxSurge spec.replicas 수 기준 최대 새로 추가되는 파드 수, 기본값은 25%. 100% 설정시 신버전의 파드수가 리플리카수만큼 실행되어 한번에 20개의 파드가 동작하게 된다. 리소스 상황에 따라 특이사항이 발생할 수 있음으로 maxSurge 는 작성하는 것을 권장한다.
kubectl describe deploy nginx-deployment Name: nginx-deployment Namespace: default ... ... OldReplicaSets: <none> NewReplicaSet: nginx-deployment-f75fb748c (3/3 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 28m deployment-controller Scaled up replica set nginx-deployment-5bff7844cb to 3 Normal ScalingReplicaSet 18s deployment-controller Scaled up replica set nginx-deployment-f75fb748c to 1 Normal ScalingReplicaSet 4s deployment-controller Scaled down replica set nginx-deployment-5bff7844cb to 2 Normal ScalingReplicaSet 4s deployment-controller Scaled up replica set nginx-deployment-f75fb748c to 2 Normal ScalingReplicaSet 3s deployment-controller Scaled down replica set nginx-deployment-5bff7844cb to 1 Normal ScalingReplicaSet 3s deployment-controller Scaled up replica set nginx-deployment-f75fb748c to 3 Normal ScalingReplicaSet 2s deployment-controller Scaled down replica set nginx-deployment-5bff7844cb to 0
nginx-deployment-5bff7844cb 이름의 리플리카셋의 파드를 하나씩 줄이며 nginx-deployment-f75fb748c 이름의 새로운 리플리카셋의 파드를 하나씩 생성한다.
Roll out, Roll back
디플로이먼트 이력(history)을 확인하려면 rollout history 옵션을 사용한다.
kubectl describe deploy nginx-deployment # Name: nginx-deployment # Namespace: default # CreationTimestamp: Fri, 23 Jan 2020 09:57:02 +0900 # Labels: <none> # Annotations: deployment.kubernetes.io/revision: 2 # Selector: app=nginx-pod # Replicas: 10 desired | 10 updated | 10 total | 10 available | 0 unavailable # StrategyType: RollingUpdate # MinReadySeconds: 0 # RollingUpdateStrategy: 50% max unavailable, 50% max surge # Pod Template: # Labels: app=nginx-pod # Containers: # nginx: # Image: nginx:1.16 # Port: 80/TCP # Host Port: 0/TCP # Environment: <none> # Mounts: <none> # Volumes: <none> # Conditions: # Type Status Reason # ---- ------ ------ # Available True MinimumReplicasAvailable # Progressing True NewReplicaSetAvailable # OldReplicaSets: nginx-deployment-85c65c75d8 (0/0 replicas created) # NewReplicaSet: nginx-deployment-67d4595779 (10/10 replicas created) # Events: # Type Reason Age From Message # ---- ------ ---- ---- ------- # Normal ScalingReplicaSet 119s deployment-controller Scaled up replica set nginx-deployment-67d4595779 from 0 to 5 # Normal ScalingReplicaSet 119s deployment-controller Scaled down replica set nginx-deployment-85c65c75d8 from 10 to 5 # Normal ScalingReplicaSet 119s deployment-controller Scaled up replica set nginx-deployment-67d4595779 from 5 to 10 # Normal ScalingReplicaSet 101s deployment-controller Scaled down replica set nginx-deployment-85c65c75d8 from 5 to 4 # Normal ScalingReplicaSet 100s deployment-controller Scaled down replica set nginx-deployment-85c65c75d8 from 4 to 3 # Normal ScalingReplicaSet 100s deployment-controller Scaled down replica set nginx-deployment-85c65c75d8 from 3 to 2 # Normal ScalingReplicaSet 99s deployment-controller Scaled down replica set nginx-deployment-85c65c75d8 from 2 to 1 # Normal ScalingReplicaSet 95s deployment-controller Scaled down replica set nginx-deployment-85c65c75d8 from 1 to 0
85c65c75d8 -> 67d4595779 해시의 변경값이다.
nginx:1.16 에 문제가 있단 가정 하에, deployment 파일에 nginx:1.15 설정 후 다시 apply
autoscaling/v2 부턴 metrics 설정을 통해 CPU 외에 다른 메트릭 데이터를 통해 오토스케일링 가능하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
apiVersion:autoscaling/v2 kind:HorizontalPodAutoscaler metadata: name:kubernetes-simple-app-hpa namespace:default spec: minReplicas:1# 최소 설정개수 maxReplicas:10# 최대 설정개수 scaleTargetRef:# 오토스케일링 대상 apiVersion:extensions/v1beta1 kind:Deployment name:kubernetes-simple-app metrics: -type:Resource resource: name:cpu targetAverageUtilization:30# CPU 가 30% 되도록 조정
한번 스케일 아웃 HPA 가 발동하면 다음번 HPA 는 3분뒤에 다시 발동가능하다. (줄어드는건 5분)