文档首页 > > 用户指南> 工作负载> 创建无状态工作负载(Deployment)

创建无状态工作负载(Deployment)

分享
更新时间: 2019/11/22 GMT+08:00

在运行中始终不保存任何数据或状态的工作负载称为“无状态工作负载(deployment)”,例如nginx。

准备工作

  • 在创建容器工作负载前,您需要存在一个可用集群。若没有可用集群 ,请参照购买混合集群中内容创建。

    创建多个容器的工作负载时,请确保容器使用的端口不冲突 ,否则部署会失败。

  • 若工作负载需要被外网访问,请确保集群中至少有一个节点已绑定弹性IP,或已购买负载均衡实例。

通过控制台创建

云容器引擎提供了多种创建工作负载的方式,您可以通过如下方式进行创建:
  • 基于“Dockerhub官方镜像”创建工作负载,无需上传镜像。
  • 基于“我的镜像”创建工作负载,用户首先需要将镜像上传至容器镜像服务,上传镜像的方式请参考镜像管理
  • 基于“共享镜像”创建工作负载,即其它租户通过“容器镜像服务”共享给您的镜像。
  • 您希望通过YAML方式创建工作负载,您可在“创建无状态工作负载”页面单击界面右侧的YAML创建,通过yaml的方式创建工作负载。YAML的说明请参见表3。YAML编写完成后,可单击“创建”,直接创建工作负载。

    YAML文件是和界面保持同步的,您也可界面和YAML互动完成工作负载的创建。例如界面中填写工作负载名称后,YAML文件会自动关联该名称。例如界面中添加完镜像后,YAML中也会自动关联该镜像。

  1. 登录CCE控制台,在左侧导航栏中选择“工作负载 > 无状态(Deployment)”,单击“创建无状态工作负载”。参照表1设置工作负载基本信息,其中带“*”标志的参数为必填参数。

    表1 工作负载基本信息

    参数

    参数说明

    * 工作负载名称

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

    * 集群名称

    新建工作负载所在的集群。

    * 命名空间

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

    * 实例数量

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

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

    时区同步

    勾选“开启”,容器将和节点使用相同时区。

    须知:

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

    CCI弹性承载

    该参数仅在安装virtual kubelet插件后才显示,详情请参见virtual kubelet

    勾选此选项后,当集群资源不足时,支持将Pod部署到CCI集群。

    工作负载描述

    工作负载描述信息。

  2. 单击“下一步:容器设置”,添加容器。

    1. 单击“添加容器”,选择需要部署的镜像。
      • 我的镜像:展示了您创建的所有镜像仓库。
      • Dockerhub官方镜像:展示了Dockerhub仓库中的官方镜像。
      • 第三方镜像:CCE支持拉取第三方镜像仓库(即镜像仓库与Dockerhub之外的镜像仓库)的镜像创建工作负载。使用第三方镜像时,请确保工作负载运行的节点可访问公网。第三方镜像的具体使用方法请参见如何使用第三方镜像
        • 若您的镜像仓库不需要认证,密钥认证请选择“否”,并输入“镜像地址”,单击“确定”
        • 若您的镜像仓库都必须经过认证(帐号密码)才能访问,您需要先创建密钥再使用第三方镜像,具体操作请参见如何使用第三方镜像
      • 共享镜像:其它租户通过“容器镜像服务”共享给您的镜像将在此处展示,您可以基于共享镜像创建工作负载。
    2. 配置镜像基本信息。

      工作负载是Kubernetes对一组Pod的抽象模型,用于描述业务的运行载体,一个Pod可以封装1个或多个容器,您可以单击右上方的“添加容器”,添加多个容器镜像并分别进行设置。

      表2 镜像参数说明

      参数

      说明

      镜像名称

      导入的镜像,您可单击“更换镜像”进行更换。

      * 镜像版本

      若选择Dockerhub官方镜像,请选择需要部署的镜像版本。

      * 容器名称

      容器的名称,可修改。

      特权容器

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

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

      容器规格

      CPU配额:

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

      内存配额:

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

      申请和限制的详情请参见设置容器规格

      GPU配额:当集群中包含GPU节点时,才能设置GPU,无GPU节点不显示此选项。

      容器需要使用的GPU百分比。勾选“使用”并设置百分比,例如设置为10%,表示该容器需使用GPU资源的10%。若不勾选“使用”,或设置为0,则无法使用GPU资源。

      GPU显卡:工作负载实例将被调度到GPU显卡类型为指定显卡的节点上。

      若勾选“不限制”,容器将会随机使用节点中的任一显卡。您也可以勾选某个显卡,容器将使用特定显卡。

      D芯片配额:容器需要使用的D芯片的个数,此处须为整数。

      选用D芯片加速型实例并安装huawei-npu插件后该参数设置将生效。D芯片加速型实例目前已开放公测,该实例搭载高性能、低功耗的海思Ascend 310 AI处理器,适用于图像识别、视频处理、推理计算以及机器学习等场景,点此可立即申请

    3. 生命周期:用于设置容器启动和运行时需要执行的命令。
      • 启动命令:设置容器启动时执行的命令,详情请参见设置容器启动命令
      • 启动后处理:设置容器成功运行后执行的命令,详细配置方法请参见设置容器生命周期
      • 停止前处理:设置容器结束前执行的命令,通常用于删除日志/临时文件等,详细配置方法请参见设置容器生命周期
    4. 健康检查:CCE提供了存活与业务两种探针,用于判断容器和用户业务是否正常运行。详细配置方法请参见设置容器健康检查
      • 工作负载存活探针:检查容器是否正常,不正常则重启实例。
      • 工作负载业务探针:检查用户业务是否就绪,不就绪则不转发流量到当前实例。
    5. 环境变量:在容器中添加环境变量,一般用于通过环境变量设置参数。
      “环境变量”页签,单击 “添加环境变量”,当前支持三种类型:
      • 手动添加:输入变量名称、变量/变量引用。
      • 密钥导入:输入变量名称,选择导入的密钥名称和数据。您需要提前创建密钥,详情请参见创建密钥
      • 配置项导入:输入变量名称,选择导入的配置项名称和数据。您需要提前创建配置项,详情请参见创建配置项

        对于已设置的环境变量,单击环境变量后的“编辑”,可对该环境变量进行编辑。单击环境变量后的“删除”,可删除该环境变量。

    6. 数据存储:给容器挂载数据存储,支持本地磁盘和云存储,适用于需持久化存储、高磁盘IO等场景。详情请参见使用本地磁盘存储使用文件存储卷使用对象存储卷使用极速文件存储卷
    7. 安全设置:对容器权限进行设置,保护系统和其他容器不受其影响。

      请输入用户ID,容器将以当前用户权限运行。

    8. 容器日志:设置容器日志采集策略、配置日志目录。用于收集容器日志便于统一管理和分析。详细配置请参见采集容器标准输出日志采集容器内路径日志

  3. 单击“下一步:工作负载访问设置”,单击“添加服务”,设置工作负载访问方式。

    若工作负载需要和其它服务互访,或需要被公网访问,您需要添加服务,设置工作负载访问方式。

    工作负载访问的方式决定了这个工作负载的网络属性,不同访问方式的工作负载可以提供不同网络能力,详情请参见网络概述

  4. 单击“下一步:高级设置”,配置更多高级策略。

    • 升级策略:你可以指定无状态工作负载的升级方式,包括逐步“滚动升级”和整体“替换升级”
      • 滚动升级:将逐步用新版本的实例替换旧版本的实例,升级的过程中,业务流量会同时负载均衡分布到新老的实例上,因此业务不会中断。
        • 最大无效实例数:每次滚动升级允许的最大无效实例数,如果等于实例数有断服风险(最小存活实例数 = 实例数 - 最大无效实例数)。
      • 替换升级:将先把您工作负载的老版本实例删除,再安装指定的新版本,升级过程中业务会中断。
    • 缩容策略:为工作负载删除提供一个时间窗,预留给生命周期中PreStop阶段执行命令。若超过此时间窗,进程仍未停止,该工作负载将被强制删除。
      • 缩容时间窗 (s):请输入时间,该时间为工作负载停止前命令的执行时间窗(0-9999秒),默认30秒。
    • 迁移策略:当工作负载实例所在的节点不可用时,系统将实例重新调度到其它可用节点的时间窗。
      • 迁移时间窗 (s):请输入时间,默认为300秒。
    • 调度策略:你可以根据需要自由组合静态的全局调度策略或动态的运行时调度策略来实现自己的需求。详情请参见调度策略概述
    • Pod高级设置
      • Pod标签:内置app标签在工作负载创建时指定,暂不支持修改。您可以单击下方的“添加标签”增加标签。
      • 弹性网卡:Pod中的容器支持绑定弹性网卡。单击选中“绑定弹性网卡”可以绑定已有的网络平面,如果没有可绑定的网络平面,请单击右侧的“添加网络平面”,完成添加后单击刷新按钮。更多网络平面信息请参见网络平面(NetworkAttachmentDefinition)
        • 仅v1.13.7-r0及以上版本且网络模型为VPC网络的混合集群才能绑定弹性网卡,不符合条件的集群将不显示“弹性网卡”选项。
        • 网络平面是CCE新增的一种crd资源,记录了租户ID,子网ID,安全组等的配置项,作为申请弹性网卡的配置信息。
        • 创建工作负载时,在设置工作负载访问方式步骤中如果添加了节点级别的Service,将无法绑定弹性网卡;同理,绑定了弹性网卡的工作负载,将无法添加节点级别的Service。
      图1 Pod高级设置
    • 客户端DNS配置:CCE集群内置DNS插件CoreDNS,为集群内的工作负载提供域名解析服务。详细使用方法请参见Kubernetes集群内置DNS使用指南
      • DNS策略:
        • 追加域名解析配置:选择该配置后,将保留默认配置,以下“IP地址”“搜索域”配置可能不生效。
        • 替换域名解析配置:选择该配置后,将仅使用以下“IP地址”“搜索域”配置进行域名解析。
        • 继承Pod所在节点域名解析配置:将继承Pod所在节点的域名解析配置。
      • IP地址:您可对自定义的域名配置域名服务器,值为一个或一组DNS IP地址,如“1.2.3.4”。
      • 搜索域:定义域名的搜索域列表,当访问的域名不能被DNS解析时,会把该域名与搜索域列表中的域依次进行组合,并重新向DNS发起请求,直到域名被正确解析或者尝试完搜索域列表为止。
      • 超时时间(s):查询超时时间,请自定义。
      • ndots:表示域名中必须出现的“.”的个数,如果域名中的“.”的个数不小于ndots,则该域名为一个FQDN,操作系统会直接查询;如果域名中的“.”的个数小于ndots,操作系统会在搜索域中进行查询。
    • 自定义指标监控:是指监控系统提供的一种指标收集机制,该机制允许工作负载在部署时自定义需要上报的指标名称以及获取这些指标数据的接入点信息,在应用运行时由监控系统按固定的频率访问接入点进行指标的收集。详细请参见对接普罗米修斯(自定义监控)
    • 性能管理配置:华为云的性能管理服务可协助您快速进行工作负载的问题定位与性能瓶颈分析。详细请参见性能管理配置(性能瓶颈分析)

  5. 配置完成后,单击“创建”,在创建成功页面单击“返回工作负载列表”,查看工作负载状态。

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

    工作负载状态不会实时更新,请单击右上角的图标或按F5刷新页面查看。

  6. 在“工作负载”页面的工作负载列表中,复制“外部访问地址”,可在浏览器中访问工作负载。

    • 当工作负载访问方式设为“节点访问(NodePort)”并绑定弹性IP或设为“负载均衡 ( LoadBalancer )”时,才可以获取外部访问地址,可以访问外网。
    • 工作负载列表页在超过500条以上时,将采用Kubernetes的分页机制进行分页。Kubernetes的分页机制:仅支持回到第一页和查看下一页,不支持查看上一页,且在分页显示的情况下,资源总数显示的是批量查询出的数目而不是真实总数。

