守护进程集
目录
理解 DaemonSets创建 DaemonSets使用 CLI 创建 DaemonSet前提条件YAML 文件示例通过 YAML 创建 DaemonSet使用 web console 创建 DaemonSet前提条件操作步骤 - 配置基本信息操作步骤 - 配置 Pod操作步骤 - 配置容器操作步骤 - 创建使用新 web console 创建 DaemonSet管理 DaemonSets使用 CLI 管理 DaemonSet查看 DaemonSet更新 DaemonSet删除 DaemonSet使用 web console 管理 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 数量。
-
双角色节点处理:同时承担 控制平面 和 工作节点 角色的节点,只要可调度,无论其角色标签如何,都只会运行一个 DaemonSet 的 Pod 实例。
-
-
关键约束(被排除的节点)
- 明确标记为
Unschedulable: true的节点(例如,通过kubectl cordon)。 - 处于
NotReady状态的节点。 - 存在不兼容 Taints 且未在 DaemonSet 的 Pod Template 中配置匹配 Tolerations 的节点。
- 明确标记为
创建 DaemonSets
使用 CLI 创建 DaemonSet
前提条件
- 确保已配置
kubectl并连接到集群。
YAML 文件示例
通过 YAML 创建 DaemonSet
使用 web console 创建 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 console 中集成的镜像仓库镜像时,可以通过 Already Integrated 进行筛选。Integration Project Name,例如镜像(registry-projectname),其中在此 web console 中包含项目名称 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 console 创建 DaemonSet
新的 web console 可以从不同视图暴露 DaemonSet 创建入口。根据你是从项目范围还是从具体集群进行操作,选择相应入口。
- Applications 视图:从当前项目开始。打开 Workloads > DaemonSets,选择目标 Cluster 和 Namespace,然后选择会生成 DaemonSet 的工作负载模型或创建流程。
- Clusters 视图:从具体集群开始。先打开目标集群,进入目标命名空间,然后导航到 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 annotation、重写后的代理镜像、状态以及 Events。
-
首先,编辑 YAML 文件(例如
example-daemonset.yaml)并加入所需更改,然后应用: -
你可以监控滚动更新的进度:
删除 DaemonSet
删除 DaemonSet 及其管理的所有 Pod:
使用 web console 管理 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 按钮并确认。