请参考 Kubernetes 官方文档:Deployments
Deployment 是 Kubernetes 中一种高级的工作负载资源,用于声明式地管理和更新应用的 Pod 副本。它提供了一种稳健且灵活的方式来定义应用的运行方式,包括维护多少副本以及如何安全地执行滚动更新。
Deployment 是 Kubernetes API 中管理 Pods 和 ReplicaSets 的对象。当你创建一个 Deployment 时,Kubernetes 会自动创建一个 ReplicaSet,负责维护指定数量的 Pod 副本。
使用 Deployments,你可以:
工作原理:
kubectl
。获取镜像地址。镜像来源可以是平台管理员通过工具链集成的镜像仓库,也可以是第三方平台的镜像仓库。
注意:使用 Web 控制台集成的镜像仓库时,可以通过 Already Integrated 过滤镜像。集成项目名称示例:镜像(docker-registry-projectname),其中 projectname 是该 Web 控制台中的项目名,也是镜像仓库中的项目名。
在 Basic Info 部分,配置 Deployment 工作负载的声明式参数:
参数 | 说明 |
---|---|
Replicas | 定义 Deployment 中期望的 Pod 副本数(默认:1 )。根据工作负载需求调整。 |
More > Update Strategy | 配置 rollingUpdate 策略,实现零停机部署:Max surge ( maxSurge ):
maxUnavailable ):
1. 默认值:未显式设置时, maxSurge=1 ,maxUnavailable=1 。2. 非运行状态的 Pod(如 Pending 、CrashLoopBackOff )视为不可用。3. 同时约束:
对于 10 副本的 Deployment:
|
注意:在混合架构集群中部署单架构镜像时,请确保为 Pod 调度配置了正确的 Node Affinity 规则。
在 Pod 部分,配置容器运行时参数和生命周期管理:
参数 | 说明 |
---|---|
Volumes | 挂载持久卷到容器。支持的卷类型包括 PVC 、ConfigMap 、Secret 、emptyDir 、hostPath 等。具体实现请参见 卷挂载指南。 |
Pull Secret | 仅当从第三方镜像仓库(通过手动输入镜像 URL)拉取镜像时需要。 注意:用于从私有仓库拉取镜像的认证 Secret。 |
Close Grace Period | Pod 接收到终止信号后允许的优雅关闭时间(默认:30s )。- 期间 Pod 会完成正在处理的请求并释放资源。 - 设置为 0 会强制立即删除(SIGKILL),可能导致请求中断。 |
参数 | 说明 |
---|---|
More > Node Selector | 限制 Pod 调度到具有特定标签的节点(例如 kubernetes.io/os: linux )。![]() |
More > Affinity | 基于现有规则定义更细粒度的调度规则。 Affinity 类型:
|
Kube-OVN
参数 | 说明 |
---|---|
Bandwidth Limits | 对 Pod 网络流量实施 QoS:
|
Subnet | 从预定义子网池分配 IP。未指定时使用命名空间默认子网。 |
Static IP Address | 绑定持久 IP 地址给 Pod:
|
Calico
参数 | 说明 |
---|---|
Static IP Address | 分配固定 IP,严格唯一:
|
在 Container 部分,参考以下说明配置相关信息。
参数 | 说明 |
---|---|
资源请求与限制 |
|
扩展资源 | 配置集群可用的扩展资源(如 vGPU、pGPU)。 |
卷挂载 | 持久存储配置。详见 存储卷挂载说明。 操作:
|
端口 | 暴露容器端口。 示例:暴露 TCP 端口 6379 ,名称为 redis 。字段:
|
启动命令与参数 | 覆盖默认 ENTRYPOINT/CMD: 示例 1:执行 top -b - Command: ["top", "-b"] - 或 Command: ["top"] ,Args:["-b"] 示例 2:输出 $MESSAGE :/bin/sh -c "while true; do echo $(MESSAGE); sleep 10; done" 详见 定义命令。 |
More > 环境变量 |
|
More > 引用的 ConfigMaps | 将整个 ConfigMap/Secret 注入为环境变量。支持的 Secret 类型:Opaque 、kubernetes.io/basic-auth 。 |
More > 健康检查 |
|
More > 日志文件 | 配置日志路径: - 默认收集 stdout - 文件模式:如 /var/log/*.log 要求:
|
More > 排除日志文件 | 排除特定日志收集(如 /var/log/aaa.log )。 |
More > 停止前执行 | 容器终止前执行命令。 示例: echo "stop" 注意:命令执行时间必须短于 Pod 的 terminationGracePeriodSeconds 。 |
点击右上角的 Add Container 或 Add Init Container。
参见 Init Containers。 Init Container:
点击 Create。
类型 | 用途 |
---|---|
Persistent Volume Claim | 绑定已有的 PVC 以请求持久存储。 注意:仅可选择已绑定 PVC(关联 PV)。未绑定 PVC 会导致 Pod 创建失败。 |
ConfigMap | 挂载完整或部分 ConfigMap 数据为文件:
|
Secret | 挂载完整或部分 Secret 数据为文件:
|
Ephemeral Volumes | 集群动态提供的临时卷,具备:
|
Empty Directory | Pod 内容器间共享的临时存储:
|
Host Path | 挂载宿主机目录(必须以 / 开头,如 /volumepath )。 |
查看 Deployment 是否已创建。
获取 Deployment 详细信息。
按照以下步骤更新 Deployment:
将 nginx Pods 更新为使用 nginx:1 .16.1 镜像。
或使用以下命令:
也可以编辑 Deployment,将 .spec.template.spec.containers[0].image
从 nginx:1.14.2
改为 nginx:1.16.1
:
查看滚动更新状态:
运行 kubectl get rs
查看 Deployment 通过创建新 ReplicaSet 并扩容到 3 副本,同时缩容旧 ReplicaSet 到 0 副本来更新 Pods。
运行 kubectl get pods
应只显示新 Pods:
使用以下命令扩缩 Deployment:
假设更新 Deployment 时输入了错误的镜像名 nginx:1.161
(应为 nginx:1.16.1
):
滚动更新卡住。可通过查看滚动状态验证:
删除 Deployment 会同时删除其管理的 ReplicaSet 及所有关联的 Pods。
可以查看 Deployment 以获取应用信息。
当 Deployment 遇到问题时,以下是一些常用的排查方法。
确保 livenessProbe 和 readinessProbe 配置正确,且应用的健康检查接口响应正常。探针失败排查
确保容器资源请求和限制合理,避免因资源不足导致容器被杀死。