You need to enable JavaScript to run this app.
导航

使用持续交付实现 Kubernetes 部署

最近更新时间2024.01.22 17:06:35

首次发布时间2021.12.17 17:53:48

持续交付搭配火山引擎容器服务、火山引擎镜像仓库,可完成容器化持续交付一站式体验。本文为您介绍如何通过持续交付的流水线实现容器服务 Kubernetes 部署。

概述

当开发者在代码仓库提交变更后,持续交付将通过 Webhook 监听代码库的变动,发生符合条件的代码变更行为时,持续交付将自动触发一系列已配置在流水线中的任务,包括单元测试、镜像构建、镜像部署等,帮助开发者实现自动化部署。

当前持续交付提供以下三种任务,支持用户对火山引擎容器服务的 Kubernetes 集群进行部署。您可以根据实际情况选择需要的部署方式。

  • Kubernetes 镜像升级:支持用户对集群中的已有应用进行镜像升级,支持 Deployment、StatefulSet、DaemonSet、CronJob 应用类型。
  • Kubernetes 滚动发布:在镜像升级任务的基础上配置部署策略,支持用户对 Kubernetes 集群上的应用进行按实例分批滚动发布,保证滚动发布过程更加可控。仅支持 Deployment 应用类型。
  • kubectl 发布:支持用户基于 YAML 资源描述文件创建 Kubernetes 发布任务,将代码仓库中的 YAML 文件或自定义 YAML 文件部署到 Kubernetes 集群。

Kubernetes 镜像升级

持续交付支持使用镜像构建推送至镜像仓库服务的产出物作为 Kubernetes 镜像升级使用的镜像。本文通过使用镜像构建推送至镜像仓库服务和 Kubernetes 镜像升级任务,完成对火山引擎容器服务 Kubernetes 集群中应用的部署。

注意事项

编译构建 任务中的 编译命令 需要根据具体业务代码进行调整,错误的路径信息可能导致流水线运行失败。

前提条件

  • 容器服务

    • 已开通火山引擎容器服务。
    • 已创建容器服务集群,具体操作请参见 创建集群
    • 已创建无状态工作负载 Deployment,具体操作请参见 创建无状态负载。并记录该 Deployment 的名称、所属的命名空间、对应的 Container 名称,用于后续配置 Kubernetes 镜像升级任务。
  • 镜像仓库

  • 持续交付

操作步骤

  1. 登录 持续交付控制台

  2. 在左侧导航栏选择 工作区,进入 工作区 页面。

  3. 选择目标工作区名称,进入该工作区。

  4. 单击 创建流水线,弹出 选择流水线模板 对话框。

  5. 选择构建镜像的流水线模板。完成后单击 确定,进入 编辑流水线 页面。

    1. 编程语言:选择构建镜像的编程语言,当前支持 Go、Java、Node.js 及 Python。
    2. 流水线模板:选择镜像构建推送至镜像仓库服务,例如 Go-镜像构建推送至镜像仓库服务。
  6. 配置代码源。
    a. 单击输入源位置,弹出 配置代码源 对话框。
    b. 按要求填写以下参数。

    配置项说明
    类型选择代码仓库类型。根据准备工作中创建的代码源类型选择。
    代码源配置该流水线的代码源。选择准备工作中创建的代码源。
    默认分支默认分支为流水线运行时默认选用的代码仓库分支。支持选择或手动输入。
    Webhook 设置Webhook 设置用于启用代码源触发规则,具体操作请参见 代码源触发 。本示例不启用。

    c. 单击 确定,完成代码源配置。

  7. 配置镜像构建推送至镜像仓库服务。
    a. 配置编译构建步骤。alt

    配置项说明
    步骤名称默认为编译构建,支持自定义步骤名称。

    语言

    选择编译构建使用的语言。
    目前支持 Go、Java、Python、Node.js。

    版本选择编译构建使用的语言版本,不同语言提供不同的预置版本。
    编译命令输入编译命令。命令框中为默认的编译命令,请根据实际业务自行调整。

    b. 配置镜像打包推送至镜像仓库服务。alt

    配置项说明
    步骤名称默认为镜像打包推送至镜像仓库服务,支持自定义步骤名称。
    地域选择要推送的镜像仓库所在的地域。
    仓库实例选择准备工作中已创建的目标仓库实例。
    命名空间选择准备工作中已创建的目标命名空间。
    OCI制品仓库配置要推送的 OCI 制品仓库。如果 OCI 制品仓库不存在,系统将自动创建。

    镜像版本

    自定义镜像版本号。本示例使用${DATETIME}

    • 支持输入固定值,如 v1.0。
    • 支持使用自定义环境变量 ${变量名}动态设置版本号。
    • 支持使用系统预置环境变量时间戳 ${DATETIME}实现版本号动态变化。
      上述三类支持组合使用,如 test-${变量名}${变量名}_${DATETIME}
    contextpathdocker build 命令执行上下文路径。填写相对于代码根目录的路径,默认为.
    多框架构建如果您希望构建 linux/arm64 架构的镜像,或者希望同时构建 linux/arm64 和 linux/amd64 两种架构的镜像,请勾选多框架构建功能的启用框。本示例不启用多框架构建功能,默认构建 linux/amd64 架构的镜像。
    Dockerfile选择文件路径,填写 Dockerfile 文件相对于代码库根目录所在路径,默认为./Dockerfile
    产出物该步骤的产出物为镜像,默认名称为 DockerOutput,支持自定义命名。
    产出物可用于后续部署任务。
  8. 单击➕,新增阶段。

  9. 在新增的阶段单击 添加任务,选择 Kubernetes 镜像升级 任务。

  10. 配置 Kubernetes 镜像升级任务。alt

    配置项说明
    步骤名称默认为 Kubernetes 镜像升级,支持自定义步骤名称。
    部署资源选择准备工作中接入的容器服务集群。
    命名空间选择准备工作中记录的命名空间。
    应用类型选择 Deployment 及准备工作中记录的 Deployment 名称。
    容器名称选择准备工作中记录的 Container 名称。
    镜像选择上游产物,选择前序镜像构建推送至镜像仓库服务的产出物。
    超时时间设置自动超时时间。任务运行时长超过该时间,则判断部署失败,系统自动触发回滚操作,回滚到升级前版本。本示例保持默认配置 300 s。
  11. 其余页签保持默认配置,单击页面右下角 保存,完成创建流水线。

  12. 运行流水线。

    1. 在流水线列表页面,选择目标流水线,单击 操作 列的 运行 按钮,弹出 运行流水线 对话框。
    2. 按要求填写以下参数。
    配置项说明
    代码源显示该条流水线使用的代码源。
    目标选择流水线拉取代码的方式,支持按照分支、Tag、Commit ID 三种方式拉取代码。此处使用创建流水线时设置的默认分支。
    运行说明添加本次运行的备注信息,可以为空。
    1. 单击 确定,流水线开始运行,系统跳转至该流水线 最近运行详情 页面。

