【K8s 精选】CKA - 工作负载和调度 - 部署、更新和回滚
2022-02-28 本文已影响0人
熊本极客
1.创建 Deployment 部署 Pod
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
#deployment的标签
labels:
app: nginx
spec:
replicas: 3
selector: #必填字段
#spec.selector.matchLabels与spec.template.metadata.labels一致,可用于service的后端
matchLabels:
app: nginx
template:
metadata:
#pod的标签
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
● metadata.name
表示 Deployment 的唯一名称
● spec.replicas
表示 Pod 的副本数
● spec.selector
表示 Deployment 通过模板 template
管理 Pods
说明:
spec.selector.matchLabels
与spec.template.metadata.labels
需要保持一致,可用于 Service 的后端。
2.更新 Deployment
仅当 Deployment Pod 模板即
spec.template
内容有变化的时候,才会触发 Deployment 更新。
例如,更新镜像
步骤 ①:更新镜像版本
#方式1 直接设置镜像
#nginx-deployment是metadata.name,nginx是spec.template.spec.containers[0].name
$kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record
deployment.apps/nginx-deployment image updated
#方式2 edit deployment
$kubectl edit deployment/nginx-deployment
deployment.apps/nginx-deployment image updated
步骤 ②:查看上线状态
$kubectl rollout status deployment/nginx-deployment
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
deployment "nginx-deployment" successfully rolled out
步骤 ③:查看 Deployment 和 Pod 的最新状态
#查看 Deployment
$kubectl get deployment/nginx-deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 3 3 3 36s
#查看副本数 ReplicaSet
$kubectl get rs |grep nginx-deployment
NAME DESIRED CURRENT READY AGE
nginx-deployment-1564180365 3 3 3 6s
nginx-deployment-2035384211 0 0 0 36s
#查看 Pod
$kubectl get pods |grep nginx-deployment
NAME READY STATUS RESTARTS AGE
nginx-deployment-1564180365-khku8 1/1 Running 0 14s
nginx-deployment-1564180365-nacti 1/1 Running 0 14s
nginx-deployment-1564180365-z9gth 1/1 Running 0 14s
Deployment 的升级流程:首先创建新 Pod,直到有足够的数量新 Pods 创建了,才会杀死旧 Pods。
3.回滚 Deployment
3.1 查看升级过程中有问题的 Pod
类似上面升级 Deployment 的操作,如果出现新 Pod 异常启动,则停止升级。
说明: 可通过 rollingUpdate 参数
maxUnavailable
(默认值为 25%),实现 Deployment 控制器自动停止有问题的升级过程,并停止对新的 ReplicaSet 扩容。
#查看 Deployment
$kubectl get deployment/nginx-deployment
Waiting for rollout to finish: 1 out of 3 new replicas have been updated...
#查看 Pod
$kubectl get pods |grep nginx-deployment
NAME READY STATUS RESTARTS AGE
nginx-deployment-1564180365-70iae 1/1 Running 0 50s
nginx-deployment-1564180365-jbqqo 1/1 Running 0 50s
nginx-deployment-1564180365-hysrc 1/1 Running 0 50s
nginx-deployment-3066724191-08mng 0/1 ImagePullBackOff 0 6s
3.2 查看 Deployment 上线历史
#检查 Deployment 修订历史
$kubectl rollout history deployment/nginx-deployment
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
1 kubectl apply --filename=https://k8s.io/examples/controllers/nginx-deployment.yaml --record=true
2 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
3 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true
#查看指定 Deployment 历史的详情
#revision 表示上述 REVISION 的版本,数字越大,版本越新。
$kubectl rollout history deployment.v1.apps/nginx-deployment --revision=2
deployments "nginx-deployment" revision 2
Labels: app=nginx
pod-template-hash=1159050644
Annotations: kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
Containers:
nginx:
Image: nginx:1.16.1
Port: 80/TCP
QoS Tier:
cpu: BestEffort
memory: BestEffort
Environment Variables: <none>
No volumes.
3.2 回滚 Deployment 之前的版本
# --to-revision 回滚到版本 2
$kubectl rollout undo deployment/nginx-deployment --to-revision=2
#检查回滚是否成功以及 Deployment 是否正在运
$kubectl get deployment nginx-deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 3 3 3 30m
$kubectl describe deployment nginx-deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Sun, 02 Sep 2018 18:17:55 -0500
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision=4
kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
Selector: app=nginx
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=nginx
Containers:
nginx:
Image: nginx:1.16.1
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-deployment-c4747d96c (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 12m deployment-controller Scaled up replica set nginx-deployment-75675f5897 to 3
Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 1
Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 2
Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 2
Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 1
Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 3
Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 0
Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-595696685f to 1
Normal DeploymentRollback 15s deployment-controller Rolled back deployment "nginx-deployment" to revision 2
Normal ScalingReplicaSet 15s deployment-controller Scaled down replica set nginx-deployment-595696685f to 0