工作负载是对一组Pod的逻辑抽象。通过部署各个工作负载实现应用的全部功能。创建方式支持界面创建和Yaml创建,本节将介绍界面创建方式,Yaml创建方式请参见 [使用Yaml创建资源]。
在顶部导航栏选择[产品与服务]-[容器服务]-[Kubernetes容器服务],进入“Kubernetes容器服务”页面。
在左侧导航栏选择[业务视图]页签-选择目标命名空间-选择[应用管理],进入“应用管理”页面。
单击目标应用对应操作栏的
添加负载
,跳转至“创建工作负载”页面。填写容器配置参数。
参数 说明 负载类型 部署 即kubernetes中的Deployment控制器,一个“部署”可以包含一个或多个容器组副本,这些容器组是无状态的(即完全相同、相互独立、可被替换),系统会自动为Deployment的多个Pod副本分发请求。您可以定义期望的副本数、容器属性等,“部署”会保证实际状态与所需状态一致,即使发生意外情况也可以将容器组恢复到期望状态。通过“部署”可以实现上线部署、滚动升级(不停止旧服务的状态下升级)、回滚应用(将应用回滚到之前的版本)、平滑扩缩容功能。 有状态副本集 即kubernetes中的StatefulSet控制器,一个“有状态副本集”可以包含一个或多个容器组副本,这些容器组是有状态的(运行过程中会保存数据或状态),支持有序部署和删除,支持持久化存储,适用于容器组间存在主从关系、主备关系、互相访问等关系的场景。 守护进程集 即kubernetes中的DaemonSet控制器。守护进程集确保全部(或者某些)节点都运行一个容器组,支持实例动态添加到新节点,适用于实例在每个节点上都需要运行的场景,例如在每个节点上运行日志收集程序、节点监视程序等。 副本数 仅当负载类型为“部署”或“有状态副本集”时可配置此参数。表示该工作负载包括的容器组个数。每个容器组都由相同的容器部署而成。设置多个容器组主要用于实现高可靠性,当某个实例故障时,工作负载还能正常运行。 容器配置 容器类型 包括业务容器和初始化容器。业务容器即真正运行业务的容器,初始化容器则运行于业务容器启动期间。若容器组中有多个初始化容器,这些容器会按顺序逐个运行,每个初始化容器必须运行成功,下一个才能够运行,当所有初始化容器运行完成时,集群才会正常运行业务容器。由于一个容器组中的存储卷是共享的,所以初始化容器中产生的数据可以被业务容器使用到。由于初始化容器提供了一种机制来阻塞或延迟业务容器的启动,可以应用于有启动顺序要求的容器组之间。 镜像来源 包括镜像仓库和第三方镜像两种来源。选择镜像仓库则使用本集群对接的镜像仓库,选择第三方镜像则需要输入第三方镜像地址且保证网络可达。 密钥认证 仅当镜像来源为“第三方镜像”时可配置。 密钥 仅当镜像来源为“第三方镜像”且密钥认证为“是”时可配置。 镜像 若镜像来源为“镜像仓库”,则单击 选择镜像
,弹出选择镜像对话框。选择目标镜像,单击确定
完成操作。若镜像来源为“第三方镜像”,则输入格式为ip:port/path/name的镜像地址。镜像版本 若镜像来源为“镜像仓库”,则在下拉框中选择目标版本;若镜像来源为“第三方镜像”,则手动输入目标版本。 拉取镜像策略 包括“本地不存在时拉取”和“总是拉取”两种策略。 资源预留 保证容器成功调度到节点的最小资源。 资源限制 容器运行中允许使用的最大资源。 环境变量 容器在启动过程中需要的一些配置信息如启动命令、证书等,这类信息需要在容器组故障重启后仍然存在并重新加载到新容器组中,这类信息可以通过环境变量的形式单独存储。当前支持三种类型:
* 普通变量:普通变量不需提前创建,直接输入即可。
* 配置:选择已创建好的配置。
* 密钥:选择已创建好的密钥。数据卷 单击 添加数据卷
,弹出“添加数据卷”对话框。配置参数,单击确定
完成操作。参数说明如下:
* 类型:
- 持久卷声明:仅工作负载类型为部署、任务、定时任务时可选择本类型。给容器挂载持久化存储,数据不会因容器的销毁或节点异常而消失。适用于需持久化存储、高磁盘IO等场景。
- 存储类:仅工作负载类型为有状态副本集时可选择。不需事先创建持久卷声明,可直接通过指定存储类及所需存储容量创建持久卷,并挂载到指定的容器路径。
- 主机路径:将容器所在宿主机的文件目录挂载到容器的指定路径。若选择此类型,节点异常无法恢复时,本地磁盘中的数据也将无法恢复。
- 临时路径:将容器所在宿主机的临时目录挂载到容器的指定路径。
- 配置:选择已创建好的配置。
- 密钥:选择已创建好的密钥。
* 挂载路径:所选数据卷挂载至容器的绝对路径。健康检查 健康检查包括存活检查和就绪检查两项功能。存活检查用于检测容器是否正常,如果容器的存活检查失败,集群会对该容器执行重启操作;若容器的存活检查成功则不执行任何操作。就绪检查用于检查用户业务是否就绪,如果容器的就绪检查失败,则不转发流量到当前容器组;若检查成功,则会开放对该容器组的访问。
* 检查方式:
- HTTP/HTTPS方式:适用于提供HTTP/HTTPS服务的容器,集群周期性地对该容器发起HTTP/HTTPS GET请求,如果HTTP/HTTPS 返回状态码小于400,则证明检查成功、容器健康,否则检查失败。例如,方式选择HTTP,路径为/check,端口为80,则集群周期性向容器发起如下请求:GET http://容器IP:80/check
。
- TCP方式:适用于提供TCP通信服务的容器,集群周期性地检测端口是否为打开状态,若端口为打开状态,则检查成功、容器健康;若端口为关闭或进程为停止状态,则检查失败。例如:一个提供nginx服务的容器,服务端口为80,则配置TCP检查端口为80,那么集群会周期性检测该容器的80端口打开状态。
- 容器命令方式:该方式要求用户指定一个容器内的可执行命令,集群会周期性地在容器内执行该命令,若进程退出状态码为 0则检查成功、容器健康,否则检查失败。
* 公共参数:
- 首次检查延时:容器启动后第一次进行健康检查的延迟时间,这段时间为预留给业务程序正常启动。例如,设置为10,表明容器启动后10秒才开始健康检查。
- 检查间隔:执行健康检查的时间间隔。例如,设置为30,则每间隔30秒执行一次健康检查。
- 超时时间:检查超时后的等待时间。例如,设置为10,表明执行健康检查的超时等待时间为10秒,如果超过这个时间,本次健康检查就被视为失败。
- 健康认定()次成功:假设本参数设置为N,健康检查失败后,至少连续成功N次会认为容器健康。
- 不健康认定()次失败:假设本参数设置为X,健康检查失败后,集群将继续尝试X次健康检查,若仍不符合健康条件,则放弃该容器。对于存活检查,放弃意味着重启容器;对于就绪检查,放弃意味着容器组将被标记为未就绪。安全设置 * 非root用户运行:要求容器组具有非零runAsUser值,或在镜像中定义了USER环境变量。
* 只读root文件系统:是否必须使用一个只读的root文件系统。
* runAsUser:用户ID。容器中的进程都以该用户ID运行。
* runAsGroup:Group ID。容器中的进程都以该Group ID运行。
* 特权:若选择是,则容器拥有宿主机的root权限。命令 * 启动命令:容器启动时运行的第一条命令,将覆盖镜像中的Entrypoint指令。
* 启动命令参数:覆盖镜像中的CMD执行,如已设置了运行命令,该条指令将被附加到运行命令的参数中。
* 启动后执行命令:该命令在创建容器之后立即执行。
* 停止前执行命令:这个命令在停止容器前执行,是否立即调用此命令取决于 API 的请求或者管理事件。
完成一个容器的配置后,若需要添加多个容器可单击添加容器,否则单击下一步:访问方式进入“访问方式”配置页面。
填写访问方式相关参数。
参数 说明 访问方式 ClusterIP 适用于集群内部访问场景,集群为服务分配一个固定的集群内虚拟IP,集群内其它pod可以通过集群内部域名访问,格式为“<服务名称>.<工作负载所在命名空间>.svc.cluster.local:<端口号>”。集群外无效。 NodePort 适用于集群外部访问场景,集群除了会给服务分配一个内部的虚拟IP,还会在每个节点上为服务分配静态端口号,集群外部可通过集群任一节点IP和静态端口号访问服务。 LoadBalancer 适用于集群外部访问场景,其实是NodePort的扩展。集群外部通过一个特定的负载均衡器访问Service,这个负载均衡器将请求转发到节点的端口。负载均衡器的访问地址可在[业务视图]-[网络管理]-[服务]页面的列表中“访问地址”字段查看。 容器端口 容器镜像中工作负载实际监听的端口。 访问端口 容器端口映射到节点IP上的端口。当访问方式为“NodePort”时,支持随机生成。 协议 包括TCP、UDP,根据业务类型选择。当访问方式为“LoadBalancer”时仅支持TCP协议。 Ingress配置/Ingress规则 Ingress是kubernetes中的一种HTTP方式的路由转发机制。例如域名填写为example.com,路径填写为/path,则外部可通过 http://example.com/path
访问服务。单击
下一步:高级配置
,进入“高级配置”页面。填写高级配置参数。
参数 说明 升级策略 * 工作负载类型为“部署”时,参数说明如下:
* 先启动新Pod,再停止旧Pod/先停止旧Pod,再启动新Pod:可定义每次启动或停止Pod的数量。例如选择先启动新Pod,再停止旧Pod,批量大小设置为1,则每次先启动1个新的Pod,新的Pod成功后停止1个旧Pod,以此类推。
* 停止所有Pod,再启动新Pod:先停止所有老版本容器组,再启动新版本容器组,升级过程中业务会中断。
* 自定义:
* 最大超量:更新过程中容器组数量可以超过期望副本的数量或百分比。
* 最多不可用数:升级过程中允许的最多不可用容器组数量,如果等于期望副本数量有业务中断风险(最小存活容器组数量=期望副本数量-最多不可用数)。
* 工作负载类型为“有状态副本集”或“守护进程集”时,参数说明如下:
* 滚动:滚动升级将逐步用新版本的实例替换旧版本的实例,升级的过程中,业务流量会同时负载均衡分布到新老的实例上,因此业务不会中断。
* 手动删除时更新:集群不会自动更新工作负载中的容器组,需手动删除容器组以使集群创建新的容器组。
* 最多不可用数:仅当升级策略为“滚动”时需配置,指升级过程中允许的最多不可用容器组数量,如果等于期望副本数量则有业务中断风险(最小存活容器组数量=期望副本数量-最多不可用数)。伸缩策略 当达到设置的条件后自动扩展或收缩容器组数量。* 最小实例数:期望容器组数量的最小值。
* 最大实例数:期望容器组数量的最大值。
* CPU使用率阈值:所有容器组平均cpu使用率超过阈值自动扩展,n-1(n为容器组总数)个容器组平均内存使用率低于阈值自动收缩。需勾选“开启”后才能输入阈值。
* 内存使用率阈值:所有容器组平均内存使用率超过阈值自动扩展,n-1(n为容器组总数)个容器组平均内存使用率低于阈值自动收缩。需勾选“开启”后才能输入阈值。调度策略 主机调度 * 指定主机:可选择集群内任一节点,该工作负载内的容器将被调度到所选节点上。
* 自定义规则:包括必须满足条件和尽量满足条件。必须满足条件是硬性要求,必须满足才能成功调度,支持添加多条规则,多条规则间是“且”的关系,即需要满足所有规则才可以调度;尽量满足条件表示集群会尽量将容器调度到符合规则的主机上,支持添加多条规则,多条规则间是“或”的关系,不满足规则的主机也会进行调度,根据规则的权重值,权重值越高越会被优先调度。Pod亲和性/Pod反亲和性 Pod亲和性决定哪些工作负载的Pod部署在同一个拓扑域,可根据业务需求进行工作负载的就近部署,容器间通信就近路由,减少网络消耗。Pod反亲和性决定工作负载的Pod不和哪些工作负载的Pod部署在同一个拓扑域,互相干扰的工作负载反亲和部署,避免干扰,减少宕机影响。拓扑域是由一个或多个节点组成的,这些节点在所指定的属性上具有相同的值,例如拓扑域为kubernetes.io/hostname,则具有相同hostname的节点成为一个拓扑域(即同一节点)。必须满足条件是硬性要求,支持添加多条规则,多条规则间是“且”的关系,即需要满足所有规则才可以调度;尽量满足条件表示集群会尽量将容器调度到符合规则的主机上,多条规则间是“或”的关系,不满足规则的主机也会进行调度,根据规则的权重值,权重值越高越会被优先调度。 网络设置 * 使用主机网络:直接使用宿主机网络,不进行网络虚拟化隔离,容器将直接暴露在宿主机网络环境中,此时容器组IP即为宿主机IP。
* 主机别名:仅当“使用主机网络”选项为否时可设置。增加主机别名后即可通过域名访问对应的主机IP。标签 通过标签可以方便地标识及筛选对象。 根据需要可以单击
继续添加负载
,为应用添加多个工作负载,或者单击确定
完成本次工作负载添加。若添加了多个工作负载,可以在页面左下方展开并查看已添加负载情况,可以单击负载名称右侧的编辑图标或删除图标管理负载(负载名称字体为灰色代表此前已经创建完成的负载,在此处不支持操作)。