检查结果

Kubernetes 镜像升级成功,所有新版本实例均处于 Running 状态。
alt
您也可以登录容器服务控制台查看已升级的镜像。
alt

Kubernetes 滚动发布

在镜像升级的基础上额外配置以下部署策略,可实现按实例分批滚动发布,保证滚动发布过程更加可控。

  • 滚动批次:设置分批发布策略的批次。每个批次发布完成后流程进入等待状态,需人工确认是否继续部署。
  • 每批比例:设置每批发布的比例。最后一个批次比例由前序批次调整后自动算出,不允许修改。比例之和必须为 100%。
    实例数量 * 每批比例 = 一次升级的数量,若不为整数向下取整,多余的实例最后一批升级完成。
    例如: 10 个实例分 3 批部署,批次比例为 30%、30%、40%,则每批部署数量为 3、3、4。
  • 等待时间:设置用于人工确认的最大等待时间。若超过等待时间仍未人工确认继续部署还是回滚,则判断部署失败,系统自动触发回滚操作,回滚到升级前版本。

注意事项

  • 编译构建 任务中的 编译命令 需要根据具体业务代码进行调整,错误的路径信息可能导致流水线运行失败。
  • 滚动发布任务到达分批暂停时,请及时确认是否继续部署。若超过等待时间仍未人工确认,则判断部署失败,系统自动触发回滚操作,回滚到升级前版本。

前提条件

参见 Kubernetes 镜像升级前提条件

操作步骤

