# 创建守护进程集（DaemonSet）
[守护进程集（DaemonSet）](https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/daemonset/)是Kubernetes提供的工作负载类型之一，它可以确保全部（或者某些）节点上始终运行着一个Pod实例。一旦有新的节点加入集群，DaemonSet控制器就会自动在这个新节点上创建一个新的Pod。反之，当某个节点从集群中移除时，该节点上的Pod会被自动清理掉。
DaemonSet适用于多种场景，特别是在需要在集群范围内提供一致服务场景，例如：
- **集群存储进程**：需要部署在集群中的每个节点上，确保所有节点都能访问存储后端，比如GlusterFS或Ceph。

- **日志采集进程**：例如Fluentd或Logstash，需要部署在每个节点上采集节点的日志数据，并转发到统一的日志系统。
- **监控进程**：例如Prometheus Node Exporter等，部署在每个节点上收集节点层面的性能数据。
#### 前提条件
- 在创建工作负载前，您需要存在一个可用集群。若没有可用集群 ，请参照[购买Standard/Turbo集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0028.html)中内容创建。
- 工作负载需要运行在节点上，因此集群中需要包含可用节点。如果集群中无可用节点，请参见[创建节点](https://support.huaweicloud.com/usermanual-cce/cce_10_0363.html)进行创建。
 
#### 创建守护进程集
您可以通过控制台或kubectl命令行创建守护进程集。
- [通过控制台创建]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
  
  2. 单击集群名称进入集群，在左侧选择"工作负载"，在右上角单击"创建工作负载"。
  
  3. 填写工作负载的**基本信息** 。
     
     
     | 参数     | 说明                                                                                                                                                       |
     |:---|:---|
     | 负载类型     | 选择守护进程DaemonSet。关于不同工作负载类型的介绍请参见[工作负载概述](https://support.huaweicloud.com/usermanual-cce/cce_10_0006.html)。                                                |
     | 负载名称  | 填写工作负载的名称。请输入1到63个字符的字符串，可以包含小写英文字母、数字和中划线（-），并以小写英文字母开头，小写英文字母或数字结尾。                                                                                      |
     | 命名空间     | 选择工作负载的命名空间，默认为default。您可以单击后面的"创建命名空间"，命名空间的详细介绍请参见[创建命名空间](https://support.huaweicloud.com/usermanual-cce/cce_10_0278.html)。                               |
     | 容器运行时 | 容器隧道网络CCE集群默认使用普通运行时，VPC网络CCE Standard集群和CCE Turbo集群可以使用普通运行时或安全运行时。具体区别请参见[安全运行时与普通运行时](https://support.huaweicloud.com/usermanual-cce/cce_10_0463.html)。 |
     | 时区同步  | 选择是否开启时区同步。开启后容器与节点使用相同时区（时区同步功能依赖容器中挂载的本地磁盘，请勿修改删除），时区同步详细介绍请参见[设置容器与节点时区同步](https://support.huaweicloud.com/usermanual-cce/cce_10_0354.html)。         |
        
     
     
  
  4. 填写工作负载的**容器配置** 。
     
     - 容器信息：Pod中可以配置多个容器，您可以单击右侧"添加容器"为Pod配置多个容器。
       ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/caution_3.0-zh-cn.png)
       单个Pod内如果配置了多个容器，请确保每个容器中使用的端口不冲突 ，否则工作负载将会部署失败。
       - 基本信息：配置容器的基本信息。
         
         | 参数            | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
         |:---|:---|
         | 容器名称         | 为容器命名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
         | 更新策略       | 镜像更新/拉取策略。可以勾选"总是拉取镜像"，表示每次都从镜像仓库拉取镜像；如不勾选则优先使用节点已有的镜像，如果没有这个镜像再从镜像仓库拉取。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
         | 镜像名称        | 单击后方"选择镜像"，选择容器使用的镜像。 - 容器镜像服务 共享版：提供简单易用、安全可靠的镜像管理功能。 - 我的镜像：可选择您上传的私有镜像。关于上传镜像的操作详情请参见[客户端上传镜像](https://support.huaweicloud.com/usermanual-swr/swr_01_0011.html)。  - 镜像中心：可选择SWR提供的公共镜像。关于镜像中心的说明请参见[镜像中心](https://support.huaweicloud.com/usermanual-swr/swr_01_0022.html)。  - 共享镜像：可选择由其他账号共享的镜像。关于共享镜像的操作详情请参见[共享私有镜像](https://support.huaweicloud.com/usermanual-swr/swr_01_0026.html)。    - 容器镜像服务 企业版：提供企业级的独享安全托管服务，支持镜像加签、镜像安全扫描，保障数据安全。 - 所属实例：选择企业版仓库实例，您需要提前购买一个企业版仓库，详情请参见[购买仓库](https://support.huaweicloud.com/usermanual2-swr/swr_02_0408.html)。  - 域名：企业版仓库支持配置多个自定义域名，您可以选择采用默认域名或自定义域名。关于自定义域名的操作详情请参见[域名管理](https://support.huaweicloud.com/usermanual2-swr/swr_02_0500.html)。     如果需要使用第三方镜像，可直接输入镜像地址，但需同时保证使用的[镜像访问凭证](https://support.huaweicloud.com/usermanual-cce/cce_10_0047.html#cce_10_0047__li1487514116369)可访问镜像仓库，详情请参见[使用第三方镜像](https://support.huaweicloud.com/usermanual-cce/cce_10_0009.html)。 如果使用SWR容器镜像服务企业版镜像，需同时保证使用的[镜像访问凭证](https://support.huaweicloud.com/usermanual-cce/cce_10_0047.html#cce_10_0047__li1487514116369)可访问SWR企业版镜像仓库，详情请参见[使用SWR企业版镜像仓库镜像](https://support.huaweicloud.com/usermanual-cce/cce_10_0948.html)。 |
         | 镜像版本       | 选择需要部署的镜像版本。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
         | CPU配额     | - 申请：容器需要使用的最小CPU值，默认0.25Core。  - 限制：允许容器使用的CPU最大值，防止占用过多资源。   如不填写申请值和限制值，表示不限制配额。申请值和限制值的配置说明及建议请参见[设置容器规格](https://support.huaweicloud.com/usermanual-cce/cce_10_0163.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
         | 内存配额      | - 申请：容器需要使用的内存最小值，默认512MiB。  - 限制：允许容器使用的内存最大值。如果超过，容器会被终止。   如不填写申请值和限制值，表示不限制配额。申请值和限制值的配置说明及建议请参见[设置容器规格](https://support.huaweicloud.com/usermanual-cce/cce_10_0163.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
         | GPU配额（可选） | 当集群中包含GPU节点时，才能设置GPU配额，且集群中需安装[CCE AI套件（NVIDIA GPU）](https://support.huaweicloud.com/usermanual-cce/cce_10_0141.html)插件。 - 不使用：表示不使用GPU。  - GPU 整卡：单个容器独享GPU。  - GPU 虚拟化：容器需要使用的GPU百分比，例如设置为10%，表示该容器需使用GPU资源的10%。   关于如何在集群中使用GPU，请参见[使用Kubernetes默认GPU调度](https://support.huaweicloud.com/usermanual-cce/cce_10_0345.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
         | NPU配额（可选）    | 当集群中包含NPU节点时，才能设置NPU配额，且集群中需安装[CCE AI套件（Ascend NPU）](https://support.huaweicloud.com/usermanual-cce/cce_10_0239.html)插件。 - 不使用：表示不使用NPU。  - NPU整卡调度：单个容器独享NPU芯片。  - NPU虚拟化：通过资源虚拟化的方式将物理机配置的NPU切分成若干份vNPU（虚拟NPU），再挂载到容器中使用。   关于如何在集群中使用NPU，请参见[NPU整卡调度](https://support.huaweicloud.com/usermanual-cce/cce_10_0346.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
         | 特权容器（可选）     | 特权容器是指容器里面的程序具有一定的特权。若选中，容器将获得超级权限，例如可以操作宿主机的网络设备、修改内核参数、以及访问节点上的所有设备等。 更多信息，请参见[Pod Security Standards](https://kubernetes.io/docs/concepts/security/pod-security-standards/)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
         | 初始化容器（可选）   | 选择容器是否作为初始化（Init）容器。初始化（Init）容器不支持设置健康检查。 Init容器是一种特殊容器，可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器，同时Pod中也可以有一个或多个先于应用容器启动的Init容器，当所有的Init 容器运行完成时，Pod中的应用容器才会启动并运行。详细说明请参见[Init 容器](https://kubernetes.io/zh/docs/concepts/workloads/pods/init-containers/)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
         | 容器启动项（可选）     | 为容器添加启动项参数，详情请参见[Pod参数](https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1/)。CCE当前支持以下容器启动项参数： - stdin：为容器开启标准输入，允许从外部源（如终端或其他输入流）接收输入。  - tty：为容器分配一个虚拟终端，允许您像在本地终端中一样向容器发送命令。 一般需要同时开启stdin，表示将终端（tty）绑定到容器的标准输入（stdin）上，可以支持类似于**kubectl exec -i -t**命令的交互式操作，但区别在于该参数在Pod启动时就已经配置完成。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
            
         
       
       
       
       - 生命周期（可选）：在容器的生命周期的特定阶段配置需要执行的操作，例如启动命令、启动后处理和停止前处理，详情请参见[设置容器生命周期](https://support.huaweicloud.com/usermanual-cce/cce_10_0105.html)。
       
       - 健康检查（可选）：根据需求选择是否设置存活探针、就绪探针及启动探针，详情请参见[设置容器健康检查](https://support.huaweicloud.com/usermanual-cce/cce_10_0112.html)。
       
       - 环境变量（可选）：支持通过键值对的形式为容器运行环境设置变量，可用于把外部信息传递给Pod中运行的容器，可以在应用部署后灵活修改，详情请参见[设置环境变量](https://support.huaweicloud.com/usermanual-cce/cce_10_0113.html)。
       
       - 数据存储（可选）：在容器内挂载本地存储或云存储，不同类型的存储使用场景及挂载方式不同，详情请参见[存储](https://support.huaweicloud.com/usermanual-cce/cce_10_0374.html)。
       
       - 安全设置（可选）：对容器权限进行设置，保护系统和其他容器不受其影响。请输入用户ID，容器将以当前用户权限运行。
       
       - 容器日志（可选）：容器标准输出日志将默认上报至 AOM 服务，无需独立配置。您可以手动配置日志采集路径，详情请参见[通过ICAgent采集容器日志](https://support.huaweicloud.com/usermanual-cce/cce_10_0018.html)。
         如需要关闭当前负载的标准输出，您可在"[高级配置 \> 标签与注解]"中添加键为kubernetes.AOM.log.stdout，值为\[\]的注解，即可关闭当前负载下全部容器的标准输出。该注解的使用方法请参见[表1](https://support.huaweicloud.com/usermanual-cce/cce_10_0386.html#cce_10_0386__table19757101213714)。
         
        
     
     - 镜像访问凭证：用于访问镜像仓库的凭证，默认取值为default-secret，使用default-secret可访问SWR共享版镜像仓库的镜像。default-secret详细说明请参见[default-secret](https://support.huaweicloud.com/usermanual-cce/cce_10_0388.html#cce_10_0388__section11760122012591)。
     
     - GPU显卡（可选）：默认为不限制。当集群中存在GPU节点时，工作负载实例可以调度到指定GPU显卡类型的节点上。
     
     
     
     
  
  5. （可选）填写工作负载关联的**服务配置** 。
     
     服务（Service）可为Pod提供外部访问。每个Service有一个固定IP地址，Service将访问流量转发给Pod，而且Service可以为这些Pod自动实现负载均衡。
     您也可以在创建完工作负载之后再创建Service，不同类型的Service概念和使用方法请参见[服务概述](https://support.huaweicloud.com/usermanual-cce/cce_10_0249.html)。
     
     
  
  6. （可选）填写工作负载中的**高级配置** 。
     
     
     | 参数       | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
     |:---|:---|
     | 升级策略  | 指定工作负载的升级方式及升级参数，支持滚动升级和替换升级，详情请参见[工作负载升级与回退](https://support.huaweicloud.com/usermanual-cce/cce_10_0397.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
     | 调度策略   | 通过配置亲和与反亲和规则，可实现灵活的工作负载调度，支持节点亲和。 - 节点亲和：提供常用的负载亲和策略，快速实现负载亲和部署。 - 不配置：不设置节点亲和策略。  - 指定节点调度：通过设置节点亲和（nodeAffinity）实现，指定工作负载的Pod部署的节点，若不指定，将根据集群默认调度策略随机调度。  - 指定节点池调度：通过设置节点亲和（nodeAffinity）实现，指定工作负载的Pod部署的节点池，若不指定，将根据集群默认调度策略随机调度。  - 自定义亲和策略：根据需求自定义设置亲和与反亲和规则，详情请参见[设置节点亲和调度（nodeAffinity）](https://support.huaweicloud.com/usermanual-cce/cce_10_0892.html)。                      |
     | 容忍策略     | 容忍策略与节点的污点能力配合使用，允许（不强制）负载调度到带有与之匹配的污点的节点上，也可用于控制负载所在的节点被标记污点后负载的驱逐策略，详情请参见[设置容忍策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0728.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
     | 标签与注解  | 以键值对形式为工作负载Pod添加标签或注解，填写完成后需单击"确认添加"。关于标签与注解的作用及配置说明，请参见[设置标签与注解](https://support.huaweicloud.com/usermanual-cce/cce_10_0386.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
     | DNS配置   | 为工作负载单独配置DNS策略，详情请参见[工作负载DNS配置说明](https://support.huaweicloud.com/usermanual-cce/cce_10_0365.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
     | 性能管理配置 | 使用应用性能管理（APM）服务，为JAVA程序提供更精准的问题分析与定位，详情请参见[设置性能管理配置](https://support.huaweicloud.com/usermanual-cce/cce_10_0055.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
     | 网络配置     | - Pod入/出口带宽限速：支持为Pod设置入/出口带宽限速，详情请参见[为Pod配置QoS](https://support.huaweicloud.com/usermanual-cce/cce_10_0382.html)。  - 是否开启指定容器网络配置：仅支持该功能的集群显示该选项，开启指定容器网络配置，工作负载使用指定的容器网络配置中的容器子网和安全组来创建，详情请参见[使用容器网络配置为命名空间/工作负载绑定子网及安全组](https://support.huaweicloud.com/usermanual-cce/cce_10_0196.html)。  - 指定容器网络配置名：只支持选择关联资源类型为工作负载类型的自定义容器网络配置。  - IPv6共享带宽：仅支持该功能的集群显示该选项，开启后可为Pod的IPv6双栈网卡绑定共享带宽，详情请参见[在CCE Turbo集群中为IPv6双栈网卡的Pod配置共享带宽](https://support.huaweicloud.com/usermanual-cce/cce_10_0604.html)。   |
        
     
     
  
  7. 单击右下角"创建工作负载"，等待一段时间后，工作负载状态为"运行中"。 
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002247096901.png "点击放大")
     
     
     
   
- [通过kubectl命令行创建]
  本节以nginx工作负载为例，说明kubectl命令创建工作负载的方法。
  1. 请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)，使用kubectl连接集群。
  
  2. 创建一个名为nginx-daemonset.yaml的描述文件。其中，nginx-daemonset.yaml为自定义名称，您可以随意命名。 
     ```
     vi nginx-daemonset.yaml
     ```
     描述文件内容如下。此处仅为示例，DaemonSet的详细说明请参见[Kubernetes官方文档](https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/daemonset/)。
     ```
     apiVersion: apps/v1
     kind: DaemonSet
     metadata:
       name: nginx-daemonset
       labels:
         app: nginx-daemonset
     spec:
       selector:
         matchLabels:
           app: nginx-daemonset
       template:
         metadata:
           labels:
             app: nginx-daemonset
         spec:
           nodeSelector:                 # 节点选择，当节点拥有daemon=need时才在节点上创建Pod
             daemon: need
           containers:
           - name: nginx-daemonset
             image: nginx:alpine
             resources:
               limits:
                 cpu: 250m
                 memory: 512Mi
               requests:
                 cpu: 250m
                 memory: 512Mi
           imagePullSecrets:
           - name: default-secret
     ```
     这里可以看出没有Deployment或StatefulSet中的replicas参数，因为是每个节点固定一个。
     Pod模板中有个nodeSelector，指定了只在有"daemon=need"的节点上才创建Pod，DaemonSet只在指定标签的节点上创建Pod。如果需要在每一个节点上创建Pod可以删除该标签。
     
     
  
  3. 创建daemonset。 
     ```
     kubectl create -f nginx-daemonset.yaml
     ```
     回显如下表示已开始创建daemonset。
     ```
     daemonset.apps/nginx-daemonset created
     ```
     
     
  
  4. 查看daemonset状态。 
     ```
     kubectl get ds
     ```
     回显如下：
     ```
     NAME              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
     nginx-daemonset   1         1         0       1            0           daemon=need     116s
     ```
     
     
  
  5. 若工作负载需要被访问（集群内访问或节点访问），您需要设置访问方式，具体请参见[网络](https://support.huaweicloud.com/usermanual-cce/cce_10_0020.html)创建对应服务。
   
#### 相关文档
- 如果创建工作负载时出现异常，请参见[工作负载状态异常定位方法](https://support.huaweicloud.com/cce_faq/cce_faq_00134.html)。
- 工作负载创建完成后，更多操作请参见[管理工作负载](https://support.huaweicloud.com/usermanual-cce/cce_10_0007.html)。
 
