Skip to content

Deployment 部署

本文介绍如何在 Kuboard 中创建、查看、伸缩、回滚和删除 Deployment(部署),以及调整镜像版本、重启、查看日志等常见操作。

Deployment 是 Kubernetes 内置的无状态应用控制器(apps/v1),它持续将实际副本数收敛到你期望的状态,适合运行可互相替换的 Web 服务、微服务等应用。

Deployment 与 StatefulSet 的选择

  • 应用是无状态的(任意副本可以互相替换)时,使用 Deployment;
  • 应用需要稳定网络标识稳定存储(如数据库、消息队列)时,使用 StatefulSet(有状态副本集)

Deployment 管理的容器组名称在每次更新后都会变化,不提供稳定的主机名,也不提供按序号绑定的持久化卷。

入口位置

登录 Kuboard 后,在左侧导航点击 工作负载 → 部署,进入列表页。列表页按名称空间展示集群中的全部 Deployment,支持按集群 / 名称空间筛选,也可以切换"搜索 / 树形导航"两种列表模式。

工作负载导航中还包含 有状态副本集、守护进程集(DaemonSet)、任务 / 定时任务容器组 等入口,操作方式与本页类似。

列表页

列表页以"异常负载优先"方式展示,并额外提供就绪 / 最新 / 可用三个副本数列:

说明
选择框勾选后可用于批量重启批量删除
集群 / 名称空间Deployment 所在位置
名称Deployment 名称,点击进入详情页
就绪就绪副本数 / 期望副本数 展示(如 3/3),颜色随健康状态变化
最新已更新到最新模板的副本数
可用可用的副本数
创建时间相对时间显示,可排序
操作单行操作按钮(日志/终端、编辑、YAML、删除)

就绪列的颜色规则:

条件颜色含义
就绪副本数 == 期望副本数绿色全部就绪
就绪副本数 == 0红色一个副本都未就绪
期望副本数 == 0黄色暂停状态
其余情况默认色部分就绪,正在收敛

表头操作

按钮说明
创建(+)在当前集群 / 名称空间创建 Deployment,见下文"创建 Deployment"
批量删除删除勾选的条目;分别统计"Kubernetes 集群中的条目"与"缓存中的条目",可分开处理
批量重启对勾选的 Deployment 批量执行重启(见"常见操作 - 重启"),无勾选时置灰

行内操作

按钮说明
日志/终端弹出容器组 / 容器选择框,可追踪日志下载日志、打开 bash / sh / cmd / powershell 终端、打开文件浏览器(需 pods/execpods/log 权限)
编辑进入编辑页(需 apps/deploymentsupdate 权限)
YAML以对话框查看 / 编辑该对象的 YAML(需 get 权限)
删除删除该 Deployment(需 delete 权限),删除确认时需输入对象名称并选择级联策略(见"删除与级联策略")

创建 Deployment

点击列表页右上角的 创建 按钮进入创建页。创建页表单分为三个页签:基本信息(名称、标签、注解)、部署策略(副本数、更新策略、历史版本数等,Deployment 专有,见下文)、容器组模板(容器组基本信息、容器、卷、容器组设置)。点击 保存 后,Kuboard 会先校验所有页签中的表单,再弹出 预览 YAML 对话框展示将要提交的完整对象,确认后提交到集群,并跳转到新对象的详情页。

基本信息

字段说明
名称必填,名称空间内不能重名
名称空间创建时所在名称空间,只读展示
标签键值对;输入名称时会自动写入 app=<名称> 标签,并随"标签同步"选项同步到选择器与容器组模板
注解键值对,可选

标签选择器变更需谨慎

选择器决定了哪些容器组被此 Deployment 管理,其编辑入口位于**"部署策略"页签顶部**的"标签选择器"区域(含"始终与标签保持一致""同步修改容器组模板标签"两个同步选项)。请勿随意修改,否则可能导致历史副本集与容器组脱离管理。

部署策略

该页签包含 Deployment 的核心控制字段(各字段默认值直接在表单输入框中显示,无需记忆):

字段说明
副本数期望副本数(最小 0),创建表单默认值为 1
更新策略版本更新时替换已有副本的策略,见下文"更新策略"
历史版本数保留历史副本集的数量,可用于回滚
最小就绪时间新建容器组就绪后在此指定时间内未出现故障,则视为可用(秒)
截止时间如果在此指定时间内未能完成所有容器组的处理,则被认为处理失败(秒)

更新策略(strategy)

选项说明
删除重建(Recreate)先删除全部旧容器组,再创建新容器组;适合不能同时存在新旧两套副本的场景
滚动更新(RollingUpdate)边创建新副本、边删除旧副本,保证更新期间始终有一定数量的副本可用;默认选项

