Daemonset管理
所有文档
menu

容器引擎 CCE

Daemonset管理

产品详情自助选购

概述

守护进程(DaemonSet)确保集群中符合条件的节点上有且仅有一个 Daemon Pod 运行。守护进程适合于系统层面的应用,例如日志收集、资源监控等,可以有效保障集群中的基础服务的可用性,关于DaemonSet的更多信息,请参见官方文档。用户可以通过表单方式基于镜像创建守护进程应用,也可以通过百度智能云提供的YAML文件模板创建和修改守护进程应用,对已守护进程关联的容器组(Pod)、事件等进行控制管理。

DaemonSet 介绍

DaemonSet保证在每个Node上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。使用DaemonSet的一些典型用法:

  • 运行集群存储daemon,例如在每个节点上运行glusterd、ceph。
  • 在每个节点上运行日志收集daemon,例如fluentd、logstash。
  • 在每个节点上运行监控daemon,例如Prometheus Node Exporter、collectd、Datadog代理、New Relic代理,或Ganglia gmond。

一种简单的用法是为每种类型的守护进程在所有的节点上都启动一个DaemonSet。一个稍微复杂的用法是为同一种守护进程部署多个DaemonSet;每个具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU要求。

前提条件

创建守护进程集 DaemonSet

用户可以选择通过 CCE 控制台使用表单形式或者通过 YAML 形式创建新的守护进程集,也可以选择通过 kubectl 命令创建。

通过控制台表单形式创建

  1. 登录守护进程集负载管理页面。

    a. 登录 容器引擎CCE控制台。
    b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
    c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 守护进程集

  2. 点击守护进程集列表左上角新建守护进程集,进入创建守护进程集页面。
  3. 在基本信息模块填写工作负载名称、命名空间、容器组数量、Pod 标签,点击下一步进入容器配置。

基本信息

参数 说明
工作负载名称 根据系统提示,配置工作负载的名称。在同一个命名空间下,名称必须唯一。
命名空间 选择工作负载部署的命名空间,默认为default。支持选择自定义创建的命名空间,自定义命名空间,请参见 命名空间操作
工作负载类型 选择守护进程集DaemonSet。
期望 Pod 数 输入工作负载的 Pod 实例个数。
K8s标签 Kubernetes 中的 Label,用于识别工作负载的键值对,配合选择器,帮助 Kubernetes 快速筛选目标工作负载。详细信息参考K8S 标签说明
注释 填写工作负载的注解信息,对应 Kubernetes 中的 Annotation,主要记录用于应用部署、安全策略、调度策略的附加信息,不用于标识和区分资源。详细信息参考K8S 注释说明
  1. 在容器配置模块,填写容器名称和镜像地址,可点击选择镜像后在弹窗中选择 CCR 中的镜像地址。点击下一步进入高级配置模块。

    说明

    • Pod 中可以配置多个容器,您可以单击右侧“添加容器”为 Pod 配置多个容器。
    • 若使用了 CCR 私有镜像,还需在当前页面的高级设置中配置仓库访问凭证。

容器配置

