Kubernetes 部署编排

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

选择部署方式

云效 AppStack 应用编排支持 Kubernetes 部署(适用于云原生部署场景)、支持主机部署(适用于传统主机部署场景)、也支持 Kubernetes 和主机混合部署场景(适用于应用由传统主机部署向云原生转型场景)。进入 应用设置 > 应用编排 > 编排内容,选择 Kubernetes 部署 方式。

image

创建 Kubernetes 部署编排

  • 应用设置 > 应用编排 > 编排内容 > Kubernetes 部署处,点击 从模板开始 ,选择企业自定义应用编排模板(详见全局设置 应用编排模板 )或者云效示例模板。 一个应用通常包含 Kubernetes 的工作负载、网络、配置、存储等资源类型。

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

  • 在应用编排编辑页面,可以对编排内容再次修改。

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

    • 可以修改组件 YAML 具体内容

    • 可以添加/删除组件

    • 可以修改 镜像,可以修改 占位符

image

使用占位符和变量

云效 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 赋值给 containerPort。

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 语法可以灵活编排你的应用,以下为两个常用场景示例。

示例场景1:使用 if 差异化配置 YAML 区块

使用if关键字为生产环境增加更多附加标识。

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

image..png

示例场景2:使用 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 }}

image

labels 变量取值如 {"key1":"value1","key2":"value2"} ,环境部署时,最终渲染 YAML 如下。

image

添加组件

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

  1. 点击 + 号,添加组件。

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

  3. 选择组件模板,云效 AppStack 提供 Deployment、ConfigMap、Service、Secret、Ingress、PVC 这六种资源组件模板。也可以选择空模板,自定义编排内容。

点击 确定,编排中会增加新组件,并预填充对应类型的 YAML 文件模板内容,应用按需修改即可。

image

设置组件部署顺序

Kubernetes 应用编排支持设置组件部署顺序,支持以拖拉拽的方式自定义调整顺序。部署顺序为应用环境部署、回滚时的组件资源下发顺序,组件支持串行部署、并行部署。环境删除时将按部署逆序删除组件资源。

image

删除组件

  • 点击组件 tab 选中,点击 tab 页上的叉号,保存后即可将组件删除。

编辑组件

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

暂存/保存编排

  • AppStack 每隔数秒会自动暂存编排的修改,也可以点击 暂存 按钮主动进行暂存,暂存并不会真正生效,只是记录一个编排修订版本。

  • 点击 保存 按钮,记录编排修订版本,注意️:编排文件的更新并不会立即生效到应用环境,环境需要在下一次部署后生效新版本的应用编排。