选择 滚动更新 时,还需设置滚动更新参数:

字段说明
最大不可用副本数(maxUnavailable)更新过程中允许最多不可用的副本数(相对期望副本数),支持数字或百分比,如 25%1
最大超出副本数(maxSurge)更新过程中允许最多超出期望副本数的副本数,支持数字或百分比

若将策略切换为 删除重建,滚动更新参数会被清空;切回 滚动更新 时恢复默认值。

maxUnavailable 与 maxSurge 的语义

以副本数 3、两个参数均为 25% 为例:滚动更新期间,集群中总副本数保持在 3 ~ 4 之间,且最多允许 1 个副本不可用,从而在保证服务容量的前提下完成平滑升级。

容器组模板

容器组模板在容器组模板页签中配置,与 StatefulSet 等其他负载完全一致:

子页签说明
基本信息容器组注解、标签(建议保持与标签选择器一致)
容器工作容器与初始化容器:镜像、镜像拉取策略(Always / IfNotPresent / Never)、启动命令与参数、环境变量、资源请求与限制、端口、健康检查探针、生命周期钩子、安全上下文
容器组挂载的卷(PVC、ConfigMap、Secret、emptyDir 等类型)
容器组设置节点选择、亲和性、容忍、DNS 配置、hostNetwork、ServiceAccount 等高级设置

新增容器时需填写名称与镜像。保存前校验不通过时,会自动切换到对应页签并提示错误。

编辑 Deployment

在列表页或详情页点击 编辑 进入编辑页,同样使用"基本信息 / 部署策略 / 容器组模板"三个页签。与创建页的区别:名称只读展示,不可修改;页面顶部显示当前对象的 ResourceVersion(供与集群中的最新版本比对);保存时弹出 对比 YAML 对话框,左侧为当前集群中的原对象、右侧为修改后的对象,确认后提交。

只要修改了容器组模板(如镜像版本、环境变量、启动命令),Deployment 控制器就会创建一个新的副本集,并按更新策略滚动替换旧副本;旧副本集会保留"历史版本数"指定的数量用于回滚。

详情页

点击列表页中的 Deployment 名称进入详情页:页头左侧为元信息卡片(名称空间、UID、标签、注解等)、右侧为事件卡片(与该 Deployment 相关的最近事件,实时刷新);工具栏为操作按钮(见下文);主体左侧为历史版本时间轴(副本集列表)、右侧为选中副本集的容器组列表及选中容器组的详情;工具栏右侧还有修订历史入口,可加载当月及以前的修订记录,对比"当前版本 ↔ 历史版本"并恢复到历史版本。

详情页操作按钮

按钮说明
伸缩(− / 就绪数 / +)手动扩缩容,见下文"扩缩容"
调整镜像版本批量修改容器 / 初始化容器的镜像版本标签,见下文"常见操作"
重启以 Deployment 定义的更新策略执行重启
编辑进入编辑页(需 update 权限)
YAML以对话框查看 / 编辑该对象的 YAML(需 get 权限)
删除删除该 Deployment,见"删除与级联策略"
更多(下拉)CI/CD 集成及已安装扩展点注册的菜单项

历史版本(ReplicaSet)

详情页主体左侧为 Deployment 的历史版本时间轴(按创建时间倒序,新版本在上),顶部标题旁显示当前"最大历史版本数"。每个条目为一个副本集(ReplicaSet),显示名称、修订号 #N期望 / 当前 / 就绪 副本数与已创建时间;修订号与当前修订号一致的条目为当前版本(时间轴标记为绿色,其余为灰色);悬停条目可查看该副本集的镜像标签(工作容器与初始化容器的镜像)。

条目行底色规则:

条件颜色含义
副本数 == 0绿色该历史版本已缩容到 0(旧版本,无运行副本)
副本数 == 就绪副本数主色全部就绪(当前或新版本)
其余情况黄色部分就绪,正在收敛

选中某个历史版本后,其下方显示该副本集的事件,右侧的容器组区域显示该副本集对应的容器组。

历史版本条目的操作

按钮说明
删除删除该副本集(需 replicasetsdelete 权限)
YAML以只读对话框查看该副本集的 YAML
回滚仅对非当前版本的条目显示(需 update 权限);点击后弹出对比 YAML,将该副本集的容器组模板写回 Deployment,确认后提交并跳转回详情页,由控制器按更新策略再次滚动更新,产生一个新的修订版本

删除该副本集对应的所有容器组

