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

有状态负载

最近更新时间2024.01.19 14:39:12

首次发布时间2023.10.30 15:47:56

在运行中会保存数据或状态的工作负载称为有状态负载 ,对应 Kubernetes 中的 StatefulSet。例如:MySQL 在运行中会保存产生的数据。本文为您介绍如何在主控实例中创建有状态负载并实现多集群分发。

创建有状态负载

前提条件

操作步骤

  1. 登录 分布式云原生控制台
  2. 在左侧导航栏选择 联邦主控实例,进入主控实例管理页面。
  3. 在主控实例列表,单击目标主控实例名称,进入主控实例配置页面。
  4. 在左侧导航栏选择 工作负载 > 有状态负载,进入有状态负载管理页面。
  5. 单击 创建有状态负载,根据引导提示配置参数,所有参数配置完成后,即可开始创建有状态负载并实现多集群分发。
  • 配置有状态负载相关基本信息,完成后单击 下一步:容器配置

alt

配置项说明
名称自定义有状态负载的名称。要求在同一个命名空间下,名称必须唯一。
命名空间选择有状态负载部署的命名空间,支持选择自定义创建的命名空间或 Kubernetes 自建的命名空间。
实例个数输入有状态负载的 Pod 实例个数。
标签单击 添加标签,自定义配置有状态负载的标签。对应 Kubernetes 中的 Label,用于识别有状态负载的键值对,配合选择器,帮助 Kubernetes 快速筛选目标有状态负载。例如service.istio.io/canonical-revision:latest
注解单击 添加注解,自定义配置有状态负载的注解信息。对应 Kubernetes 中的 Annotation,主要记录用于应用部署、安全策略、调度策略的附加信息,不用于标识和区分资源。
  • 配置容器相关信息,完成后单击 下一步:高级配置

alt

配置项说明
容器名称根据系统提示的命名规则,输入容器名称。同一个工作负载下容器名称必须唯一。

容器镜像

容器使用的镜像。支持使用第三方镜像和镜像仓库 CR 中的镜像:

  • 第三方镜像:直接输入第三方镜像仓库地址(包括镜像 Tag),例如:example.com/namespace/repository:v1

  • 镜像仓库 CR 中的镜像:单击 选择镜像,从右侧弹出的面板中选择目标镜像仓库实例下的镜像。

    • 若需要使用 CR 中的私有镜像,请先安装 cr-credential-controller 免密组件。详细操作参见:使用免密组件拉取私有镜像创建工作负载
    • 若不使用 cr-credential-controller 免密组件拉取私有镜像,则需要配置 镜像密钥
    • 使用 CR 标准版实例中的镜像时,若您的标准版实例未配置当前集群所在 VPC 的访问控制权限,需要根据系统提示配置。详细操作参见:镜像安全

镜像版本

选择镜像的版本,不选择则默认拉取latest版本。

  • 如果镜像不存在latest版本,此处必须填写或选择镜像版本。
  • 使用第三方镜像时,无需配置该参数。

镜像密钥

默认关闭。开启后需要配置镜像仓库密钥。选择已有的仓库密钥或单击 创建仓库密钥,按如下说明补充镜像仓库的密钥:

  • 名称:容器使用的镜像的仓库名称。以使用镜像仓库 CR 中的镜像为例,则此处填写镜像所在的 OCI 制品仓库名称。
  • 仓库域名:填写镜像仓库域名,示例:cr-cn-beijing.volces.com
  • 用户名:登录镜像仓库的用户名。以使用镜像仓库 CR 中的镜像为例,则此处填写镜像所在实例的登录用户名。可在 镜像仓库控制台 目标实例的 概览 页面获取。
  • 密码:镜像仓库登录用户名对应的密码。

资源配额

支持按照业务需求,在容器维度配置 CPU 和内存的上下限,保障容器的健康运行。若不设置,则表示容器资源配额无限制。

  • CPU 请求:容器需要使用的最小 CPU 值。
  • CPU 上限:允许容器使用的 CPU 最大值。如果超过,容器会被终止。
  • 内存请求:容器需要使用的最小内存值。
  • 内存上限:允许容器使用的内存最大值。如果超过,容器会被终止。
  • GPU 算力:允许容器使用的 GPU 算力。

