部署
目录
理解 Deployment创建 Deployment使用 CLI 创建 Deployment前提条件YAML 文件示例通过 YAML 创建 Deployment使用 Web 控制台创建 Deployment前提条件使用新的 Web 控制台创建 Deployment操作步骤 - 配置基本信息操作步骤 - 配置 Pod操作步骤 - 配置容器参考信息健康检查何时在原生应用视图中使用 Deployment提交前的 Deployment 审查要点管理 Deployment使用 CLI 管理 Deployment查看 Deployment更新 Deployment扩缩 Deployment回滚 Deployment删除 Deployment使用 Web 控制台管理 Deployment查看 Deployment更新 Deployment删除 Deployment使用 CLI 进行故障排查检查 Deployment 状态检查 ReplicaSet 状态检查 Pod 状态查看日志进入 Pod 进行调试检查健康配置检查资源限制理解 Deployment
请参阅 Kubernetes 官方文档:Deployments
Deployment 是 Kubernetes 中用于声明式管理和更新应用程序 Pod 副本的高级工作负载资源。它提供了一种健壮且灵活的方式来定义应用程序应如何运行,包括需要维持多少副本,以及如何安全地执行滚动更新。
Deployment 是 Kubernetes API 中用于管理 Pod 和 ReplicaSet 的对象。当您创建 Deployment 时,Kubernetes 会自动创建一个 ReplicaSet,随后由该 ReplicaSet 负责维护指定数量的 Pod 副本。
使用 Deployment,您可以:
- 声明式管理:定义应用程序的期望状态,Kubernetes 会自动确保集群的实际状态与期望状态一致。
- 版本控制和回滚:跟踪 Deployment 的每个修订版本,并在出现问题时轻松回滚到之前的稳定版本。
- 零停机更新:使用滚动更新策略逐步更新应用程序,而不会中断服务。
- 自愈:当 Pod 实例崩溃、终止或从节点中移除时,Deployment 会自动替换它们,确保始终有指定数量的 Pod 可用。
工作原理:
- 您通过 Deployment 定义应用程序的期望状态(例如,使用哪个镜像、运行多少副本)。
- Deployment 创建一个 ReplicaSet,以确保运行指定数量的 Pod。
- ReplicaSet 创建并管理实际的 Pod 实例。
- 当您更新 Deployment 时(例如更改镜像版本),Deployment 会创建一个新的 ReplicaSet,并按照预定义的滚动更新策略逐步用新 Pod 替换旧 Pod,直到所有新 Pod 都运行起来,然后删除旧的 ReplicaSet。
创建 Deployment
使用 CLI 创建 Deployment
前提条件
- 确保已配置
kubectl,并已连接到您的集群。
YAML 文件示例
通过 YAML 创建 Deployment
使用 Web 控制台创建 Deployment
前提条件
获取镜像地址。镜像来源可以是由平台管理员通过工具链集成的镜像仓库,也可以是第三方平台的镜像仓库。
-
对于前者,管理员通常会将镜像仓库分配给您的项目,您可以使用其中的镜像。如果未找到所需的镜像仓库,请联系管理员进行分配。
-
如果是第三方平台的镜像仓库,请确保当前集群可以直接从该仓库拉取镜像。
-
如果镜像仓库需要认证,则需要配置相应的镜像拉取 Secret。更多信息,请参见 为 ServiceAccount 添加 ImagePullSecrets。
-
通过 OCI Connector 选择镜像时,还需要为 Connector 代理选择一个镜像拉取 Secret,或者确认工作负载的 ServiceAccount 已经引用了该 Secret。两种引用方式是互斥的。请参见 在 OCI Connector 中使用 ImagePullSecret。
使用新的 Web 控制台创建 Deployment
新的 Web 控制台可以从不同视图暴露 Deployment 创建入口。请根据您是从项目范围还是从具体集群中操作来选择入口。
- 原生应用视图:从当前项目开始。打开 Applications > Applications,选择目标 Cluster 和 Namespace,然后选择会创建 Deployment 的工作负载模型或创建流程。
- 集群视图:从具体集群开始。先打开目标集群,进入目标命名空间,然后导航到 Workloads > Deployments,点击 Create Deployment。
在继续之前,请确认以下差异:
- 在 原生应用视图 中,集群选择是项目范围应用工作流的一部分。
- 在 集群视图 中,由于您是从具体集群内部开始操作,因此集群已固定。
- 在 原生应用视图 中,请确认命名空间是否属于预期的项目范围。
- 在 集群视图 中,请确认该集群中命名空间侧的资源是否已为 Deployment 准备就绪。
操作步骤 - 配置基本信息
-
在 Container Platform 中,导航到左侧边栏的 Workloads > Deployments。
-
单击 Create Deployment。
-
选择或输入一个镜像,然后单击Confirm。
说明:当使用集成到 Web 控制台中的镜像仓库镜像时,您可以通过 Already Integrated 过滤镜像。Integration Project Name,例如镜像(registry-projectname),其中包含 Web 控制台中的项目名 projectname,以及镜像仓库中的项目名 containers。
-
在 Basic Info 部分,为 Deployment 工作负载配置声明式参数:
操作步骤 - 配置 Pod
说明:在部署单架构镜像的混合架构集群中,请确保已正确配置 Node Affinity 规则,以便进行 Pod 调度。
-
在 Pod 部分,配置容器运行时参数和生命周期管理:
- Node Affinity 规则
- 网络配置
-
Kube-OVN
-
Calico
-
操作步骤 - 配置容器
-
在 Container 部分,请参考以下说明配置相关信息。
-
单击 Add Container(右上角)或 Add Init Container。
请参见 Init Containers。 Init Container:
- 在应用容器之前启动(按顺序执行)。
- 完成后释放资源。
- 允许删除的条件:
- Pod 包含 >1 个应用容器且 ≥1 个 init container。
- 单应用容器 Pod 不允许删除。
-
单击 Create。
参考信息
存储卷挂载说明
健康检查
何时在原生应用视图中使用 Deployment
当工作负载主要是无状态的,并且应通过复制的 Pod 替换而不是稳定标识或每个副本的持久状态来更新时,请使用 Deployment。
以下场景通常更适合使用 Deployment:
- 副本标识在替换后不需要保持稳定
- 工作负载应通过可互换的 Pod 进行水平扩展
- 应用交付更倾向于使用滚动更新行为
如果工作负载依赖稳定的序号标识或每个副本的持久存储,请改为查看 StatefulSets。
提交前的 Deployment 审查要点
在原生应用视图中创建或更新 Deployment 之前,请仔细检查以下内容:
- 所选项目、集群和命名空间是否是预期的运行范围
- 副本数是否与预期的可用性目标一致
- 所选镜像和拉取凭据在目标集群中是否有效
- 引用的 ConfigMap、Secret、PVC 或 ServiceAccount 是否已存在于同一命名空间中
- 资源 requests、limits 和探针是否与应用的真实启动和健康行为一致
- 滚动发布策略是否适合该工作负载和流量模式
管理 Deployment
使用 CLI 管理 Deployment
查看 Deployment
-
检查 Deployment 是否已创建。
-
获取 Deployment 的详细信息。
更新 Deployment
请按以下步骤更新您的 Deployment:
-
将 nginx Pod 更新为使用 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 个副本,从而更新了 Pod。运行
get pods现在应只显示新的 Pod:
当更改镜像或 OCI Connector 时,也请检查 Pod 模板中的 Pull Secret、serviceAccountName 和令牌有效期。更新后,请验证新的 ReplicaSet 和 Pod:检查 Connector 注解,确认实际 Pod 镜像已重写为 Connector 代理,等待 Pod 进入 Running,并查看 Events。
扩缩 Deployment
您可以使用以下命令扩缩 Deployment:
回滚 Deployment
-
假设您在更新 Deployment 时输入错误,把镜像名称写成了
nginx:1.161,而不是nginx:1.16.1: -
发布会卡住。您可以通过检查发布状态来验证这一点:
删除 Deployment
删除 Deployment 也会删除其管理的 ReplicaSet 和所有关联的 Pod。
使用 Web 控制台管理 Deployment
查看 Deployment
您可以查看 deployment 以获取应用程序信息。
- 在 Container Platform 中,导航到 Workloads > Deployments。
- 找到您要查看的 Deployment。
- 单击 deployment 名称查看 Details、Topology、Logs、Events、Monitoring 等。
更新 Deployment
- 在 Container Platform 中,导航到 Workloads > Deployments。
- 找到您要更新的 Deployment。
- 在 Actions 下拉菜单中,选择 Update 以查看 Edit Deployment 页面。
更新操作会使 Deployment 保持在当前集群和命名空间中。如果工作负载必须运行在不同的集群或命名空间中,请在目标范围内创建或应用单独的 Deployment,而不是将更新视为迁移操作。
在提交更新之前,请确认镜像、探针、环境变量、端口、卷挂载或资源设置的更改不会破坏正在运行的工作负载。
对 Pod 模板的更改可能会触发新的发布。更新请求成功并不代表发布本身就是健康的。只有当新的 Pod 修订版本正确调度、进入就绪状态,并在不使工作负载不可用的情况下替换先前修订版本时,实际效果才会显现出来。
在 Web 控制台中更改镜像或 OCI Connector 时,也请检查 Pull Secret、工作负载 ServiceAccount 和令牌有效期。确认生成的 Pod 使用 Connector 代理镜像并完成发布;仅更新请求成功并不能验证镜像拉取是否成功。
删除 Deployment
- 在 Container Platform 中,导航到 Workloads > Deployments。
- 找到您要删除的 Deployment。
- 在 Actions 下拉菜单中,单击操作列中的 Delete 按钮并确认。
删除后,请验证列表中不再显示该 Deployment,并且任何需要保留的独立 Service、ConfigMap、Secret 或 PVC 仍然存在。
使用 CLI 进行故障排查
当 Deployment 出现问题时,可以使用以下常见排查方法。
对于 OCI Connector 镜像拉取失败,请按以下顺序检查路径:
- 检查 Pod 模板中的
connectors.<baseDomain>/connectors注解。 - 检查
spec.imagePullSecrets以及工作负载 ServiceAccount 的imagePullSecrets。 - 检查实际 Pod 镜像是否已重写为 Connector 代理。
- 检查 Pod 状态和 Events。
如果 Events 显示原始 HTTP 仓库出现 HTTPS 错误,则该工作负载可能没有进入 Connector 代理路径。在更改仓库运行时设置之前,请检查 Connector 代理 Secret、ServiceAccount 和令牌。请参见 在 OCI Connector 中使用 ImagePullSecret。
检查 Deployment 状态
检查 ReplicaSet 状态
检查 Pod 状态
查看日志
进入 Pod 进行调试
检查健康配置
确保 livenessProbe 和 readinessProbe 已正确配置,并且应用程序的健康检查端点能够正常响应。排查探针失败
检查资源限制
确保容器资源 requests 和 limits 设置合理,并且容器不会因资源不足而被终止。
