创建 Deployment
[root@k8smaster deployment]# ls
nginx-deployment.yaml
[root@k8smaster deployment]# cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
[root@k8smaster deployment]# kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
[root@k8smaster taint_toleration]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demo-pod 1/1 Running 10 17h 10.244.249.48 k8snode1 <none> <none>
nginx-deployment-559d658b74-8bnjk 1/1 Running 0 2m49s 10.244.249.51 k8snode1 <none> <none>
nginx-deployment-559d658b74-hndwt 1/1 Running 0 2m49s 10.244.249.53 k8snode1 <none> <none>
[root@k8smaster taint_toleration]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 4m10s
[root@k8smaster deployment]# kubectl rollout status deployment/nginx-deployment
deployment "nginx-deployment" successfully rolled out
[root@k8smaster deployment]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-559d658b74 2 2 2 2m7s
[root@k8smaster deployment]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-deployment-559d658b74-lwq7t 1/1 Running 0 2m40s app=nginx,pod-template-hash=559d658b74
nginx-deployment-559d658b74-qd8gt 1/1 Running 0 2m40s app=nginx,pod-template-hash=559d658b74
升级:从低版本到高版本
回滚:从高版本到低版本
扩缩:扩张或者缩小副本数量
两种方法:
1.修改nginx-deployment.yaml
[root@k8smaster deployment]# cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2 # 修改数值来扩大缩小副本数量
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1 # 修改nginx的版本
ports:
- containerPort: 80
[root@k8smaster deployment]# kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment configured
[root@k8smaster deployment]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-559d658b74-lwq7t 0/1 Terminating 0 8m26s
nginx-deployment-559d658b74-qd8gt 0/1 Terminating 0 8m26s
nginx-deployment-66b6c48dd5-dkkx9 1/1 Running 0 5s
nginx-deployment-66b6c48dd5-hmx9j 1/1 Running 0 7s
[root@k8smaster deployment]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-66b6c48dd5-dkkx9 1/1 Running 0 33s
nginx-deployment-66b6c48dd5-hmx9j 1/1 Running 0 35s
2.使用命令
[root@k8smaster deployment]# kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
deployment.apps/nginx-deployment image updated
回滚:例如你将镜像名称命名设置为 nginx:1.161 而不是 nginx:1.16.1
[root@k8smaster deployment]# kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
deployment.apps/nginx-deployment image updated
[root@k8smaster deployment]# kubectl set image deployment/nginx-deployment nginx=nginx:1.161
deployment.apps/nginx-deployment image updated
[root@k8smaster deployment]# kubectl rollout status deployment/nginx-deployment
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 2 new replicas have been updated...
^C[root@k8smaster deployment]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-559d658b74 2 2 2 13m
nginx-deployment-5b9cf4fbdd 0 0 0 7m50s
nginx-deployment-66b6c48dd5 0 0 0 5m20s
nginx-deployment-66bc5d6c8 1 1 0 51s
[root@k8smaster deployment]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-559d658b74-ctmhh 1/1 Running 0 3m17s
nginx-deployment-559d658b74-gpbjb 1/1 Running 0 3m15s
nginx-deployment-66bc5d6c8-vwrrv 0/1 ContainerCreating 0 63s
获取 Deployment 描述信息
[root@k8smaster deployment]# kubectl describe deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Wed, 29 Mar 2023 12:15:37 +0800
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 5
Selector: app=nginx
Replicas: 2 desired | 1 updated | 3 total | 2 available | 1 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: nginx:1.161
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True ReplicaSetUpdated
OldReplicaSets: nginx-deployment-559d658b74 (2/2 replicas created)
NewReplicaSet: nginx-deployment-66bc5d6c8 (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 8m22s deployment-controller Scaled up replica set nginx-deployment-5b9cf4fbdd to 1
Normal ScalingReplicaSet 5m52s deployment-controller Scaled down replica set nginx-deployment-5b9cf4fbdd to 0
Normal ScalingReplicaSet 5m52s deployment-controller Scaled up replica set nginx-deployment-66b6c48dd5 to 1
Normal ScalingReplicaSet 5m50s deployment-controller Scaled down replica set nginx-deployment-559d658b74 to 1
Normal ScalingReplicaSet 5m50s deployment-controller Scaled up replica set nginx-deployment-66b6c48dd5 to 2
Normal ScalingReplicaSet 5m48s deployment-controller Scaled down replica set nginx-deployment-559d658b74 to 0
Normal ScalingReplicaSet 3m37s deployment-controller Scaled up replica set nginx-deployment-559d658b74 to 1
Normal ScalingReplicaSet 3m35s (x2 over 14m) deployment-controller Scaled up replica set nginx-deployment-559d658b74 to 2
Normal ScalingReplicaSet 3m35s deployment-controller Scaled down replica set nginx-deployment-66b6c48dd5 to 1
Normal ScalingReplicaSet 83s (x2 over 3m33s) deployment-controller (combined from similar events): Scaled up replica set nginx-deployment-66bc5d6c8 to 1
首先,检查 Deployment 修订历史
[root@k8smaster deployment]# kubectl rollout history deployment/nginx-deployment
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
2 <none>
3 <none>
4 <none>
5 <none>
查看修订历史的详细信息
[root@k8smaster deployment]# kubectl rollout history deployment/nginx-deployment --revision=2
deployment.apps/nginx-deployment with revision #2
Pod Template:
Labels: app=nginx
pod-template-hash=5b9cf4fbdd
Containers:
nginx:
Image: nginx:1.14.1
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
回滚到之前的修订版本
[root@k8smaster deployment]# kubectl rollout undo deployment/nginx-deployment --to-revision=2
deployment.apps/nginx-deployment rolled back
[root@k8smaster deployment]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-559d658b74-ctmhh 1/1 Running 0 4m53s
nginx-deployment-559d658b74-gpbjb 0/1 Terminating 0 4m51s
nginx-deployment-5b9cf4fbdd-7l2k9 0/1 ContainerCreating 0 4s
nginx-deployment-5b9cf4fbdd-pz6q7 1/1 Running 0 6s
检查回滚是否成功
[root@k8smaster deployment]# kubectl get deployment nginx-deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 15m
[root@k8smaster deployment]# kubectl describe deployment nginx-deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Wed, 29 Mar 2023 12:15:37 +0800
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 6
Selector: app=nginx
Replicas: 2 desired | 2 updated | 3 total | 2 available | 1 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: nginx:1.14.1
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True ReplicaSetUpdated
OldReplicaSets: nginx-deployment-559d658b74 (1/1 replicas created)
NewReplicaSet: nginx-deployment-5b9cf4fbdd (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 7m59s deployment-controller Scaled down replica set nginx-deployment-5b9cf4fbdd to 0
Normal ScalingReplicaSet 7m59s deployment-controller Scaled up replica set nginx-deployment-66b6c48dd5 to 1
Normal ScalingReplicaSet 7m57s deployment-controller Scaled down replica set nginx-deployment-559d658b74 to 1
Normal ScalingReplicaSet 7m57s deployment-controller Scaled up replica set nginx-deployment-66b6c48dd5 to 2
Normal ScalingReplicaSet 7m55s deployment-controller Scaled down replica set nginx-deployment-559d658b74 to 0
Normal ScalingReplicaSet 5m44s deployment-controller Scaled up replica set nginx-deployment-559d658b74 to 1
Normal ScalingReplicaSet 5m42s (x2 over 16m) deployment-controller Scaled up replica set nginx-deployment-559d658b74 to 2
Normal ScalingReplicaSet 5m42s deployment-controller Scaled down replica set nginx-deployment-66b6c48dd5 to 1
Normal ScalingReplicaSet 57s (x2 over 10m) deployment-controller Scaled up replica set nginx-deployment-5b9cf4fbdd to 1
Normal ScalingReplicaSet 55s (x5 over 5m40s) deployment-controller (combined from similar events): Scaled up replica set nginx-deployment-5b9cf4fbdd to 2
扩缩
[root@k8smaster deployment]# kubectl scale deployment/nginx-deployment --replicas=5
deployment.apps/nginx-deployment scaled
[root@k8smaster deployment]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-5b9cf4fbdd-6jjrh 1/1 Running 0 5s
nginx-deployment-5b9cf4fbdd-7l2k9 1/1 Running 0 12m
nginx-deployment-5b9cf4fbdd-pz6q7 1/1 Running 0 13m
nginx-deployment-5b9cf4fbdd-scc58 1/1 Running 0 5s
nginx-deployment-5b9cf4fbdd-t59ld 1/1 Running 0 5s