本文主要介绍 Kubernetes 环境部署运维,支持滚动升级、分批发布部署策略,支持环境部署、扩缩容、回滚等操作。
1. 部署原理
云效 AppStack 应用环境 K8s 部署运维操作采用 fabric8io kubernetes client 更新资源对象,支持 JSON Patch(覆盖更新)和 JSON Merge Patch(合并更新)两种策略,企业可按需配置使用。企业统一配置,对本企业下所有 AppStack 应用环境生效,生效时机为环境部署单创建时(部署单一旦创建,策略不会再随企业配置变化)。
以下以一个简单示例说明两种策略的区别。
假设 K8s 集群上已有资源 YAML 描述如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
metadata:
labels:
app: myapp
msePilotCreateAppName: myapp
spec:
containers:
- name: main
image: nginx
下一次部署 YAML 如下,差异在于去除了
msePilotCreateAppName: myapp
相关labels:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
metadata:
labels:
app: myapp
# 去除了 msePilotCreateAppName 相关 label
spec:
containers:
- name: main
image: nginx
若采用 JSON Patch(覆盖更新)策略部署,部署结束后集群资源不会保留
msePilotCreateAppName: myapp
属性,与下发 YAML 保持一致,完全覆盖更新。若采用 JSON Merge Patch(合并更新)策略部署,部署结束后集群资源仍然会保留msePilotCreateAppName: myapp
属性,不会覆盖已有属性,仅做合并追加。更多原理参考:Use a JSON merge patch to update a Deployment 。
2. 部署策略
云效AppStack Kubernetes环境部署支持分批发布、滚动升级策略,支持设置批次数量之间暂停策略、部署超时时间等。进入应用,选择
,可以按需设置部署策略。AppStack提供「托管复本数」和「非托管复本数」两种部署策略:
托管复本数:针对环境下Deployment工作负载,「托管复本数」策略云效AppStack将对Deployment replicas进行强管控,部署策略中指定的「目标实例数」为准进行 patch下发,支持通过环境扩缩容操作调整复本数。该策略下请避免通过其他工具或平台操作资源,以免环境基线不一致导致部署失败。
非托管复本数:针对环境下Deployment工作负载,「非托管复本数」策略云效AppStack将使用应用编排+环境变量组渲染后的YAML直接下发部署, 以渲染后的 YAML中的replicas为准,不做复本数强管控。HPA等弹性水位场景建议使用该策略。
2.1 「托管复本数」策略
AppStack环境部署「托管复本数」策略,对本应用、本环境下的Deployment资源生效:
目标实例数:期望的Deployment replicas复本数,请填写正整数。指定目标实例数后,会使用该数量patch到部署YAML中(以该数量替换YAML中的replicas值),以指定的目标实例数下发部署。后续可以通过环境上的扩缩容操作调整复本数。
部署策略:
滚动升级:以K8s原生滚动方式部署,逐步更新应用Pod实例,直到新版本数量达到指定的目标实例数。
分批发布:
分批数量:发布的分批数,请填写正整数(需要小于等于目标实例数)。
分批详情:每批次的更新的Pod数量,各批次数量相加之和等于目标实例数。
暂停策略:
不暂停:不暂停,每批次自动开始;上一批次结束,下一批次自动执行。
首批暂停:第 1 批部署结束后暂停,需要手动单击「继续」触发第 2 批;第 3 及后续批次自动执行(如有)。
每批暂停:第 1 批部署结束后暂停,后续每一批次都需要手动单击「继续」触发。
超时时间:每批次超时时间,单位分钟,支持 1-30 的正整数。
以下示例,目标实例数 3,分 2 批,第一批 1 个复本,第二批 2 个复本,单批次超时时间 10 分钟。可以按批次查看部署进度。
以下示例,目标实例数 3,滚动升级,逐步更新应用Pod实例。
2.2 「非托管复本数」策略
AppStack环境部署「非托管复本数」策略,对本应用、本环境下的Deployment资源生效:
部署策略:
滚动升级:以K8s原生滚动方式部署,逐步更新应用Pod实例。
分批发布:支持按比例分批发布。
分批数量:发布的分批数,请填写正整数。
分批详情:每批次的更新的Pod数量比例,各批次比例相加之和需要等于100%。
暂停策略:
不暂停:不暂停,每批次自动开始;上一批次结束,下一批次自动执行。
首批暂停:第 1 批部署结束后暂停,需要手动单击「继续」触发第 2 批;第 3 及后续批次自动执行(如涉及)。
每批暂停:第 1 批部署结束后暂停,后续每一批次都需要手动单击「继续」触发。
超时时间:每批次超时时间,单位分钟,支持 1-30 的正整数。
若部署编排YAML中指定了replicas: n,则按策略逐步更新新版本Pod数量达到n。
若部署编排YAML中未指定replicas,且K8s集群上已存在该Deployment,且集群上复本数为m,则按策略逐步更新新版本Pod数量达到m。
3. 部署运维操作
3.1 部署
应用环境部署通常用于应用制品或配置变更时去更新环境服务。
提交部署单
进入目标
,在环境列表找到目标环境卡片,单击部署 或进入目标环境详情页面,单击右上角操作区域的部署。填写部署内容。
部署单名称:部署单名称,默认填充:${秒级时间戳}-部署,可按需修改。
部署版本号:部署版本号,自动生成:${秒级时间戳}-${三位毫秒},不可修改。
镜像列表:镜像由Kubernetes部署编排里定义的镜像占位符决定,可直接输入镜像地址(请确保待部署到的K8s集群可直接拉取到镜像)。
自定义参数:自定义参数由Kubernetes部署编排定义,当占位符 部署时可改 开关打开时,可以在提交部署单时动态修改取值。
确认部署选项。
展示当前环境待部署的所有服务以及镜像列表,单击YAML可以查看各个组件的部署配置。
特别的是,针对Deployment工作负载类型的组件,可以直接单击调整部署策略进行设置,详见 2. 部署策略。
单击 提交 部署单,生成部署工单,跳转部署详情页面。
观测部署过程
上述提交部署单后,跳转部署单详情页面,可以观测部署进度。也可以从 应用-部署单 列表页面,找到目标部署单,单击进入工单详情观测进度。
部署工单概要:展示 部署单名称、部署单ID、组件类型、提交人、提交时间、结束时间等基本信息。
环境部署流程:按顺序展示当前环境部署的所有组件,部署内容和部署顺序由应用编排决定(云效AppStack当前按照helm chart默认顺序执行),单击卡片可以查看具体资源的部署详情。
资源部署详情:展示指定资源的部署详情。
非工作负载
展示 资源名、部署版本、部署配置、以及其他资源类型相关信息。
工作负载(当前仅支持Deployment)
基本信息展示 资源名、制品、目标实例数、部署策略、部署配置等。
部署进度可以按批次展示实例部署状态,单击实例块可以查看Pod更多 基本信息 和 关键事件,还可以查看容器日志等。
暂停/继续
部署过程中,可以单击 暂停 当前任务,可用于异常情况下暂停任务观察服务状态。
已手动暂停的任务或者受暂停策略控制暂停的任务,可以单击 继续 执行任务。
终止
部署过程中,可以手动 终止 当前部署任务,可选 置为成功 或 置为失败 。可用于一些不需要继续部署的特殊场景:如SRE通过手动管理集群,已部署应用服务到目标版本,无需工单继续处理的情况。
回退
部署过程中,可以单击 回退 ,回退当前环境到上次部署状态。单击 回退 后,当前部署任务将取消,并生成新的回退任务,回退任务将使用环境的最近的部署基线进行一次重新部署。 可用于当前部署版本不符合预期,需要快速恢复环境到上次可用状态的场景。
查看执行日志
单击 执行日志 可以查看工单部署的全部详细日志,可以用于问题追溯和排查。
3.2 扩缩容
环境扩缩容通常用于环境工作负载过高或过低时,动态调整环境对外提供服务实例数。仅「托管复本数」策略支持在环境上提交扩缩容;「非托管复本数」策略请通过调整 YAML中的replicas调整复本数。
提交扩缩单
进入应用-环境 ,进入目标环境详情页面,单击右上角操作区域的 扩缩 按钮。
填写扩缩单参数
工单名称:默认填充:${秒级时间戳}-部署,可按需修改。
版本号:展示当前环境最近一次部署的版本号。
组件信息:展示当前环境待扩缩的工作负载组件信息。
镜像列表:环境最近一次部署的镜像,只读不可改。
目标实例数:本次扩缩操作期望达到的环境目标实例数。
部署策略:指定扩缩容策略,可选滚动升级和分批发布。
滚动升级:以 K8s 原生滚动方式扩缩,逐步新增或缩减 Pod 实例。
分批发布:
分批数量:根据待扩容/缩容的实例数(增量),划分合适的分批数,以及每批扩/缩数量。
分批详情:根据待扩容/缩容的实例数、分批数,划分每批扩/缩实例数量。
暂停策略 :针对待扩缩的批次可选暂停策略,支持 不暂停、首批暂停、每批暂停 三种策略。
超时时间:每批次超时时间,单位分钟,支持 1-30 的正整数。
单击 提交 ,生成扩缩容工单,跳转工单详情页面。
观测扩缩过程
扩缩单详情页,针对环境下的工作负载进行实例数扩缩容,可以查看实例扩缩进度。
如果环境部署策略为分批发布,则环境扩缩容成功后会自动调整分批详情,调整批次数以及每批次数量,以适应下一次环境部署。
3.3 回滚
回滚可一次性将环境快速恢复到目标版本,适用于新版本发布后不符合预期,需要回滚到最近可用版本场景。回滚相当于使用历史版本进行一次重新部署,请谨慎操作!
提交回滚单
进入
,在版本列表找到目标部署的版本,单击回滚提交回滚工单;或者进入目标环境详情,单击右上角操作区域回滚提交回滚工单。填写回滚单参数。
部署单名称:默认填充:${秒级时间戳}-回滚。
回滚版本:选择待回滚到的部署版本。
组件信息:展示目标回滚版本下环境待回滚的组件服务,其中工作负载类型展示待回滚的 Service 、Deployment、目标实例数, 您也可按实际情况调整部署策略,指定分批数和暂停策略。 请仔细核对待回滚的组件信息是否符合预期。
单击 提交 ,生成回滚工单,跳转工单详情页面。
观测回滚过程
回滚进度显示上一个版本和当前部署的目标版本,目标版本会把当前环境版本回滚到上一个历史版本。
3.4 环境删除
通常适用于开发、测试等线下环境联调测试完毕后,不再使用了,可以使用删除环境功能释放资源。