说明

  • 仅具有 GPU 节点的集群,配置 GPU 算力才能生效。
  • GPU 算力的卡数只能填写正整数。
特权级容器默认关闭。开启后特权级容器可以访问宿主上的设备。支持部署在 Linux 系统上的容器控制网络堆栈或访问设备。
Init 容器默认关闭。开启后表示将该容器设置为 Init 容器。Init 容器是 Pod 中,运行在应用容器前的容器,并且它可以包括仅在安装过程中使用的工具(例如 python、dig)和代码,避免在应用容器中的重复部署,提升应用镜像的安全性。

alt

配置项说明
容器端口配置容器中应用对容器外服务的连接端口,包括支持的协议(TCP、UDP)、端口号、端口名称。例如 Nignx 监听端口名称为nginx的 TCP 协议 80 端口。

环境变量

配置环境变量。Kubernetes 在创建 Pod 时,会将环境变量的信息注入到容器中。

自定义:输出入变量名称和变量值,创建自定义的环境变量。
配置项:部分引用或全部引用配置项中的变量。部分引用时,一条规则仅支持为一个 Key 创建环境变量。
保密字典:部分引用或全部引用保密字典中的变量。部分引用时,一条规则仅支持为一个 Key 创建环境变量。

实例字段:引用实例字段中的值,创建环境变量。

  • metadata.name:有状态负载的名称。

  • metadata.namespace:有状态负载所处的命名空间。

  • metadata.uid:有状态负载的 uid 标识。

  • metadata.labels:有状态负载的标签。

  • metadata.annotations:有状态负载的注解。

  • spec.nodeName:有状态负载所处的节点。

  • spec.serviceAccountName:所使用的服务账号。

  • status.hostIP:有状态负载所处节点的 IP。

  • status.podIP:有状态负载中 Pod 的 IPv4 地址。

  • status.podIPs:有状态负载中 Pod 的 IPv4 和 IPv6 地址。

说明

当选择类型为metadata.labelsmetadata.annotations字段时,需要动态增加一个控件字段,用于指定 label 或 annotation 的 key,该新增字段也支持用户自定义输入以上不存在的 key。

容器资源:引用容器中的字段作为环境变量。

  • limits.cpu:容器 CPU 的使用上限。

  • limits.memory:容器内存的使用上限。

  • limits.ephemeral-storage:容器临时存储的使用上限。

  • request.cpu:容器 CPU 请求的大小。

  • request.memory:容器内存请求的大小。

  • requests.ephemeral-storage:容器请求存储的大小。

添加卷

添加数据卷。卷(Volume)是容器中存储数据的位置。为一类数据分配存储资源前,需要先在容器中指定待存储数据的目录。

配置项:支持为配置项中的全部数据或部分数据创建数据卷。为部分数据创建存储卷时,支持配置多数据 item,用半角分号 (;)分隔。例如 cm1:path1;cm2:path2
保密字典:支持部分挂载或全部挂载保密字典中的数据。为部分数据创建存储卷时,支持配置多数据 item,用半角分号 (;)分隔。例如 cm1:path1;cm2:path2
存储卷声明:选择当前工作负载命名空间中已创建的存储卷声明,并为其指定数据卷的名称。
临时目录:为临时目录创建数据卷名称。
主机目录:为主机中的目录创建数据卷。
挂载卷为已创建的卷分配存储资源,并分配读写权限。其中,支持通过 subPath 方式挂载卷的子目录;支持通过 subPathExpr 方式挂载卷的扩展路径。

启动命令

创建容器时自动注入容器运行前后的执行命令,设置的命令和参数将填写在配置文件中。如果容器镜像中存在相同的命令和参数,那么配置文件中命令和参数将覆盖容器镜像中的对应命令和参数。

  • 运行命令:按需配置容器启动前运行的命令。

  • 运行参数:按需配置容器启动前所运行命令的参数。

启动后处理按需配置启动后命令。
停止前处理按需配置停止前处理命令。

