k8s核心操作_Deployment滚动更新能力_不停机更新能力_版本回退能力使用_工作负载_其他种类应用部署_无状态_有状态_守护进程_任务调度类型任务---分布式云原生部署架构搭建023
在Kubernetes中,Deployment是一种管理Pod的方式,它能够提供滚动更新的能力,即不停机更新应用程序的能力。
以下是一个简单的Deployment定义示例,它使用了新版本的应用程序镜像,并设置了滚动更新策略:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:v2
ports:
- containerPort: 80
在这个配置中:
replicas: 3
表示Deployment会确保有3个Pod实例。strategy
部分定义了滚动更新的策略。rollingUpdate
中的maxUnavailable: 1
表示在更新过程中最多有1个Pod可用,maxSurge: 1
表示在更新过程中最多可以超过原有的Pod数量1个。selector
定义了Deployment如何选择Pod。template
定义了Pod的模板,包括标签和容器的镜像版本。
当你更新Deployment以使用新的镜像版本时(例如,将 my-app:v2
更新为 my-app:v3
),Kubernetes会逐渐用新版本替换现有的Pod,同时确保至少有 (replicas - maxUnavailable)
或更多的Pod处于运行状态。
如果需要回退到旧版本,你可以通过 kubectl
命令将Deployment的镜像更改回 my-app:v2
,Kubernetes将再次开始滚动更新,将Pod逐渐更新回 v2
版本。
这个过程提供了以下能力:
- 滚动更新:不需要停机即可更新应用程序。
- 版本控制:可以轻松回退到旧版本。
要执行更新或回退,你可以使用以下命令:
# 更新Deployment
kubectl set image deployment/my-app my-app=my-app:v3
# 回退到v2版本
kubectl set image deployment/my-app my-app=my-app:v2
这些命令会触发Deployment的滚动更新,Kubernetes会处理剩下的更新工作。
评论已关闭