Deployments
目录
理解 Deployments
请参考 Kubernetes 官方文档:Deployments
Deployment 是 Kubernetes 中一种高级的工作负载资源,用于声明式地管理和更新应用的 Pod 副本。它提供了一种稳健且灵活的方式来定义应用的运行方式,包括维护多少副本以及如何安全地执行滚动更新。
Deployment 是 Kubernetes API 中管理 Pods 和 ReplicaSets 的对象。当你创建一个 Deployment 时,Kubernetes 会自动创建一个 ReplicaSet,负责维护指定数量的 Pod 副本。
使用 Deployments,你可以:
- 声明式管理:定义应用的期望状态,Kubernetes 会自动确保集群的实际状态与期望状态一致。
- 版本控制与回滚:跟踪 Deployment 的每个版本,出现问题时可以轻松回滚到之前的稳定版本。
- 零停机更新:使用滚动更新策略逐步更新应用,无服务中断。
- 自我修复:Deployment 会自动替换崩溃、终止或从节点移除的 Pod,确保指定数量的 Pod 始终可用。
工作原理:
- 通过 Deployment 定义应用的期望状态(例如使用哪个镜像,运行多少副本)。
- Deployment 创建 ReplicaSet,确保指定数量的 Pod 正在运行。
- ReplicaSet 创建并管理实际的 Pod 实例。
- 更新 Deployment(例如更改镜像版本)时,Deployment 会创建新的 ReplicaSet,并根据预定义的滚动更新策略逐步替换旧 Pod,直到所有新 Pod 运行后,删除旧的 ReplicaSet。
创建 Deployments
使用 CLI 创建 Deployment
前提条件
- 确保已配置并连接到集群的
kubectl。
YAML 文件示例
通过 YAML 创建 Deployment
使用 Web 控制台创建 Deployment
前提条件
获取镜像地址。镜像来源可以是平台管理员通过工具链集成的镜像仓库,也可以是第三方平台的镜像仓库。
- 对于前者,管理员通常会将镜像仓库分配给你的项目,你可以使用其中的镜像。如果找不到所需镜像仓库,请联系管理员分配。
- 对于第三方平台的镜像仓库,确保当前集群能够直接拉取镜像。
操作步骤 - 配置基础信息
- 在 Container Platform,左侧导航栏进入 Workloads > Deployments。
- 点击 Create Deployment。
- 选择或输入镜像,点击 Confirm。
注意:使用 Web 控制台集成的镜像仓库时,可以通过 Already Integrated 过滤镜像。集成项目名称示例:镜像(docker-registry-projectname),其中 projectname 是该 Web 控制台中的项目名,也是镜像仓库中的项目名。
-
在 Basic Info 部分,配置 Deployment 工作负载的声明式参数:
操作步骤 - 配置 Pod
注意:在混合架构集群中部署单架构镜像时,请确保为 Pod 调度配置了正确的 Node Affinity 规则。
-
在 Pod 部分,配置容器运行时参数和生命周期管理:
- Node Affinity 规则
- 网络配置
-
Kube-OVN
-
Calico
-
操作步骤 - 配置容器
-
在 Container 部分,参考以下说明配置相关信息。
-
点击右上角的 Add Container 或 Add Init Container。
参见 Init Containers。 Init Container:
- 在应用容器启动前运行(顺序执行)。
- 完成后释放资源。
- 允许删除条件:
- Pod 有多个应用容器且至少有一个 Init Container。
- 单应用容器的 Pod 不允许删除 Init Container。
-
点击 Create。
参考信息
存储卷挂载说明
健康检查
管理 Deployments
使用 CLI 管理 Deployment
查看 Deployment
-
查看 Deployment 是否已创建。
-
获取 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:
回滚 Deployment
-
假设更新 Deployment 时输入了错误的镜像名
nginx:1.161(应为nginx:1.16.1): -
滚动更新卡住。可通过查看滚动状态验证:
删除 Deployment
删除 Deployment 会同时删除其管理的 ReplicaSet 及所有关联的 Pods。
使用 Web 控制台管理 Deployment
查看 Deployment
可以查看 Deployment 以获取应用信息。
- 在 Container Platform,导航至 Workloads > Deployments。
- 找到要查看的 Deployment。
- 点击 Deployment 名称查看 详情、拓扑、日志、事件、监控 等信息。
更新 Deployment
- 在 Container Platform,导航至 Workloads > Deployments。
- 找到要更新的 Deployment。
- 在 Actions 下拉菜单中选择 Update,进入编辑 Deployment 页面。
删除 Deployment
- 在 Container Platform,导航至 Workloads > Deployments。
- 找到要删除的 Deployment。
- 在 Actions 下拉菜单中点击操作列的 Delete 按钮并确认。
使用 CLI 进行故障排查
当 Deployment 遇到问题时,以下是一些常用的排查方法。
查看 Deployment 状态
查看 ReplicaSet 状态
查看 Pod 状态
查看日志
进入 Pod 进行调试
检查健康检查配置
确保 livenessProbe 和 readinessProbe 配置正确,且应用的健康检查接口响应正常。探针失败排查
检查资源限制
确保容器资源请求和限制合理,避免因资源不足导致容器被杀死。
