创建守护进程集(DaemonSet)
守护进程集(DaemonSet)是Kubernetes提供的工作负载类型之一,它可以确保全部(或者某些)节点上始终运行着一个Pod实例。一旦有新的节点加入集群,DaemonSet控制器就会自动在这个新节点上创建一个新的Pod。反之,当某个节点从集群中移除时,该节点上的Pod会被自动清理掉。
DaemonSet适用于多种场景,特别是在需要在集群范围内提供一致服务场景,例如:
- 集群存储进程:需要部署在集群中的每个节点上,确保所有节点都能访问存储后端,比如GlusterFS或Ceph。
- 日志采集进程:例如Fluentd或Logstash,需要部署在每个节点上采集节点的日志数据,并转发到统一的日志系统。
- 监控进程:例如Prometheus Node Exporter等,部署在每个节点上收集节点层面的性能数据。
前提条件
- 在创建工作负载前,您需要存在一个可用集群。若没有可用集群 ,请参照购买Standard/Turbo集群中内容创建。
- 工作负载需要运行在节点上,因此集群中需要包含可用节点。如果集群中无可用节点,请参见创建节点进行创建。
通过控制台创建
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建工作负载”。
- 填写工作负载的基本信息。
参数
说明
负载类型
选择守护进程DaemonSet。关于不同工作负载类型的介绍请参见工作负载概述。
负载名称
填写工作负载的名称。请输入1到63个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
命名空间
选择工作负载的命名空间,默认为default。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间。
容器运行时
CCE Standard集群默认使用普通运行时,CCE Turbo集群可以使用普通运行时或安全运行时。具体区别请参见安全运行时与普通运行时。
时区同步
选择是否开启时区同步。开启后容器与节点使用相同时区(时区同步功能依赖容器中挂载的本地磁盘,请勿修改删除),时区同步详细介绍请参见设置容器与节点时区同步。
- 填写工作负载的容器配置。
- 容器信息:Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。
单个Pod内如果配置了多个容器,请确保每个容器中使用的端口不冲突 ,否则工作负载将会部署失败。
- 基本信息:配置容器的基本信息。
参数
说明
容器名称
为容器命名。
更新策略
镜像更新/拉取策略。可以勾选“总是拉取镜像”,表示每次都从镜像仓库拉取镜像;如不勾选则优使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。
镜像名称
单击后方“选择镜像”,选择容器使用的镜像。
- 容器镜像服务 共享版:提供简单易用、安全可靠的镜像管理功能。
- 容器镜像服务 企业版:提供企业级的独享安全托管服务,支持镜像加签、镜像安全扫描,保障数据安全。
如果需要使用第三方镜像,可直接输入镜像地址,但需同时保证使用的镜像访问凭证可访问镜像仓库,详情请参见使用第三方镜像。
如果使用SWR容器镜像服务企业版镜像,需同时保证使用的镜像访问凭证可访问SWR企业版镜像仓库,详情请参见使用SWR企业版镜像仓库镜像。
镜像版本
选择需要部署的镜像版本。
CPU配额
- 申请:容器需要使用的最小CPU值,默认0.25Core。
- 限制:允许容器使用的CPU最大值,防止占用过多资源。
如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。
内存配额
- 申请:容器需要使用的内存最小值,默认512MiB。
- 限制:允许容器使用的内存最大值。如果超过,容器会被终止。
如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。
GPU配额(可选)
当集群中包含GPU节点时,才能设置GPU配额,且集群中需安装CCE AI套件(NVIDIA GPU)插件。
- 不使用:表示不使用GPU。
- GPU 整卡:单个容器独享GPU。
- GPU 虚拟化:容器需要使用的GPU百分比,例如设置为10%,表示该容器需使用GPU资源的10%。
关于如何在集群中使用GPU,请参见使用Kubernetes默认GPU调度。
NPU配额(可选)
使用NPU芯片的数量,必须为整数,且必须安装CCE AI套件(Ascend NPU)插件后才能使用。
关于如何在集群中使用NPU,请参见NPU整卡调度。
特权容器(可选)
特权容器是指容器里面的程序具有一定的特权。
若选中,容器将获得超级权限,例如可以操作宿主机上面的网络设备、修改内核参数等。
初始化容器(可选)
选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。
Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见Init 容器。
容器启动项(可选)
为容器添加启动项参数,详情请参见Pod参数。CCE当前支持以下容器启动项参数:
- 生命周期(可选):在容器的生命周期的特定阶段配置需要执行的操作,例如启动命令、启动后处理和停止前处理,详情请参见设置容器生命周期。
- 健康检查(可选):根据需求选择是否设置存活探针、就绪探针及启动探针,详情请参见设置容器健康检查。
- 环境变量(可选):支持通过键值对的形式为容器运行环境设置变量,可用于把外部信息传递给Pod中运行的容器,可以在应用部署后灵活修改,详情请参见设置环境变量。
- 数据存储(可选):在容器内挂载本地存储或云存储,不同类型的存储使用场景及挂载方式不同,详情请参见存储。
- 安全设置(可选):对容器权限进行设置,保护系统和其他容器不受其影响。请输入用户ID,容器将以当前用户权限运行。
- 容器日志(可选):容器标准输出日志将默认上报至 AOM 服务,无需独立配置。您可以手动配置日志采集路径,详情请参见通过ICAgent采集容器日志(不推荐)。
如需要关闭当前负载的标准输出,您可在“高级配置 > 标签与注解”中添加键为kubernetes.AOM.log.stdout,值为[]的注解,即可关闭当前负载下全部容器的标准输出。该注解的使用方法请参见表1。
- 基本信息:配置容器的基本信息。
- 镜像访问凭证:用于访问镜像仓库的凭证,默认取值为default-secret,使用default-secret可访问SWR共享版镜像仓库的镜像。default-secret详细说明请参见default-secret。
- GPU显卡(可选):默认为不限制。当集群中存在GPU节点时,工作负载实例可以调度到指定GPU显卡类型的节点上。
- 容器信息:Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。
- (可选)填写工作负载关联的服务配置。
服务(Service)可为Pod提供外部访问。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以为这些Pod自动实现负载均衡。
您也可以在创建完工作负载之后再创建Service,不同类型的Service概念和使用方法请参见服务概述。
- (可选)填写工作负载中的高级配置。
参数
说明
升级策略
指定工作负载的升级方式及升级参数,支持滚动升级和替换升级,详情请参见工作负载升级与回退。
调度策略
通过配置亲和与反亲和规则,可实现灵活的工作负载调度,支持节点亲和。
- 节点亲和:提供常用的负载亲和策略,快速实现负载亲和部署。
- 不配置:不设置节点亲和策略。
- 指定节点调度:通过设置节点亲和(nodeAffinity)实现,指定工作负载的Pod部署的节点,若不指定,将根据集群默认调度策略随机调度。
- 指定节点池调度:通过设置节点亲和(nodeAffinity)实现,指定工作负载的Pod部署的节点池,若不指定,将根据集群默认调度策略随机调度。
- 自定义亲和策略:根据需求自定义设置亲和与反亲和规则,详情请参见设置节点亲和调度(nodeAffinity)。
容忍策略
容忍策略与节点的污点能力配合使用,允许(不强制)负载调度到带有与之匹配的污点的节点上,也可用于控制负载所在的节点被标记污点后负载的驱逐策略,详情请参见设置容忍策略。
标签与注解
以键值对形式为工作负载Pod添加标签或注解,填写完成后需单击“确认添加”。关于标签与注解的作用及配置说明,请参见设置标签与注解。
DNS配置
为工作负载单独配置DNS策略,详情请参见工作负载DNS配置说明。
性能管理配置
使用应用性能管理(APM)服务,为JAVA程序提供更精准的问题分析与定位,详情请参见设置性能管理配置。
网络配置
- Pod入/出口带宽限速:支持为Pod设置入/出口带宽限速,详情请参见为Pod配置QoS。
- 是否开启指定容器网络配置:仅支持该功能的集群显示该选项,开启指定容器网络配置,工作负载使用指定的容器网络配置中的容器子网跟安全组来创建,详情请参见使用容器网络配置为命名空间/工作负载绑定子网及安全组。
- 指定容器网络配置名:只支持选择关联资源类型为工作负载类型的自定义容器网络配置。
- IPv6共享带宽:仅支持该功能的集群显示该选项,开启后可为Pod的IPv6双栈网卡绑定共享带宽,详情请参见为IPv6双栈网卡的Pod配置共享带宽。
- 节点亲和:提供常用的负载亲和策略,快速实现负载亲和部署。
- 单击右下角“创建工作负载”,等待一段时间后,工作负载状态为“运行中”。
通过kubectl命令行创建
本节以nginx工作负载为例,说明kubectl命令创建工作负载的方法。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建一个名为nginx-daemonset.yaml的描述文件。其中,nginx-daemonset.yaml为自定义名称,您可以随意命名。
vi nginx-daemonset.yaml
描述文件内容如下。此处仅为示例,DaemonSet的详细说明请参见Kubernetes官方文档。
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可以删除该标签。
- 创建daemonset。
kubectl create -f nginx-daemonset.yaml
回显如下表示已开始创建daemonset。
daemonset.apps/nginx-daemonset created
- 查看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
- 若工作负载需要被访问(集群内访问或节点访问),您需要设置访问方式,具体请参见网络创建对应服务。
相关文档
- 如果创建工作负载时出现异常,请参见工作负载状态异常定位方法。
- 工作负载创建完成后,更多操作请参见管理工作负载。