请参考 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 配置正确,且应用的健康检查接口响应正常。探针失败排查
确保容器资源请求和限制合理,避免因资源不足导致容器被杀死。