$ kubectl version
$ kubectl get nodes
매니패스트 파일 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deploy
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.16
$ kubctl apply -f deployment.yml
$ kubectl get po -o wide
$ kubectl delete -f deployment1.yml
스케일 기능
여기서는 수동으로 변경하는 방법을 사용
CPU 사용량과 연동해서 동적으로 레플리카의 값을 조절하는 오토스케일 기능도 존재한다.
매니페스트를 변경한 후 적용하는 방법
kubectl scale 명령을 사용하여 파드의 개수를 늘리는 방법
$ kubectl apply -f deployment1.yml
$ kubectl scale --replicas=10 deployment.apps/web-deploy
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
web-deploy 10/10 10 10 76s
롤아웃 기능
롤아웃을 할 때는 사용자의 요청을 처리할 수 있도록 정해진 개수만큼 업데이트를 진행할 수 있다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deploy
spec:
replicas: 10
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.16
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deploy
spec:
replicas: 10
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.17 #2와 차이점
$ kubectl describe deployment web-deploy
RollingUpdateStrategy: 25% max unavailable, 25% max surge
- 위 디플로이먼트 상태에서
RollingUpdateStrategy: 25% max unavailable, 25% max surge
를 확인할 수 있다.
- 최대 25%의 파드를 정지할 수 있고, 최대 25%만큼 초과할 수 있음을 의미한다.
- 가령 레필라카 값이 10이면, 최소 파드수는
10-10X0.25=7.5
라는 계산식이 나오는데 소수점을 올려 8이 된다. 초과 파드수는 12.5이므로 13이 된다.
- 정리하면 최소 8개의 파드를 유지하면서 최대 13개의 파드가 되도록 롤아웃이 점진적으로 진행된다.
$ kubectl apply -f deployment3.yml
$ kubectl get po
$ kubectl apply -f deployment2.yml
롤백 기능
kubectl rollout undo deployment web-deploy
PS C:\Users\ICTUSER> kubectl apply -f deployment2.yml
deployment.apps/web-deploy configured
PS C:\Users\ICTUSER> kubectl describe deployment web-deploy
Name: web-deploy
Namespace: default
CreationTimestamp: Fri, 13 Jan 2023 13:44:20 +0900
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 5
Selector: app=web
Replicas: 10 desired | 10 updated | 10 total | 9 available | 1 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=web
Containers:
nginx:
Image: nginx:1.16
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True ReplicaSetUpdated
OldReplicaSets: <none>
NewReplicaSet: web-deploy-865777c965 (10/10 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 19m deployment-controller Scaled up replica set web-deploy-865777c965 to 3
Normal ScalingReplicaSet 18m deployment-controller Scaled up replica set web-deploy-865777c965 to 10 from 3
Normal ScalingReplicaSet 8m27s deployment-controller Scaled up replica set web-deploy-5dbf99b688 to 3
Normal ScalingReplicaSet 8m27s deployment-controller Scaled down replica set web-deploy-865777c965 to 8 from 10
Normal ScalingReplicaSet 8m27s deployment-controller Scaled up replica set web-deploy-5dbf99b688 to 5 from 3
Normal ScalingReplicaSet 8m9s deployment-controller Scaled down replica set web-deploy-865777c965 to 7 from 8
Normal ScalingReplicaSet 8m9s deployment-controller Scaled up replica set web-deploy-5dbf99b688 to 6 from 5
Normal ScalingReplicaSet 8m7s deployment-controller Scaled down replica set web-deploy-865777c965 to 6 from 7
Normal ScalingReplicaSet 8m7s deployment-controller Scaled up replica set web-deploy-5dbf99b688 to 7 from 6
Normal ScalingReplicaSet 82s (x26 over 8m7s) deployment-controller (combined from similar events): Scaled up replica set web-deploy-5dbf99b688 to 3 from 0
PS C:\Users\ICTUSER> kubectl rollout undo deployment web-deploy
deployment.apps/web-deploy rolled back
PS C:\Users\ICTUSER> kubectl describe deployment web-deploy
Name: web-deploy
Namespace: default
CreationTimestamp: Fri, 13 Jan 2023 13:44:20 +0900
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 6
Selector: app=web
Replicas: 10 desired | 5 updated | 13 total | 8 available | 5 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=web
Containers:
nginx:
Image: nginx:1.17
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True ReplicaSetUpdated
OldReplicaSets: web-deploy-865777c965 (8/8 replicas created)
NewReplicaSet: web-deploy-5dbf99b688 (5/5 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 19m deployment-controller Scaled up replica set web-deploy-865777c965 to 3
Normal ScalingReplicaSet 18m deployment-controller Scaled up replica set web-deploy-865777c965 to 10 from 3
Normal ScalingReplicaSet 8m36s deployment-controller Scaled up replica set web-deploy-5dbf99b688 to 3
Normal ScalingReplicaSet 8m36s deployment-controller Scaled down replica set web-deploy-865777c965 to 8 from 10
Normal ScalingReplicaSet 8m36s deployment-controller Scaled up replica set web-deploy-5dbf99b688 to 5 from 3
Normal ScalingReplicaSet 8m18s deployment-controller Scaled down replica set web-deploy-865777c965 to 7 from 8
Normal ScalingReplicaSet 8m18s deployment-controller Scaled up replica set web-deploy-5dbf99b688 to 6 from 5
Normal ScalingReplicaSet 8m16s deployment-controller Scaled down replica set web-deploy-865777c965 to 6 from 7
Normal ScalingReplicaSet 8m16s deployment-controller Scaled up replica set web-deploy-5dbf99b688 to 7 from 6
Normal ScalingReplicaSet 91s (x26 over 8m16s) deployment-controller (combined from similar events): Scaled up replica set web-deploy-5dbf99b688 to 3 from 0
파드 내의 컨테이너가 모종의 이유로 죽으면, 기본적으로는 파드가 컨테이너를 재구동 시켜준다.
디플로이먼트의 자동 복구 기능은 파드 단위로 복구
노드가 중지하면 디플로이먼트는 5분을 기다리며 거기서 1분이 경과하면 중지된 노드의 파드들의 상태가 UNKNOWN으로 바뀐다.
동시에 다른 노드에 UNKNOWN 상태의 파드만큼 새로운 파드를 실행한다.
여기서 중지된 노드가 다시 구동하면 그제서야 UNKNOWN 상태의 파드를 제거한다.
디플로이먼트의 자동복구 기능은 최대한 신중하게 동작하도록 구성되어있다.