参数 说明
容器名称 根据系统提示的命名规则,输入容器名称。同一个工作负载下容器名称必须唯一。
镜像地址 单击后方“选择镜像”,选择容器使用的镜像。支持选择以下两种种类型的镜像。
  • 容器镜像企业版 :可以选择托管在容器镜像服务 CCR 中的企业版镜像。关于 CCR 的更多信息,详细信息请参考 CCR 企业版快速入门
  • 容器镜像个人版:可以选择托管在容器镜像服务ACR中的个人版镜像。关于 CCR 的更多信息,详细信息请参考CCR 个人版说明
  • 镜像版本 选择需要部署的镜像版本。
    镜像拉取策略 选择镜像拉取策略。CCE 支持以下三种镜像拉取策略(imagePullPolicy):
  • 优先使用本地镜像(IfNotPresent):如果节点上有本地镜像,则使用本地镜像,本地不存在时拉取镜像。
  • 总是拉取镜像(Always)(默认):表示每次部署或扩容都会从容器镜像服务重新拉取镜像,而不会从本地拉取镜像。
  • 仅使用本地镜像(Never):仅使用本地镜像,本地无镜像时拉取失败。
  • 容器配额 配置容器资源的resources.limits和容器资源的resources.requests。如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议,请参见Requests and Limits
  • CPU配额:
    • 申请:容器需要使用的最小CPU值,默认0.25Core。
    • 限制:允许容器使用的CPU最大值,防止占用过多资源。
  • 内存配额:
    • 申请:容器需要使用的内存最小值,默认512MiB。
    • 限制:允许容器使用的内存最大值。如果超过,容器会被终止。
  • 加速卡资源申请:仅具有 GPU/NPU 计算型节点的集群,可配置 GPU/NPU 资源。开启之后按需选择设置 GPU 和 NPU。
    • 注意:若需要支持GPU感知调度,以及GPU算力和显存的共享与隔离,集群中需安装CCE GPU Manager组件。若需要 NPU 感知调度,以及按算力和显存分配NPU资源,请先安装CCE NPU Manager 组件
    • 不开启:表示不使用GPU。
    • 独占GPU:单个容器独享GPU。
  • 容器端口 设置容器端口名称、协议、端口。
  • 容器端口的名称:仅用于区分端口,没有实际功能。
  • 协议:容器端口使用的4层(传输层)协议,支持TCP和UDP。
  • 设置容器对外暴露的端口:必须介于1~65535之间。容器只有对外暴露端口,才能实现对Pod外暴露以及Pod中容器互相通信。一个Pod中的所有容器共享Pod的网络协议栈,因此在Pod中配置多个容器时,端口不能重复。
  • 环境变量 单击 添加环境变量,配置环境变量。Kubernetes 在创建 Pod 时,会将环境变量的信息注入到容器中。 支持以下类型:
  • 自定义:使用env直接在工作负载中硬编码环境变量,支持输入变量名称和变量值,创建自定义的环境变量。
  • 配置项(ConfigMap):使用envFrom获取存储在ConfigMap中的非敏感配置数据。支持部分引用或全部引用配置项中的变量。部分引用时,一条规则仅支持为一个 Key 创建环境变量。
  • 保密字典(Secret):使用envFrom获取存储在ConfigMap中的敏感信息,如密码、API 密钥等。支持部分引用或全部引用保密字典中的变量。部分引用时,一条规则仅支持为一个 Key 创建环境变量。
  • 特权容器 默认不开启。开启后,特权模式允许容器拥有与所在的Worker节点操作系统近似的权限,例如访问硬件设备、挂载文件系统等。
    初始化容器 默认不开启。选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见 Init 容器
  • 注意:容器组中不能全为初始化容器,需要保证至少有一个非初始化容器。若容器组中有多个初始化容器,它们的运行顺序将与其创建顺序一致。
  • 生命周期 在容器的生命周期的特定阶段配置需要执行的操作,例如启动命令、启动后处理和停止前处理,详情请参见设置容器生命周期。
  • 启动命令:为容器设置预启动命令和参数。启动命令与参数定义了容器启动时执行的操作,用于初始化应用服务。适用于需要特定环境变量、挂载点或端口映射的应用部署场景。
  • 启动后处理:为容器设置启动后的命令。启动后处理命令用于容器启动后执行特定任务,如初始化配置、运行脚本等,适用于需要在主进程前完成准备工作的场景。
  • 停止前处理:为容器设置预结束命令。停止前处理命令用于关闭容器内的应用进程,确保数据一致性与服务正常终止。适用于需安全停机避免数据丢失或服务异常的场景。
  • 仓库访问凭证 若有容器使用了私有镜像,请务必添加对应的镜像仓库的访问凭证。支持新建访问凭证和选择已有的,详细信息参考配置访问凭证

    1. 在高级设置模块中,配置调度策略,点击完成进行工作负载的创建。

    高级配置

    参数 说明
    调度策略 通过配置亲和与反亲和规则,可实现灵活的工作负载调度,支持负载亲和与节点亲和。
  • 节点亲和性:配置工作负载和节点的亲和性调度。包括:强制满足和尽量满足。
    • 不配置:不设置节点亲和策略。
    • 强制调度:通过匹配标签进行调度选择。可以设置 6 种匹配关系(In, NotIn, Exists, DoesNotExist, gt, lt)。
    • 尽量满足:通过匹配标签进行调度选择,允许配置权重。可以设置 6 种匹配关系(In, NotIn, Exists, DoesNotExist, gt, lt)。
  • Pod亲和性:选择Pod将与那些Pod部署在同一拓扑域,设置强制满足/尽量满足(Required/Preferred)条件,多条规则中的标签必须同时在一个工作负载中。包括:强制满足和尽量满足。
    • 不配置:不设置Pod亲和策略。
    • 强制满足:基于命名空间、拓扑域。支持配置选择器(MatchExpressions、MatchLabels)。通过匹配标签进行调度选择。可以设置 4 种匹配关系(In, NotIn, Exists, DoesNotExist)。
    • 尽量满足:基于命名空间、拓扑域。支持配置选择器(MatchExpressions、MatchLabels)。通过匹配标签进行调度选择,允许配置权重。可以设置 4 种匹配关系(In, NotIn, Exists, DoesNotExist)。
  • Pod 反亲和性:选择Pod将不与那些Pod部署在同一拓扑域,设置强制满足/尽量满足(Required/Preferred)条件,多条规则中的标签必须同时在一个工作负载中。包括:强制满足和尽量满足。
    • 不配置:不设置Pod反亲和策略。
    • 强制满足:基于命名空间、拓扑域。支持配置选择器(MatchExpressions、MatchLabels)。通过匹配标签进行调度选择。可以设置 4 种匹配关系(In, NotIn, Exists, DoesNotExist)。
    • 尽量满足:基于命名空间、拓扑域。支持配置选择器(MatchExpressions、MatchLabels)。通过匹配标签进行调度选择,允许配置权重。可以设置 4 种匹配关系(In, NotIn, Exists, DoesNotExist)。
  • 容忍设置 :容忍策略与节点的污点能力配合使用,允许(不强制)负载调度到带有与之匹配的污点的节点上,也可用于控制负载所在的节点被标记污点后负载的驱逐策略,详细信息请参考污点和容忍说明

  • 方式二:通过 YAML 创建

    1. 点击部署列表左上角使用YAML创建,进入新建工作负载页面。
    2. 点击下拉列表选择命名空间,填写 yaml 文件,点击确定。

      说明:

      • 模板类型:可使用示例模板或“我的模板”创建。
      • 复制:复制当前 YAML 文件的内容。
      • 另存为:将当前文件模版另存为“我的模版”。
      • 取消:返回列表页。
      • 确定:创建守护进程。

    工作负载YAML示例

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: daemonset-example
    spec:
      minReadySeconds: 0
      selector:
        matchLabels:
          app: daemonset-example
      revisionHistoryLimit: 10
      template:
        metadata:
          labels:
            app: daemonset-example
        spec:
          containers:
            - name: daemonset-example
              image: registry.baidubce.com/cce/busybox:latest
              command:
              - sleep
              - "3600"
      updateStrategy:
        type: RollingUpdate

    方式三:通过 kubectl 创建

    1. 准备 Daemonset yaml 文件。
    2. 安装 kubectl,并连接集群,详情参见 通过 kubectl 连接集群
    3. 复制下方的YAML文件,并保存到 daemonset.yaml中。

      注意:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: daemonset-example
    spec:
      minReadySeconds: 0
      selector:
        matchLabels:
          app: daemonset-example
      revisionHistoryLimit: 10
      template:
        metadata:
          labels:
            app: daemonset-example
        spec:
          containers:
            - name: daemonset-example
              image: registry.baidubce.com/cce/busybox:latest
              command:
              - sleep
              - "3600"
      updateStrategy:
        type: RollingUpdate
    1. 执行以下命令创建 DaemonSet。
    kubectl apply -f daemonset.yaml

    预期输出

    daemonset.apps/daemonset-example created
    1. 执行以下命令,查看DaemonSet Pod的详细信息。
    kubectl get pods --all-namespaces -o wide | grep daemonset-example

    查看守护进程集详情

    点击列表页任何一行的工作负载名称,即可进入工作负载详情页,详情页内容包括: 工作负载详情、关联容器组、自动伸缩、更新升级、调度策略、监控、事件等信息。

    image.png

    更新守护进程集

    支持通过控制台界面或 YAML 文件编辑已创建的守护进程集。

    1. 登录守护进程集负载管理页面。

      a. 登录 容器引擎CCE控制台
      b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
      c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 守护进程集。

    2. 在目标守护进程集的操作列,单击 更新升级编辑 YAML

    说明:
    通过控制台界面更新和编辑 YAML 文件更新,均不支持更新守护进程集名称、命名空间。

    a. 更新:在控制台更新配置信息。详细的参数说明,请参见 [通过控制台创建](https://cloud.baidu.com/doc/CCE/s/cjxpoxrgi)。<br>
    b. 编辑 YAML:编辑 YAML 文件更新配置信息。详细的 YAML 配置说明,请参见[通过 YAML 创建](https://cloud.baidu.com/doc/CCE/s/cjxpoxrgi)。<br>
    1. 更新完成后,单击更新

    标签注解管理

    标签是以key/value键值对的形式附加在守护进程集工作负载上的。添加标签后,可通过标签对守护进程集工作负载进行管理和选择。您可以给多个工作负载打标签,也可以给指定的某个工作负载打标签。

    说明
    标签格式要求如下:以字母和数字开头或结尾,由字母、数字、连接符(-)、下划线(_)、点号(.)组成且63字符以内,详细 K8S标签说明

    1. 登录守护进程集管理页面。

      a. 登录 容器引擎CCE控制台
      b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
      c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 守护进程集

    2. 选择“守护进程集”页签,单击工作负载后的“更多 > 标签注解”。
    3. 单击添加标签,输入键和值后单击更新

    查看监控

    您可以通过 CCE 控制台查看工作负载和容器组的 CPU 和内存占用情况,以确定需要的资源规格。

    说明
    查看工作负载的监控信息时,依赖集群接入 Prometheus 监控服务。若集群未接入Prometheues 监控服务,请根据界面提示接入,详细信息请参见使用Prometheus监控集群

    1. 登录守护进程集负载管理页面。

      a. 登录 容器引擎CCE控制台
      b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
      c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 守护进程集

    2. 在目标守护进程集负载的列表,点击需要调整的守护进程集行中的“监控”。
    3. 在监控页面查看守护进程集的监控数据。容器相关监控指标说明,请参见 监控指标说明

    查看日志

    您可以通过“日志”功能查看守护进程集工作负载的日志信息。

    说明
    当前显示的日志内容为容器标准输出日志,不具备持久化和高阶运维能力,如需使用更完善的日志能力,可使用日志中心功能

    1. 登录守护进程集负载管理页面。

      a. 登录 容器引擎CCE控制台
      b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
      c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 守护进程集

    2. 在目标守护进程集工作负载的列表,单击工作负载后的“更多 > 日志”。
    3. 在日志页面查看容器日志数据。

    删除守护进程集

    若工作负载无需再使用,您可以将工作负载删除。

    说明
    删除守护进程集负载可能导致服务不可用,请谨慎操作。

    1. 登录守护进程集负载管理页面。

      a. 登录 容器引擎CCE控制台
      b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
      c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 守护进程集

    2. 在目标守护进程集负载的列表,单击工作负载后的“更多 > 删除”。
    3. 在系统弹出的二次确认对话框,确认信息后,点击确认

    image.png

    上一篇
    Deployment管理
    下一篇
    Statefulset管理