在Kubernetes(K8s)中,DaemonSet是一种特殊的控制器资源对象,其核心特性和用途使得它非常适合用于在集群的每个节点上运行守护进程或服务。以下是DaemonSet类型的资源特性的详细阐述:
1. 确保每个节点上运行Pod副本
- 节点级部署:DaemonSet确保集群中的每个节点(或满足特定条件的节点)上都运行一个Pod副本。这意味着无论何时创建或加入新的节点到集群中,DaemonSet都会自动为新节点调度和管理一个Pod。
- 自动扩展:当节点加入或离开集群时,DaemonSet会自动添加或删除相应的Pod。如果一个节点被删除或者由于某种原因变得不可用,那么该节点上的DaemonSet Pod也会被清理;反之,如果有新节点加入,DaemonSet将确保在新节点上启动一个Pod实例。
2. 节点选择性部署
- 节点选择器:通过使用NodeSelector、NodeAffinity或其他节点标签,用户可以精确地控制DaemonSet中的Pod部署在哪些节点上。例如,可以选择仅在具有特定硬件或功能的节点上运行DaemonSet。
3. 更新策略灵活
- 滚动更新:DaemonSet支持滚动更新策略,允许在维护或升级守护进程时能够平滑过渡。通过更改Pod模板或镜像,可以逐步替换旧版本的Pod,从而确保服务的连续性和稳定性。
4. 系统服务和基础设施支持
- 基础服务部署:DaemonSet通常用于部署那些提供集群层面功能的服务,如日志收集代理(如Fluentd或Filebeat)、监控代理(如Prometheus Node Exporter或cAdvisor)、网络插件以及其他需要在每个工作节点上都有一个实例运行的基础服务。
- 系统守护进程:DaemonSet的主要作用是确保集群中的所有(或符合条件的部分)节点上都能按需运行指定的系统守护进程或其他基础组件,以提供集群范围内的基础设施支持。
5. 其他特性
- 避免冲突:默认情况下,DaemonSet保证在每个节点上只运行一个Pod实例。这可以通过PodDisruptionBudget等机制来进一步强化,并且可以通过PodAntiAffinity规则来避免同一个节点上运行多个相同的DaemonSet Pod。
- 版本控制:DaemonSet能够管理其Pod的生命周期,包括初始化容器、健康检查以及重启策略等,从而支持版本升级和回滚操作。
综上所述,DaemonSet在Kubernetes中扮演着确保集群每个节点上运行必要守护进程或服务的重要角色。其特性使得它成为部署和管理集群级别基础服务的理想选择,特别是在需要确保每个节点上都有特定任务或服务运行的情况下。
标签:服务,哪些,集群,DaemonSet,Pod,K8S,节点,运行 From: https://www.cnblogs.com/huangjiabobk/p/18454030