Kubernetes 部署编排

本文主要介绍云效 AppStack 应用 Kubernetes 部署编排操作方法。

创建 Kubernetes 部署编排

基于K8s集群的容器化部署方式,使用YAML定义应用部署架构,支持多种K8s资源类型。

  1. 设置 > 编排配置 > Kubernetes 部署,单击 从模板开始高的 - 2024-12-19T162118.648.png

  2. 选择应用编排模板组织自定义模板 > 添加模板(详见全局设置 应用编排模板 )或者云效示例模板高的 - 2024-12-19T112651.197.png

  3. 单击 确定 后,所选模板实例化为当前应用的编排内容(模板仅用于初始化,修改模板不会影响已有应用),进入编排编辑页面。

    在应用编排编辑页面,您可以对编排内容进行以下修改:

    • 修改 编排组件 名称或描述。

    • 修改组件 YAML 具体内容。

    • 添加/删除组件。

    • 修改 镜像占位符。

使用占位符和变量

云效 AppStack 应用编排支持使用占位符 {{ }}和变量实现一套编排多环境差异化部署,实现变量部署时动态注入。

制品占位符

支持定义制品占位符{{ .AppStack.image.xxx}}{{ .AppStack.artifact.xxx }},在部署单时动态输入镜像/制品包,或者在流水线部署阶段自动注入上游构建阶段产出的制品。

自定义占位符

以添加 port 自定义占位符实现多环境不同端口启动服务为例:

  1. 修改YAML内容,在 YAML 编辑区域敲击 {{ .Values.port }} ,定义占位符。

  2. 单击 提取占位符

  3. 占位符列表中将出现新增的 port 占位符。

  4. 在开发和测试环境变量组里分别添加 port 变量,取值为 8080 和 8081。

  5. 在占位符列表中,将 port 占位符的取值来源设置为变量,并选择 port。

单击 保存,编排校验通过后,即完成了 K8s 编排在不同环境不同端口启动服务的配置。开发环境部署时,将 8080 赋值给 containerPort;测试环境部署时,将 8081 赋值给 containerPor。

image

预置占位符

AppStack 提供预置占位符,简化应用编排配置。

占位符命名空间

名称

数据类型

类型

预填值

使用说明

AppStack

appName

字符串

变量

${APPSTACK_APP_NAME}

AppStack 预置占位符,值为当前应用名

AppStack

envName

字符串

变量

${APPSTACK_ENV_NAME}

AppStack 预置占位符,值为当前环境名称

AppStack

image

对象

常量

--

AppStack 预置占位符,用于定义镜像,

{{ .AppStack.image.xxx }} 定义镜像为 xxx

AppStack

artifact

对象

变量

--

AppStack 预置占位符,用于定义制品,

{{ .AppStack.artifact.xxx }} 定义制品包为 xxx

应用编排示例场景

使用Go template语法灵活编排

云效AppStack应用编排支持Go template语法,使用Go template语法可以灵活编排你的应用,以下为两个常用场景示例。

  • 使用 if 差异化配置 YAML 区块,if关键字为生产环境增加附加标识。

    ......
    template:
        metadata:
          labels:
            run: app-demo
            # 使用 if 差异化配置
            {{- if eq .AppStack.envName "production" }}
            msePilotAutoEnable: "on"
            msePilotCreateAppName: "app-demo"
            {{- end}}
        spec:
          containers:
          ......

    高的 - 2024-12-19T110146.342.png

  • 使用 range 遍历对象循环配置,range关键字遍历对象,循环配置。

    metadata:
      name: spring-boot-{{ .AppStack.envName }}
      labels:
        run: spring-boot-{{ .AppStack.envName }}
        # 使用 range 遍历标签对象配置 labels
        {{ range $key,$value := .Values.labels }}
        {{ $key }}: {{ $value }}
        {{ end }}
      namespace: {{ .Values.namespace }}

    高的 - 2024-12-19T110451.326.png

    labels 变量取值如 {"key1":"value1","key2":"value2"} ,环境部署时,最终渲染 YAML 如下。高的 - 2024-12-19T110650.405.png

编辑应用编排

添加组件

Kubernetes应用编排通常对应一到多个组件,可以按需添加多个不同类型的资源服务组件。

  1. 在编排组件区域,单击新建顺序 > 添加组件

  2. 填写组件名称(组件唯一标识)和描述。

  3. 选择组件模板,云效 AppStack 提供使用的Kubernetes资源组件类型的YAML模板如下:

    组件模板

    描述

    Deployment

    Deployment (无状态应用)。

    ConfigMap

    ConfigMap (非机密配置数据)。

    Service

    Service (服务访问策略)。

    Secret

    Secret(机密配置数据) 。

    Ingress

    Ingress(从集群外部到集群内服务的HTTP/HTTPS路由规则)。

    PVC

    PVC(持久卷存储声明)。

    空模板

    支持任意kubernetes内置资源类型,也支持CRD。

    您也可以选择空模板,自定义编排内容。

    image

设置组件部署顺序

Kubernetes应用编排支持通过拖拉拽自定义调整组件部署顺序。部署顺序决定了应用环境部署、回滚时的组件资源下发顺序,支持串行和并行部署。环境删除时将按部署逆序删除组件资源。

image

删除组件

选中组件tab,单击叉号并保存即可删除组件。

编辑组件

选中组件tab,单击设置组件图标,打开弹窗修改组件名称和描述。

暂存/保存编排

  • AppStack每隔数秒会自动暂存编排的修改,您也可以单击暂存按钮手动暂存,暂存只是记录一个编排修订版本,不会立即生效。

  • 单击保存按钮记录编排修订版本,注意️:编排文件的更新需要在下一次部署后才会生效。