Kubernetes 滚动发布和 Kubernetes 镜像升级的操作方法类似,仅需将流水线中的 Kubernetes 镜像升级 任务替换为 Kubernetes 滚动发布 任务。配置 Kubernetes 滚动发布 任务之前的操作方法参见 Kubernetes 镜像升级

  1. 配置 Kubernetes 滚动发布 任务。alt

    配置项说明
    步骤名称默认为 Kubernetes 滚动发布,支持自定义步骤名称。
    部署资源选择准备工作中接入的容器服务集群。
    命名空间选择准备工作中记录的命名空间。

    服务名称

    选择或输入 Kubernetes 滚动发布的目标 Service。
    Service 用于在滚动发布中关联多个应用版本,保证整个发布过程平滑可靠,服务不中断,用户无感知。

    应用类型选择 Deployment,并设置 Service 关联的 Deployment 名称。
    容器名称选择或输入待部署的具体 Container 名称,确保 Pod 中存在多个 Container 时应该升级对应的镜像。
    镜像选择上游产物,选择前序镜像构建推送至镜像仓库服务的产出物。

    部署策略

    • 滚动批次:设置分批发布策略的批次。本示例设置为 3 次。
    • 每批比例:设置每批发布的比例。本示例设置为 30%、30%、40%。
    • 等待时间:设置最大等待时间。超过等待时间未人工确认,则判断部署失败,系统自动触发回滚操作,回滚到升级前版本。本示例保持默认配置 300 s。
  2. 其余页签保持默认配置,单击页面右下角 保存,完成创建流水线。

  3. 运行流水线。

    1. 在流水线列表页面,选择目标流水线,单击 操作 列的 运行 按钮,弹出 运行流水线 对话框。
    2. 按要求填写以下参数。
    配置项说明
    代码源显示该条流水线使用的代码源。
    目标选择流水线拉取代码的方式,支持按照分支、Tag、Commit ID 三种方式拉取代码。此处使用创建流水线时设置的默认分支。
    运行说明添加本次运行的备注信息,可以为空。
    1. 单击 确定,流水线开始运行,系统跳转至该流水线 最近运行详情 页面。
  4. 流水线运行到 Kubernetes 滚动发布任务时,每个批次发布完成后,流水线将进入暂停状态,页面展示 立即部署立即回滚 按钮。手动确认继续部署后,触发下一批次的发布,直至所有批次都发布完成。
    alt

检查结果

Kubernetes 滚动发布成功,所有新版本实例均处于 Running 状态。
alt
您也可以登录容器服务控制台查看已升级的镜像。
alt

kubectl 发布

持续交付支持用户基于 YAML 资源描述文件创建 Kubernetes 发布任务,将代码仓库中的 YAML 文件或自定义 YAML 文件部署到 Kubernetes 集群中。本文介绍如何将代码仓库中的 YAML 文件部署至容器服务 Kubernetes 集群。

注意事项

使用文件路径时,需要配置 YAML 文件在代码仓库根目录的相对路径。

前提条件

  • 容器服务
    • 已开通火山引擎容器服务。
    • 已创建容器服务集群。具体操作请参见 创建集群
  • 持续交付
    • 已创建工作区,详细操作请参见 创建工作区
    • 已创建代码源,详细操作请参见 创建代码源
    • 已接入待部署的容器服务集群,详细操作请参见 接入部署资源
    • 已编写所需部署的 Kubernetes 资源对应的 YAML 文件,例如 Deployment、Service、Ingress 等。本示例使用的 YAML 文件部署的 Kubernetes 资源为 Namespace 和 Deployment。

操作步骤

  1. 登录 持续交付控制台

  2. 在左侧导航栏选择 工作区,进入 工作区 页面。

  3. 选择目标工作区名称,进入该工作区。

  4. 单击 创建流水线,弹出 选择流水线模板 对话框。

  5. 选择构建镜像的流水线模板。选择空白模板,单击 确定,进入 编辑流水线 页面。

  6. 配置代码源。
    a. 单击输入源位置,弹出 配置代码源 对话框。
    b. 按要求填写以下参数。

    配置项说明
    类型选择代码仓库类型。根据准备工作中创建的代码源类型选择。
    代码源配置该流水线的代码源。选择准备工作中创建的代码源。
    默认分支默认分支为流水线运行时默认选用的代码仓库分支。支持选择或手动输入。
    Webhook 设置Webhook 设置用于启用代码源触发规则,具体操作请参见 代码源触发 。本示例不启用。

    c. 单击 确定,完成代码源配置。

  7. 单击➕,新增阶段。

  8. 在新增的阶段单击 添加任务,选择 kubectl 发布 任务。

  9. 配置 kubectl 发布任务。alt

    配置项说明
    步骤名称默认为 kubectl 发布,支持自定义步骤名称。
    部署资源选择准备工作中接入的容器服务集群。
    YAML 文件选择文件路径,填写需要部署的 YAML 文件在源码中的相对路径,本示例为./namespace_deployment.yaml
    镜像引用支持设置变量名供自定义 YAML 文件引用上游产物生成的镜像。本示例不使用。
  10. 其余页签保持默认配置,单击页面右下角 保存,完成创建流水线。

  11. 运行流水线。

    1. 在流水线列表页面,选择目标流水线,单击 操作 列的 运行 按钮,弹出 运行流水线 对话框。
    2. 按要求填写以下参数。
    配置项说明
    代码源显示该条流水线使用的代码源。
    目标选择流水线拉取代码的方式,支持按照分支、Tag、Commit ID 三种方式拉取代码。此处使用创建流水线时设置的默认分支。
    运行说明添加本次运行的备注信息,可以为空。
    1. 单击 确定,流水线开始运行,系统跳转至该流水线 最近运行详情 页面。

检查结果

kubectl 发布成功,可查看对应运行日志获取部署信息。
alt
您也可以登录容器服务控制台检查部署完成的 Namespace 和 Deployment。
alt