更新时间:2024-06-17 GMT+08:00

无状态负载

工作负载即Kubernetes对一组Pod的抽象模型,用于描述业务的运行载体,包括Deployment、StatefulSet、Job、DeamonSet等。

工作负载基本概念

  • 无状态工作负载(即Kubernetes中的Deployment):实例之间完全独立、功能相同,具有弹性伸缩、滚动升级等特性。如:nginx、wordpress,创建无状态工作负载请参见创建无状态工作负载
  • 有状态工作负载(即Kubernetes中的StatefulSet):实例之间不完全独立,具有稳定的持久化存储和网络标示,以及有序的部署、收缩和删除等特性。如:mysql-HA、etcd,创建有状态工作负载请参见创建有状态工作负载
  • 守护进程集(即Kubernetes中的DeamonSet):在集群的每个节点上运行一个Pod,且保证只有一个Pod,适合一些系统层面的应用,如日志收集、资源监控等,创建守护进程集请参见创建守护进程集

工作负载与容器间的关系

图1所示,一个工作负载由一个或多个实例(Pod)组成。一个实例由一个或多个容器组成,每个容器都对应一个容器镜像。对于无状态工作负载,实例都是完全相同的。

图1 工作负载与容器的关系

工作负载生命周期说明

表1 状态说明

状态

说明

运行中

所有实例都处于运行中才是运行中。

未就绪

所有实例处于pending状态。

升级中

触发升级动作后,工作负载会处于升级中。

可用

当多实例无状态工作负载运行过程中部分实例异常,可用实例不为0,工作负载会处于可用状态。

删除中

触发删除操作后,工作负载会处于删除中状态。

