目录
- 一、核心特性
- 1、节点全覆盖
- 2、节点选择
- 3、更新策略
- 二、使用场景
- 三、示例配置
- 四、操作命令
- 五、与Deployment的区别
DaemonSet是Kubernetes中用于确保每个节点(或满足特定条件的节点)上都运行一个副本的控制器。它的主要用途包括部署系统级别的守护进程、日志收集代理、监控探针等需要在集群内每个节点上都有实例的应用场景。
一、核心特性
1、节点全覆盖
DaemonSet确保每个目标节点上只运行一个由其管理的Pod实例。当有新节点加入集群时,DaemonSet会自动在新节点上创建对应的Pod;当节点被删除或从集群中移除时,其上的DaemonSet Pod也会相应地被清理。
2、节点选择
通过在DaemonSet的.spec.template.spec.nodeSelector、.spec.template.spec.affinity 或 .spec.template.spec.tolerations 等字段中设置规则,可以精确控制DaemonSet Pods应该部署在哪些节点上,或者应该避免部署在哪些节点上。
3、更新策略
类似Deployment,DaemonSet也支持滚动更新策略,可以平滑地升级其管理的Pods到新版本。更新过程可以控制Pod的替换速率、最大不可用Pod数量等参数。
二、使用场景
-
系统级服务:如网络插件(如Calico、Flannel)、存储驱动(如Flexvolume、CSI)、日志收集代理(如Fluentd、Logstash)等,这些服务通常需要在每个节点上独立运行。
-
监控探针:如Prometheus Node Exporter、Grafana Agent等,用于收集节点级的性能指标和事件数据。
-
基础设施工具:如SSH访问代理(如Teleport)、节点级安全扫描工具等,这些工具需要在每个节点上提供一致的服务。
三、示例配置
下面是一个简单的DaemonSet YAML配置示例,用于部署一个运行Nginx服务的Pod到每个节点:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset-nginx
spec:
selector:
matchLabels:
app: nginx-daemon
template:
metadata:
labels:
app: nginx-daemon
spec:
tolerations:
- operator: Exists
effect: NoSchedule
containers:
- name: nginx
image: nginx:1.19.5
ports:
- containerPort: 80
在这个例子中:
.spec.selector.matchLabels和.spec.template.metadata.labels定义了标签选择器和Pod模板标签,用于关联DaemonSet管理的Pods。.spec.template.spec.tolerations指定了该DaemonSet的Pod能够容忍所有"NoSchedule"类型的污点,确保它们能在所有可用节点上调度。.spec.template.spec.containers描述了容器配置,包括使用的镜像(nginx:1.19.5)和暴露的端口(containerPort: 80)。
四、操作命令
使用kubectl可以对DaemonSet进行各种操作:
- 创建或更新DaemonSet:
kubectl apply -f daemonset.yaml - 查看DaemonSet详情:
kubectl describe daemonset my-daemonset-nginx - 列出所有DaemonSets:
kubectl get daemonsets - 更新DaemonSet(例如升级镜像):
kubectl set image daemonset/my-daemonset-nginx nginx=nginx:1.20.0
五、与Deployment的区别
虽然两者都用于管理Pods,但DaemonSet和Deployment有着显著的区别:
-
部署目标:Deployment确保在集群中维持一定数量的Pod副本,而DaemonSet确保每个符合条件的节点上都有一个Pod实例。
-
副本数量:Deployment的副本数量可以根据需求动态调整,而DaemonSet的Pod数量与集群中符合条件的节点数量直接相关。
-
更新策略:尽管两者都支持滚动更新,但Deployment的更新策略主要关注整体应用的可用性与平滑过渡,而DaemonSet则侧重于在每个节点上独立、有序地更新Pod。
本文详细介绍了Kubernetes中的DaemonSet控制器,包括其节点全覆盖特性、节点选择规则、更新策略,以及在系统服务、监控、基础设施工具等方面的应用场景。并通过示例配置展示了如何使用kubectl操作DaemonSet。

4033

被折叠的 条评论
为什么被折叠?



