在运行中会保存数据或状态的工作负载称为有状态负载 ,对应 Kubernetes 中的 StatefulSet,例如 MySQL,它在运行中会保存产生的数据。您可以在镜像在集群中创建一个有状态负载。本文介绍如何创建有状态负载应用。
前提条件
操作步骤
步骤一:访问有状态负载创建页面
- 登录边缘托管控制台。
- 在左侧导航栏,单击边缘集群。
- 在集群页面,找到目标集群,然后单击集群名称。
- 在左侧导航栏,选择工作负载 > 有状态负载。
- 单击创建有状态负载。进入有状态负载创建页面。
步骤二:配置基本信息
在基本信息页面,参照以下说明配置负载的基本信息,然后单击下一步:容器配置。
配置项 | 描述 |
---|
名称 | 配置有状态负载的名称。在同一命名空间下,工作负载的名称须唯一。命名规则如下: - 长度在 1~63 个字符范围内。
- 支持英文小写字母、数字和连字符(-)。
- 必须以英文字母、数字开头和结尾。
|
命名空间 | 选择有状态负载部署的命名空间。可以选择已创建的命名空间或集群默认创建的命名空间。命名空间详情,请参见命名空间概述。 |
实例个数 | 输入有状态负载的 Pod 实例的个数。 |
标签 | 可选。设置有状态负载的标签,包含标签的键和值。标签对应 Kubernetes 中的 Label,用于标识该有状态负载的特点,便于 Kubernetes 筛选目标有状态负载。
您可以为有状态负载添加多个标签。 |
注解 | 可选。设置有状态负载的注解,包含注解的键和值。注解对应 Kubernetes 中的 Annotation,主要记录应用部署、安全策略、调度策略等相关的附加信息,不用于标识和区分资源。
您可以为有状态负载添加多个注解。 |
步骤三:配置容器
在容器配置页面,参照以下说明配置容器参数,然后单击下一步:高级配置。
说明
说明:如需添加多个容器,请单击页面上方的添加容器。
配置项 | 描述 |
---|
基本信息 | 容器名称 | 输入容器名称。同一个工作负载下,容器名称须唯一。命名规则如下: - 长度在 1~63 个字符范围内。
- 支持英文小写字母、数字和连字符(-)。
- 须以英文字母、数字开头和结尾。
|
镜像 | 选择容器使用的镜像。支持使用镜像仓库(CR) 中的镜像。
单击镜像右侧的 +,从右侧弹出的对话框中选择目标镜像仓库实例下的镜像。 |
镜像版本 | 选择镜像的版本。如不选择,则默认拉取latest 版本。 说明 注意:
如果镜像不存在latest 版本,此处必须选择镜像版本。 |
镜像仓库密钥 | 选择镜像仓库密钥。 说明 注意: - 若未安装镜像免密校验组件 cr-credential-controller,且需要拉取的为私有镜像时,必须配置密钥。
- 若已安装镜像免密校验组件 cr-credential-controller,此处可以不选择镜像仓库密钥。若选择了密钥,系统将会以已选的镜像仓库密钥为准。
如无可用镜像仓库密钥,单击创建仓库密钥、参照以下说明配置仓库密钥:
- 名称:容器使用的镜像的仓库名称。以使用镜像仓库(CR)中的镜像为例,则此处填写镜像所在的 OCI 制品仓库名称。
- 仓库域名:填写镜像仓库域名,示例:
cr-cn-beijing.volces.com 。 - 用户名:输入用于登录镜像仓库的用户名。以使用镜像仓库中的镜像为例,则此处填写镜像所在实例的登录用户名。您可在镜像仓库控制台目标实例的概览页面获取用户名信息。
- 密码:用于登录镜像仓库的用户名所对应的密码。
|
资源配额 | 可选。您可以按照业务需求,在容器维度配置 CPU 和内存的上下限,保障容器的健康运行。若不设置,则表示容器资源配额无限制。 - CPU 请求:容器需要使用的最小 CPU 核数。
- CPU 上限:允许容器使用的 CPU 核数最大值。如果超过CPU 上限,容器会被终止。
- 内存请求:容器需要使用的最小内存。
- 内存上限:允许容器使用的内存最大值。如果超过内存上限,容器会被终止。
说明 若您有 GPU 资源使用需求,请提交工单或联系客服。 |
添加存储卷 | 单击 添加卷,添加数据卷。卷(Volume)是容器中存储数据的位置。为一类数据分配存储资源前,需要先在容器中指定待存储数据的目录。对不同类型的存储卷说明如下: 配置项:您可以为配置项中的全部数据或部分数据创建数据卷。为部分数据创建存储卷时,支持配置多数据 item,用半角分号 (;)分隔。例如 cm1:path1;cm2:path2 。 保密字典:您可以部分挂载或全部挂载保密字典中的数据。为部分数据创建存储卷时,支持配置多数据 item,用半角分号 (;)分隔。例如 cm1:path1;cm2:path2 。 临时目录:您可以为临时目录创建数据卷名称。 主机目录:您可以为主机中的目录创建数据卷。 |
挂载存储卷 | 单击添加挂载卷,为已创建的卷分配存储资源,并分配读写权限。其中,支持通过 subPath 方式挂载卷的子目录;支持通过 subPathExpr 方式挂载卷的扩展路径。 |
特权级容器 | 默认不开启。开启后,该容器被设置为特权级容器。特权级容器可以访问宿主上的所有设备以及访问宿主上运行的所有进程。支持部署在 Linux 系统上的容器控制网络堆栈或访问设备。 |
Init容器 | 默认不开启。开启后,该容器被设置为 Init 容器。Init 容器是 Pod 中的一种特殊容器,在 Pod 内的应用容器启动之前运行。Init 容器可以包括仅在安装过程中使用的工具(例如 python、dig)和代码,避免在应用容器中的重复部署,提升应用镜像的安全性。 说明 说明:Init 容器不支持设置生命周期管理中的启动后处理、停止前处理,不支持开启健康检查。 |
容器端口 | 端口 | 单击添加端口,配置容器中应用对容器外服务的连接端口,包括支持的协议(TCP、UDP)和端口号。 |
环境变量 | 环境变量 | 单击添加环境变量,配置环境变量。Kubernetes 在创建 Pod 时,会将环境变量的信息注入到容器中。各类型的环境变量说明如下: - 自定义:支持输出入变量名称和变量值,创建自定义的环境变量。
- 配置项:支持部分引用或全部引用配置项中的变量。部分引用时,一条规则仅支持为一个 Key 创建环境变量。
- 保密字典:支持部分引用或全部引用保密字典中的变量。部分引用时,一条规则仅支持为一个 Key 创建环境变量。
- 实例字段:支持引用实例字段中的值,创建环境变量。
- metadata.name:无状态负载的名称。
- metadata.namespace:无状态负载所处的命名空间。
- metadata.labels:无状态负载的标签。
- metadata.annotations:无状态负载的注解。
- spec.nodeName:无状态负载所处的节点。
- spec.serviceAccountName:所使用的服务账号。
- status.hostIP:无状态负载所处节点的 IP。
- status.podIP:无状态负载中 Pod 的 IPv4 地址。
- status.podIPs:无状态负载中 Pod 的 IPv4 和 IPv6 地址。
- 容器资源:支持引用容器中的字段作为环境变量。
- limits.cpu:容器 CPU 的使用上限。
- limits.memory:容器内存的使用上限。
- request.cpu:容器 CPU 请求的大小。
- request.memory:容器内存请求的大小。
|
生命周期 | 启动命令 | 启动命令:输入容器启动前运行的命令。 启动参数:输入容器启动前所运行的命令的参数。 |
容器启动后操作 | 选择容器启动后的操作。可选择执行命令和不操作。
选择执行命令时,需输入容器启动后执行的命令。 |
容器停止前操作 | 选择容器停止前的操作。可选择执行命令和不操作。
选择执行命令时,需输入容器停止前执行的命令。 |
健康检查 | 健康检查 | 选择是否开启健康检查功能。支持存活检查、就绪检查、启动检查。支持以下几种检查方式: - 执行命令:在容器内执行指定的命令,然后检查命令执行的结果确认容器状态。
- HTTP 请求检查:使用 HTTP 或 HTTPS 协议,向容器发送一个 HTTP Get 请求,通过检查响应确认容器状态。
- TCP 端口检查:向容器发送一个 TCP Socket,Kubelet 将尝试在指定端口上打开容器的 Socket。 如果能够建立连接,容器被认为是健康的;如果不能建立连接,容器被认为是失败的。
- 不操作:不执行该项检查。
|
步骤四:高级配置
在高级配置页面,参照以下说明,配置相关参数,然后单击确定。
配置项 | 描述 |
---|
访问设置 | 名称 | 配置 Headless 服务的名称。Headless 服务可以与其他服务发现机制进行接口,而不必与 Kubernetes 的实现捆绑在一起,平台也不会为它们进行负载均衡和路由。更多有关 Headless 服务的说明,您可以参考 Kubernetes 官方文档。 |
端口 | 配置服务的端口号,支持 TCP、UDP 协议。允许配置多个端口号。 |
实例配置 | 优雅退出 | 设置 Pod 实例终止前的缓冲时间,默认为 30 秒。当时间设置为 0 秒时,表示立即删除实例。 |
更新策略 | 配置 Pod 实例的更新策略。支持以下策略: - 滚动更新:逐步用新版本的实例替换旧版本的实例。升级的过程中,业务流量会负载均衡到新版本和旧版本的实例上,因此业务不会中断。
- 重新创建:先把工作负载的旧版本实例删除,再安装指定的新版本实例。升级过程中业务会中断。
|
DNS 策略 | 配置实例的DNS策略。支持以下DNS策略: - ClusterFirst:在该模式下,会将 Kube-dns 或 CoreDNS 的信息当作预设置参数,写入到该 Pod 内的 DNS 配置。
- Default:在该模式下,Pod 里面的 DNS 配置继承了宿主机上的 DNS 配置。即该 Pod 的 DNS 配置与宿主机完全一致。
|
调度策略 | 节点亲和调度 | 配置工作负载和节点的亲和性调度。包括:强制调度和优先调度。 - 强制调度:通过匹配标签进行调度选择。可以设置 6 种匹配关系(In, NotIn, Exists, DoesNotExist, gt, lt)。
- 优先调度:通过匹配标签进行调度选择,允许配置权重。可以设置 6 种匹配关系(In, NotIn, Exists, DoesNotExist, gt, lt)。
|
实例亲和调度 | 配置工作负载和其他实例的亲和性调度。包括:强制调度和优先调度。 - 强制调度:基于命名空间、拓扑域。支持配置选择器(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)。
|
节点污点调度 | 配置节点污点调度。通过匹配标签进行调度选择,可以设置 2 种匹配关系(equal, exists)。 |
实例标签和注解 | 实例标签 | 设置 Pod 实例的标签,包含标签的键和值。标签对应 Kubernetes 中的 Label,用于标识 Pod 实例的特点,便于 Kubernetes 筛选目标 Pod 实例。您可以为 Pod 实例添加多个标签。 |
实例注解 | 设置 Pod 实例的注解,包含注解的键和值。注解对应 Kubernetes 中的 Annotation,主要记录应用部署、安全策略、调度策略等相关的附加信息,不用于标识和区分资源。您可以为 Pod 实例添加多个注解。 |