通过kubectl命令行创建

本节以nginx工作负载为例,说明kubectl命令创建工作负载的方法。

前提条件

请参见通过kubectl连接集群配置kubectl命令,使弹性云服务器连接集群。

操作步骤

  1. 登录已配置好kubectl命令的弹性云服务器。登录方法请参见登录Linux弹性云服务器
  2. 创建一个名为nginx-deployment.yaml的描述文件。其中,nginx-deployment.yaml为自定义名称,您可以随意命名。

    vi nginx-deployment.yaml

    描述文件内容如下。此处仅为示例,deployment的详细说明请参见kubernetes官方文档

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      strategy:
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx 
            imagePullPolicy: Always
            name: nginx
          imagePullSecrets:
          - name: default-secret

    以上yaml字段解释如表3

    表3 deployment字段详解

    字段名称

    字段说明

    必选/可选

    apiVersion

    表示API的版本号。

    说明:

    集群版本为1.9之前的无状态应用apiVersion格式为extensions/v1beta1,1.9之后的集群兼容extensions/v1beta1和apps/v1两种格式Version,请根据集群版本输入。

    必选

    kind

    创建的对象类别。

    必选

    metadata

    资源对象的元数据定义。

    必选

    name

    deployment的名称。

    必选

    Spec

    用户对deployment的详细描述的主体部分都在spec中给出。

    必选

    replicas

    实例数量。

    必选

    selector

    定义Deployment可管理的容器实例。

    必选

    strategy

    升级类型。当前支持两种升级方式,默认为滚动升级。

    • RollingUpdate:滚动升级。
    • ReplaceUpdate:替换升级。

    可选

    template

    描述创建的容器实例详细信息。

    必选

    metadata

    元数据。

    必选

    labels

    metadata.labels定义容器标签。

    可选

    spec:

    containers

    • image(必选):容器镜像名称。
    • imagePullPolicy(可选):获取镜像的策略,可选值包括Always(每次都尝试重新下载镜像)、Never(仅使用本地镜像)、IfNotPresent(如果本地有该镜像,则使用本地镜像,本地不存在时下载镜像),默认为Always。
    • name(必选):容器名称。

    必选

    imagePullSecrets

    Pull镜像时使用的secret名称。若使用私有镜像,该参数为必选。

    • 需要Pull SWR容器镜像仓库的镜像时,参数值固定为default-secret。
    • 当Pull第三方镜像仓库的镜像时,需设置为创建的secret名称。

    可选

  3. 创建deployment。

    kubectl create -f nginx-deployment.yaml

    回显如下表示已开始创建deployment。

    deployment "nginx" created

  4. 查看deployment状态。

    kubectl get po

    deploymen状态显示为Running,表示deploymen已创建成功。

    NAME                     READY     STATUS    RESTARTS   AGE
    icagent-m9dkt            0/0       Running   0          3d
    nginx-1212400781-qv313   1/1       Running   0          3d

  5. 若工作负载(即deployment)需要被访问(集群内访问或节点访问),您需要设置访问方式,详情请参见网络管理创建对应服务。
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区