alt

支持配置 存活检查就绪检查 和 启动检查。允许基于 HTTP 协议、TCP 协议或执行具体命令的方式,探测容器中的负载是否正常。以下以配置存活检查为例,介绍配置参数。

配置项说明

检查方式

配置检查的方式,包括:

  • HTTP 请求检查:使用 HTTP 或 HTTPS 协议,向容器发送一个 HTTP Get 请求,通过检查响应确认容器状态。您需要进行如下检查配置:
    • 协议:HTTP 或 HTTPS。
    • HTTP 请求头:HTTP 请求中自定义的请求头(HTTP Headers)。单击 添加 输入键值对的配置方式。
    • 路径:访问 HTTP Server 的路径。
    • 端口:容器暴露的访问端口。
  • TCP 端口检查:向容器发送一个 TCP Socket,Kubelet 将尝试在指定端口上打开容器的 Socket。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。您需要进行如下检查配置:
    • 端口:容器暴露的访问端口。
  • 执行命令检查:在容器内执行指定的命令,通过检查命令执行的结果确认容器状态。 您需要进行如下检查配置:
    • 命令:检测容器健康情况的探测命令。

时间设置

配置检查的时间参数,包括:

  • 初始等待时间:指容器启动后,第一次执行探测时需要等待的时间,默认为 1 秒。
  • 超时时间:指发送检查请求后,等待响应的超时时间。超过此时间表示容器无响应,默认为 1 秒。
  • 检查间隔:相邻两次检查的时间间隔。默认为 10 秒。

阈值设置

配置检查的结果阈值。包括:

  • 成功阈值:检查请求发送后,表示系统正常的响应次数,默认为 1 次。该项不可配置。
  • 失败阈值:检查请求发送后,表示系统异常的无响应次数,默认为 3 次。即如果容器对请求 3 次无响应,则认为容器状态异常。
  • 配置有状态负载相关高级配置,完成后单击 下一步:部署配置

alt

配置项说明
名称配置 Headless 服务的名称。Headless 服务可以与其他服务发现机制进行接口,而不必与 Kubernetes 的实现捆绑在一起,平台也不会为它们进行负载均衡和路由。
端口配置服务的端口号,支持 TCP、UDP 协议。允许配置多个端口号。
优雅退出优雅时间是指实例终止前的缓冲时间,默认为 30 秒。当配置为 0 时,表示立即删除实例。

更新策略

配置实例更新策略,包括:

  • 滚动更新:将逐步用新版本的实例替换旧版本的实例,升级的过程中,业务流量会同时负载均衡分布到新老的实例上,因此业务不会中断。
  • 删除时更新:将先把工作负载的老版本实例删除,再安装指定的新版本,升级过程中业务会中断。
实例标签配置 Pod 实例标签,配合标签选择器,帮助 Kubernetes 筛选目标 Pod。单击 添加实例标签,根据界面提示输入符合要求的  和 
实例注解配置 Pod 实例注解。单击 添加实例注解,根据界面提示输入符合要求的  和 。 注解对应 Kubernetes 中的 Annotation,不用于标识和区分资源,主要记录用于应用部署、安全策略、调度策略的附加信息。

DNS 策略

配置实例的 DNS 策略。包括:

  • ClusterFirst:在该模式下,会将 Kube-dns 或 CoreDNS 的信息当作预设置参数,写入到该 Pod 内的 DNS 配置。
  • Default:在该模式下,Pod 里面的 DNS 配置继承了宿主机上的 DNS 配置。即该 Pod 的 DNS 配置与宿主机完全一致。
  • ClusterFirstWithHostNet:在该模式下, 宿主机上的 DNS 配置与 Kube-dns 同时作为 Pod 的预设 DNS 配置。
  • None:该模式下, Kubernetes 不会为 Pod 预先加载任何逻辑,用于判定得到 DNS 的配置。
