守护进程集
目录
理解 DaemonSets创建 DaemonSets使用 CLI 创建 DaemonSet前提条件YAML 文件示例通过 YAML 创建 DaemonSet使用 Web 控制台创建 DaemonSet前提条件操作步骤 - 配置基本信息操作步骤 - 配置 Pod操作步骤 - 配置容器操作步骤 - 创建使用新 Web 控制台创建 DaemonSet管理 DaemonSets使用 CLI 管理 DaemonSet查看 DaemonSet更新 DaemonSet删除 DaemonSet使用 Web 控制台管理 DaemonSet查看 DaemonSet更新 DaemonSet删除 DaemonSet理解 DaemonSets
请参阅 Kubernetes 官方文档:DaemonSets
DaemonSet 是一个 Kubernetes 控制器,可确保集群中的所有(或部分)节点恰好运行指定 Pod 的一个副本。与 Deployment 不同,DaemonSet 以节点为中心,而不是以应用为中心,因此非常适合部署集群范围的基础设施服务,例如日志收集器、监控代理或存储守护进程。
DaemonSet 运行说明
-
行为特征
-
Pod 分布:DaemonSet 会在每个满足条件且可调度的 Node 上部署恰好一个 Pod 副本:
- 部署到每个满足以下条件的可调度节点上,且每个节点仅部署一个 Pod 副本:
- 符合
nodeSelector或nodeAffinity条件(如果已指定)。 - 处于
NotReady状态之外。 - 没有
NoSchedule或NoExecuteTaints,除非在 Pod Template 中配置了相应的 Tolerations。
- 符合
- 部署到每个满足以下条件的可调度节点上,且每个节点仅部署一个 Pod 副本:
-
Pod 数量公式:DaemonSet 管理的 Pod 数量 等于 合格 Node 的数量。
-
双角色节点处理:同时承担 Control Plane 和 Worker Node 角色的节点,只要可调度,无论其角色标签如何,都只会运行一个 DaemonSet 的 Pod 实例。
-
-
关键约束(被排除的节点)
- 明确标记为
Unschedulable: true的节点(例如通过kubectl cordon)。 - 状态为
NotReady的节点。 - 存在不兼容 Taints 且在 DaemonSet 的 Pod Template 中未配置匹配 Tolerations 的节点。
- 明确标记为
创建 DaemonSets
使用 CLI 创建 DaemonSet
前提条件
- 确保已配置
kubectl并已连接到集群。
YAML 文件示例
通过 YAML 创建 DaemonSet
使用 Web 控制台创建 DaemonSet
前提条件
获取镜像地址。镜像来源可以是平台管理员通过工具链集成的镜像仓库,也可以是第三方平台的镜像仓库。
-
对于前者,管理员通常会将镜像仓库分配给你的项目,你可以使用其中的镜像。如果未找到所需的镜像仓库,请联系管理员进行分配。
-
如果是第三方平台的镜像仓库,请确保在当前集群中可以直接从该仓库拉取镜像。
-
如果镜像仓库需要认证,则需要配置相应的 image pull secret。更多信息,请参阅 为 ServiceAccount 添加 ImagePullSecrets。
-
通过 OCI Connector 选择镜像时,还需要为 Connector 代理选择一个 image pull Secret,或者确认工作负载的 ServiceAccount 已经引用了该 Secret。请参阅 通过 OCI Connector 使用 ImagePullSecret。
操作步骤 - 配置基本信息
-
在左侧导航栏中,进入 Container Platform > Workloads > DaemonSets。
-
点击 Create DaemonSet。
-
选择或输入一个镜像,然后点击 Confirm。
注意:当使用 Web 控制台中已集成的镜像仓库里的镜像时,可以通过 Already Integrated 进行筛选。Integration Project Name,例如镜像(registry-projectname),其中包含此 Web 控制台中的项目名称 projectname 以及镜像仓库中的项目名称 containers。
在 Basic Info 部分,为 DaemonSet 工作负载配置声明式参数:
操作步骤 - 配置 Pod
Pod 部分请参阅 Deployment - 配置 Pod
操作步骤 - 配置容器
Containers 部分请参阅 Deployment - 配置容器
操作步骤 - 创建
点击 Create。
点击 Create 后,DaemonSet 将:
-
✅ 自动将 Pod 副本部署到所有满足以下条件的合格节点上:
- 满足
nodeSelector条件(如果已定义)。 - 配置了
tolerations(允许调度到带污点的节点)。 - 节点处于
Ready状态且Schedulable: true。
- 满足
-
❌ 被排除的节点:
- 带有
NoSchedule污点的节点(除非显式容忍)。 - 手动封锁的节点(
kubectl cordon)。 - 处于
NotReady或Unschedulable状态的节点。
- 带有
使用新 Web 控制台创建 DaemonSet
新 Web 控制台可以从不同视图暴露 DaemonSet 的创建入口。请根据你是从项目范围还是从具体集群出发,选择相应入口。
- Applications view:从当前项目开始。打开 Workloads > DaemonSets,选择目标 Cluster 和 Namespace,然后选择会生成 DaemonSet 的工作负载模型或创建流程。
- Clusters view:从具体集群开始。先打开目标集群,进入目标命名空间,然后导航到 Workloads > DaemonSets,点击 Create DaemonSet。
管理 DaemonSets
使用 CLI 管理 DaemonSet
查看 DaemonSet
-
获取某个命名空间中所有 DaemonSet 的摘要信息。
-
获取某个特定 DaemonSet 的详细信息,包括其事件和 Pod 状态。
更新 DaemonSet
当你修改 DaemonSet 的 Pod Template 时(例如更改容器镜像或添加卷挂载),Kubernetes 会默认自动执行滚动更新(如果 updateStrategy.type 为 RollingUpdate,这也是默认值)。
在更改镜像或 OCI Connector 之前,请确认 Connector 代理的 image pull Secret 可通过 Pod 直接访问,或通过其 ServiceAccount 访问。每个目标节点的容器运行时都必须能够访问 Connector 代理地址。更新期间,请检查每个节点上 Pod 的 Connector 注解、重写后的代理镜像、状态和 Events。
-
首先,编辑 YAML 文件(例如
example-daemonset.yaml)以应用所需更改,然后执行: -
你可以监控滚动更新的进度:
删除 DaemonSet
删除 DaemonSet 及其管理的所有 Pod:
使用 Web 控制台管理 DaemonSet
查看 DaemonSet
- 在 Container Platform 中,导航到 Workloads > DaemonSets。
- 找到你想查看的 DaemonSet。
- 单击 DaemonSet 名称,查看 Details、Topology、Logs、Events、Monitoring 等信息。
更新 DaemonSet
- 在 Container Platform 中,导航到 Workloads > DaemonSets。
- 找到你想更新的 DaemonSet。
- 在 Actions 下拉菜单中选择 Update,进入 Edit DaemonSet 页面,你可以更新
Replicas、image、updateStrategy等。
在更改镜像或 OCI Connector 时,还要检查 Connector 代理的 image pull Secret、工作负载的 ServiceAccount 以及令牌有效性。在滚动更新期间,请在每个目标节点上验证实际的 Pod 镜像和 Events。
删除 DaemonSet
- 在 Container Platform 中,导航到 Workloads > DaemonSets。
- 找到你想删除的 DaemonSet。
- 在 Actions 下拉菜单中,点击操作列中的 Delete 按钮并确认。