创建无状态工作负载

  1. (可选)若基于我的镜像创建工作负载,用户首先需要将镜像上传至容器镜像服务,上传镜像的方式请参见镜像管理。若基于开源镜像中心创建工作负载,则无需上传镜像。
  2. 在集群控制台选择“工作负载 > 无状态负载”,单击“镜像创建”。
  3. 参照表2设置基本信息,其中带“*”标志的参数为必填参数。

    表2 工作负载基本信息

    参数

    参数说明

    * 负载名称

    新建工作负载的名称,命名必须唯一。

    集群名称

    新建工作负载所在的集群,无需填写。

    * 命名空间

    在单集群中,不同命名空间中的数据彼此隔离。使应用可以共享同个集群的服务,也能够互不干扰。若您不设置命名空间,系统会默认使用default命名空间。

    * 实例数量

    工作负载的实例数量。工作负载可以有一个或多个实例,用户可以设置具体实例个数,默认为2,可自定义设置为1。

    每个工作负载实例都由相同的容器部署而成。设置多个实例主要用于实现高可靠性,当某个实例故障时,工作负载还能正常运行。若使用单实例,节点异常或实例异常会导致服务异常。

    描述

    工作负载描述信息。

    时区同步

    容器将和节点使用相同时区。时区同步功能开启后,在“数据存储 > 本地磁盘”中,将会自动添加HostPath类型的磁盘,请勿修改删除该磁盘。

  4. 设置工作负载容器配置。

    Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器并分别进行设置。
    图2 容器配置
    • 容器信息:Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。
      • 基本信息:请参见表3
        表3 基本信息参数说明

        参数

        说明

        容器名称

        为容器命名。

        镜像名称

        单击后方“选择镜像”,选择容器使用的镜像。

        • 我的镜像:当前区域下镜像仓库中的镜像。若无可用的镜像,可单击“上传镜像”进行上传。
        • 镜像中心:开源镜像仓库中的官方镜像。
        • 共享镜像:由他人账号共享的私有镜像,详情请参见共享私有镜像

        镜像版本

        选择需要部署的镜像版本。

        更新策略

        镜像更新/拉取策略。勾选“总是拉取镜像”表示每次都从镜像仓库拉取镜像;如不勾选则优先使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。

        CPU配额

        • 申请:容器需要使用的最小CPU值,默认0.25Core。
        • 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。

        内存配额

        • 申请:容器需要使用的内存最小值,默认512MiB。
        • 限制:允许容器使用的内存最大值。如果超过,容器会被终止。

        关于CPU/内存配额申请和限制的具体说明请参见设置容器规格

        初始化容器

        选择容器是否作为初始化容器。

        Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。详细说明请参见Init 容器

        特权容器

        特权容器是指容器里面的程序具有一定的特权。

        若选中,容器将获得超级权限,例如可以操作宿主机上面的网络设备、修改内核参数等。

      • 生命周期:设置生命周期回调函数可在容器的特定阶段执行调用,比如容器在停止前希望执行某项操作,就可以设置相应的函数。目前提供的生命周期回调函数有启动命令启动后处理停止前处理,详情请参见设置容器生命周期
      • 健康检查:设置健康检查可以在容器运行过程中定时检查容器的健康状况,详情请参见设置容器健康检查
      • 环境变量:容器运行环境中设定的一个变量,通过环境变量设置的配置项不会随着Pod生命周期结束而变化,详情请参见设置环境变量
      • 数据存储:配置容器存储,可以使用本地存储和存储卷声明(PVC)。建议使用PVC将工作负载Pod数据存储在云存储上。若存储在本地磁盘上,节点异常无法恢复时,本地磁盘中的数据也将无法恢复。容器存储相关内容请参见容器存储
      • 安全设置:对容器权限进行设置,保护系统和其他容器不受其影响。请输入用户ID,容器将以当前用户权限运行。
    • 镜像访问凭证:用于访问镜像仓库的凭证。该凭证仅访问私有镜像仓库时使用,如所选镜像为公开镜像,则无需选择密钥。密钥的创建方法请参见创建密钥

  5. (可选)单击服务配置栏的,进行工作负载服务配置。

    若工作负载需要和其它服务互访,或需要被公网访问,您需要添加服务(Service),设置访问方式。工作负载访问的方式决定了这个工作负载的网络属性,不同访问方式的工作负载可以提供不同网络能力,操作详情请参见服务

    您也可以在创建完工作负载之后再创建Service,参见集群内访问(ClusterIP)节点访问(NodePort)

    • Service名称:新增服务名称,用户可自定义,服务名称必须唯一。
    • 访问类型:
      • 集群内访问(ClusterIP):只能集群内访问服务。
      • 节点访问(NodePort):可以通过集群内任意节点访问到服务。
      • 负载均衡(LoadBalancer):通过弹性负载均衡从公网访问到工作负载。
    • 服务亲和(仅节点访问、负载均衡设置):
      • 集群级别:集群下所有节点的IP+访问端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。
      • 节点级别:只有通过负载所在节点的IP+访问端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。
    • 端口配置:
      • 协议:TCP或UDP,请根据业务的协议类型选择。
      • 服务端口:容器端口映射到集群虚拟IP上的端口,用虚拟IP访问应用时使用,端口范围为1-65535,可任意指定。
      • 容器端口:容器镜像中应用程序实际监听的端口,需用户确定。例如:nginx程序实际监听的端口为80。
      • 节点端口(仅节点访问设置):容器端口映射到节点私有IP上的端口,用私有IP访问应用时使用,端口范围为30000-32767,建议选择“自动生成”
        • 自动生成:系统会自动分配端口号。
        • 指定端口:指定固定的节点端口,默认取值范围为30000-32767。若指定端口时,请确保同个集群内的端口唯一性。
    • 注解:支持key/value对格式,请您根据自身业务以及厂家要求进行注解配置,填写完成后单击“添加”

  6. (可选)单击“展开高级配置”,设置工作负载高级配置。

    • 升级策略:指定无状态负载的升级方式,包括整体替换升级和逐步滚动升级,详细参数说明请参见工作负载升级配置
      • 滚动升级:滚动升级将逐步用新版本的实例替换旧版本的实例,升级的过程中,业务流量会同时负载均衡分布到新的和旧的实例上,因此业务不会中断。
      • 替换升级:先删除旧实例,再创建新实例。升级过程中业务会中断。
    • 调度策略:您可设置亲和(affinity)与反亲和(anti-affinity)实现Pod的计划性调度,详细信息请参见调度策略(亲和与反亲和)
    • 标签与注解:您可以单击“添加”为Pod增加标签或注解,新增标签或注解的键不能与已有的重复。
    • 容忍策略:当工作负载实例所在的节点不可用时,系统将实例重新调度到其它可用节点的时间窗,默认为300秒。
      • 容忍策略与节点的污点能力配合使用,允许(不强制)负载调度到带有与之匹配的污点的节点上,也可用于控制负载所在的节点被标记污点后负载的驱逐策略,详细内容请参考示例教程
      • 单击“容忍策略”下的,可新增策略。相关参数说明见容忍策略

  7. 配置完成后,单击“创建工作负载”。返回无状态工作负载列表查看工作负载状态。

    在工作负载列表中,待工作负载状态为“运行中”,工作负载创建成功。

相关操作

通过集群控制台,您还可以执行表4中的操作。
表4 相关操作

操作

说明

YAML创建

单击右上角“YAML创建”,可使用已有的YAML创建工作负载。

查看Pod详情

单击已创建工作负载的名称,在“实例列表”页签下,可以查看Pod相关详情信息。
  • 事件:可以设置查询条件,比如设置事件产生的时间段或搜索事件名称,查看相关事件。
  • 容器列表:可以查看相应实例的容器名称、状态、镜像以及启停次数等。
  • 查看YAML:可以查看相应实例的YAML文件。

编辑YAML

单击工作负载名称后的“编辑YAML”,可查看并编辑当前工作负载的YAML文件。

升级

  1. 单击工作负载名称后的“升级”
  2. 更改工作负载信息。
  3. 单击“升级工作负载”提交已修改的信息。

回退

单击工作负载名称后的“回退”,选择一个历史版本进行回退。

重新部署

单击工作负载名称后的“更多 > 重新部署”,并单击“是”进行确认,重新部署将重启负载下的全部容器组Pod。

关闭升级

单击工作负载名称后的“更多 > 关闭升级”,并单击“是”进行确认。

  • 工作负载标记为“升级已关闭”后,对其进行的升级将不会被应用到实例。
  • 正在进行中的滚动升级也会被暂停。

删除

单击工作负载名称后的“更多 > 删除”,并单击“是”进行确认。

批量删除

  1. 勾选需要删除的工作负载。
  2. 单击左上角的“批量删除”
  3. 单击“是”进行确认。