DNS 服务器地址配置 DNS 服务器的 IP 地址,最多添加 3 条 DNS 服务器地址。
DNS 搜索域定义域名的搜索域列表,当访问的域名不能被 DNS 解析时,会把该域名与搜索域列表中的域依次进行组合,并重新向 DNS 发起请求,直到域名被正确解析或者尝试完搜索域列表为止。
DNS 解析选项选项中的内容将合并或覆盖基于 DnsPolicy 生成的域名解析文件的 options 字段。

节点亲和调度

配置工作负载和节点的亲和性调度。包括:强制调度和优先调度。

  • 强制调度:通过匹配标签进行调度选择。可以设置 6 种匹配关系(In, NotIn, Exists, DoesNotExist, gt, lt)。
  • 优先调度:通过匹配标签进行调度选择,允许配置权重。可以设置 6 种匹配关系(In, NotIn, Exists, DoesNotExist, gt, lt)。
节点污点调度配置节点污点调度。通过匹配标签进行调度选择,可以设置 2 种匹配关系(equal, exists)。

实例亲和调度

配置工作负载和其他实例的亲和性调度。包括:强制调度和优先调度。

  • 强制调度:基于命名空间、拓扑域。支持配置选择器(MatchExpressions、MatchLabels)。通过匹配标签进行调度选择。可以设置 4 种匹配关系(In, NotIn, Exists, DoesNotExist)。
  • 优先调度:基于命名空间、拓扑域。支持配置选择器(MatchExpressions、MatchLabels)。通过匹配标签进行调度选择,允许配置权重。可以设置 4 种匹配关系(In, NotIn, Exists, DoesNotExist)。

实例反亲和调度

配置工作负载和其他实例的反亲和性调度。包括:强制调度和优先调度。

  • 强制调度:基于命名空间、拓扑域。支持配置选择器(MatchExpressions、MatchLabels)。通过匹配标签进行调度选择。可以设置 4 种匹配关系(In, NotIn, Exists, DoesNotExist)。
  • 优先调度:基于命名空间、拓扑域。支持配置选择器(MatchExpressions、MatchLabels)。通过匹配标签进行调度选择,允许配置权重。可以设置 4 种匹配关系(In, NotIn, Exists, DoesNotExist)。
安全默认关闭。用于指定容器必须以非 root 权限运行,开启后,若以 root 权限运行,容器将会启动失败。
  • 配置有状态负载的部署分发策略,完成后单击 确定

alt

配置项说明

分发策略

部署配置的开关,可根据实际情况(是否已创建策略、是否需要立即分发资源)确定是否需要立即配置策略并分发资源。

  • 关联已有策略:已经创建部署策略、差异化策略,即刻关联策略并分发资源。

  • 暂不关联:仅创建资源,暂不关联策略,也不进行资源分发,直到更新部署策略。

部署策略

根据实际情况配置资源关联的部署策略(包括:命名空间级或集群级)。
选定部署策略后,可展示部署策略中副本模式调度和跟随调度配置的开启状态,若需要调整部署策略相关配置,可单击 配置,跳转到部署策略更新页面进行调整。

跟随调度

部署策略已开启跟随调度时需要配置,单击 添加,即可根据实际情况配置。
工作负载关联的资源(例如:ConfigMap、Secret 等)会自动跟随副本分发到成员集群中,具体支持的资源类型请参考:关联资源跟随调度

差异化策略配置资源关联的差异化策略(包括:命名空间级或集群级),可根据实际情况选择一个或多个差异化策略,的确没有差异时可留空不填。

冲突资源接管

默认不勾选,表示待分发资源与成员集群中已有资源名称冲突时的处理策略,勾选后将通过联邦资源统一管理已存在的资源。资源冲突场景具体说明及注意事项参见:资源冲突策略

  • 若不勾选此项,当成员集群中已经存在待分发的同名资源时,将会出现资源冲突错误,已存在的资源不受影响,待分发资源分发失败。

  • 若勾选此项,需要进一步指定 接管目标集群。当成员集群中已经存在待分发的同名资源时,将通过联邦资源统一接管已存在的资源。

注意

2023年01月23日之前创建的主控实例不支持指定集群,接管默认全部集群生效。

管理有状态负载

联邦资源的管理操作基本相同,详细介绍参见:管理联邦资源