目录
- 一、Deployment基本概念
- 二、核心功能
- 1、滚动更新
- 2、回滚
- 3、暂停与恢复
- 4、缩放
- 三、使用示例
- 四、操作命令
Deployment作为Kubernetes中的核心工作负载控制器之一,Deployment提供了对应用实例(Pods)的声明式管理和自动更新机制。
一、Deployment基本概念
-
目标状态:通过编写Deployment YAML资源配置文件,用户定义了应用的目标状态,包括所需Pod副本数量、使用的容器镜像版本、Pod模板(包含环境变量、端口映射、卷挂载等)、更新策略等。
-
Pod管理:Deployment负责创建并维护指定数量的Pod副本,确保它们始终按照定义的目标状态运行。如果某个Pod出现故障或被删除,Deployment会自动创建新的Pod以替换。
二、核心功能
1、滚动更新
Deployment支持滚动更新,这是一种平滑的版本升级方式,可以避免服务中断。当更新Deployment的Pod模板(如升级应用镜像)时,Kubernetes会按照指定的更新策略逐步替换旧Pods为新Pods,同时监控新Pods的健康状况。更新策略可定制如下参数:
- 滚动更新批次大小(
.spec.strategy.rollingUpdate.maxUnavailable
):在更新过程中允许同时不可用的最大Pod数。 - 滚动更新批次间隔(
.spec.strategy.rollingUpdate.maxSurge
):每次更新时新创建的Pod数上限,可以是绝对值或相对于现有Pod数的百分比。
2、回滚
Deployment记录了每次更新的历史版本,允许用户在必要时轻松回滚到先前的任一版本。回滚操作只需指定要恢复到的修订版本号,Kubernetes将执行反向的滚动更新过程,恢复到指定版本的Pod模板配置。
3、暂停与恢复
可以暂停Deployment,使其停止执行任何更新操作,以便在维护期间保持应用状态稳定。恢复后,Deployment将继续处理任何待执行的更新。
4、缩放
通过修改Deployment的.spec.replicas
字段,可以动态调整应用实例的数量,适应负载变化或进行容量规划。
三、使用示例
以下是一个简单的Deployment YAML配置示例,展示了如何定义一个运行Nginx服务的Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19.5
ports:
- containerPort: 80
在这个例子中:
.spec.replicas
设置了运行的Pod副本数为3。.spec.selector.matchLabels
定义了标签选择器,用于关联此Deployment管理的Pods。.spec.template.metadata.labels
为Pod模板设置匹配上述选择器的标签。.spec.template.spec.containers
描述了容器配置,包括使用的镜像(nginx:1.19.5
)和暴露的端口(containerPort: 80
)。
四、操作命令
使用kubectl
命令行工具可以对Deployment进行各种操作:
- 创建或更新Deployment:
kubectl apply -f deployment.yaml
- 查看Deployment详情:
kubectl describe deployment my-nginx-deployment
- 列出所有Deployments:
kubectl get deployments
- 滚动更新Deployment(例如升级镜像):
kubectl set image deployment/my-nginx-deployment nginx=nginx:1.20.0
- 执行回滚操作到前一个版本:
kubectl rollout undo deployment/my-nginx-deployment
- 暂停Deployment的更新:
kubectl rollout pause deployment/my-nginx-deployment
- 恢复已暂停的Deployment更新:
kubectl rollout resume deployment/my-nginx-deployment