容器组区域标题右侧提供 删除该副本集对应的所有容器组 按钮。点击确认后,Kuboard 删除该副本集匹配的全部容器组,控制器会立即按副本数重新创建,从而实现"批量重启该版本容器组"的效果。

容器组区域

容器组区域列出所选副本集管理的全部容器组,并随事件实时刷新。每个容器组卡片显示状态标签(Ready / Not Ready / Completed 等)、名称、创建时间、容器组 IP(C)、节点 IP(H);悬停后可对单个容器组执行删除查看 YAML;点击选中后,右侧显示该容器组的详细信息。

扩缩容

在列表页或详情页点击伸缩按钮(中间数字显示 就绪副本数 / 期望副本数,颜色随健康状态变化:红色异常、黄色收敛中、绿色就绪),弹出伸缩面板:

  • − / +:对当前副本数直接减 1 / 加 1(期望副本数为 0 时 − 按钮置灰);
  • 手动伸缩:输入目标副本数(最小 0),点击确定提交;
  • 副本数指标:期望副本数、就绪副本数,以及就绪率环形进度条;Deployment 额外显示不可用副本数
  • HPA 摘要:若该 Deployment 被 HorizontalPodAutoscaler(HPA)关联,同步展示 HPA 的伸缩目标与当前指标。

扩缩容不产生新的修订版本

修改副本数只调整当前副本集的副本数量,不会创建新的副本集 / 修订版本,也不触发滚动更新。

删除与级联策略

删除 Deployment 的入口有三个:列表页的行内 删除 按钮、勾选后的批量删除、详情页的删除按钮。删除时弹出全局删除确认对话框:

说明
请输入对象名称必须输入与对象名称完全一致的内容,防止误删
GracePeriod宽限期(秒),默认 0,即立即删除
波及策略(Propagation Policy)级联删除策略,可选 Foreground / Background / Orphan

波及策略的三种选项及含义:

选项含义
Background先删除目标对象,然后通过垃圾回收(GC)删除子对象
Foreground先删除所有子对象,然后再删除目标对象
Orphan删除目标对象并保留子对象

Deployment 级联删除的注意事项

  • 默认情况下,删除 Deployment 会级联删除其副本集,进而删除这些副本集的容器组;
  • 若选择 Orphan,副本集与容器组会被保留,但这些副本集将不再受 Deployment 控制器管理(不会再有滚动更新);
  • 批量删除时,Kuboard 会区分"Kubernetes 集群中的条目"与"缓存中的条目"(已从集群删除、仅剩缓存记录的条目),可分别处理。

常见操作

调整镜像版本

在详情页点击 调整镜像版本,弹出对话框列出该 Deployment 的全部工作容器初始化容器

说明
容器类型工作容器 / 初始化容器
名称容器名
镜像镜像仓库地址(不含版本标签)
当前版本当前镜像的版本标签
新版本输入新版本标签

修改一个或多个容器的版本标签后点击确定,即触发按更新策略定义的滚动更新。该操作需要 apps/deploymentsupdate 权限。

重启

重启不改动镜像,而是向容器组模板写入一个当前时间戳,使模板发生变化,从而触发控制器创建一个新的副本集并按更新策略滚动替换全部副本。列表页的批量重启与详情页的重启使用同一实现:单个对象重启时弹出确认对话框,并支持勾选"不再显示此提示"。

日志与终端

在列表页点击行内 日志/终端(详情页的容器组同样支持),弹出"请选择容器组/容器"对话框:左侧为容器组树形列表,展开后可看到该容器组的工作容器初始化容器(含状态、启动/结束时间、ExitCode、Reason)。选中容器后可以追踪日志下载日志,或打开 bash / sh / cmd / powershell 终端、文件浏览器查看容器文件系统(需 pods/logpods/exec 权限)。

CI/CD 集成

在详情页点击 更多 → CI/CD 集成,选择 AccessKey(可在对话框内创建或跳转 个人中心 → 密钥 管理)后,可获得更新镜像版本的脚本(将该 Deployment 的所有容器镜像更新到指定标签)与重启 Deployment 的脚本

脚本以 curl 形式给出(Kb-Access-Key 头部携带 AccessKey 的 key 与 secret),可在 CI/CD 流水线中直接使用:

sh
curl -X POST \
  -H "content-type: application/json" \
  -H "Kb-Access-Key: <key>.<secret>" \
  -d '{"cluster":"<clusterId>","kind":"deployments","namespace":"default","name":"web","images":{"nginx":"nginx:1.27"}}' \
  "https://<kuboard-host>/api/cd.kuboard.cn/v4/update-image-tag"

相关页面