DaemontSet概述
- DaemonSet 是 Kubernetes 中一种特殊的控制器,用于确保集群中所有(或部分)节点上都运行一个 Pod 的副本。与 Deployment 不同的是,DaemonSet 不是通过副本数来管理 Pod,而是确保每个符合条件的节点上有且只有一个指定的 Pod 运行
- kube-proxy就是以daemonset的形式运行在每个节点上的
DaemonSet特性
- 节点级部署:在每个匹配的节点上自动部署一个 Pod 副本
- 自动扩展:当新节点加入集群时,会自动在新节点上创建 Pod
- 自动收缩:当节点从集群移除时,其上的 Pod 会被垃圾回收
- 节点亲和性:可以通过节点选择器(nodeSelector)或节点亲和性(nodeAffinity)控制部署范围
daemonset的应用场景
- 在每个Node上都运行一个存储进程,例如Ceph
- 在每个Node上都运行一个日志采集进程,例如Logstach
- 在每个Node上都运行一个性能监控进程,采集该Node的运行性能数据,例如Prometheus Node Exporter
- 可以将pod上的相同服务提取成为一个daemonset,在不同容器中运行
创建daemonset
vim daemon.yaml
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: daemonset
labels:
app: daemonset
spec:
updateStrategy: #进行滚动升级
type: RollingUpdate
selector:
matchLabels:
name: daemonset
template:
metadata:
labels:
name: daemonset
spec:
containers:
- name: nginx
image: nginx
deamonset的节点选择
spec:
template:
spec:
nodeSelector:
disktype: ssd
spec:
template:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- amd64
# 允许 Pod 调度到带有特定污点的节点上:
tolerations:
- key: "key1" # 必须与污点的键完全一致
operator: "Equal" # 表示要求值完全匹配
value: "value1" # 必须与污点的值完全一致
effect: "NoSchedule" # 必须与污点效果一致
daemonset的更新策略
- OnDelete: 当使用OnDelete作为升级策略时,在创建好新的DaemonSet配置之后,新的Pod并不会被自动创建,直到用户手动删除旧版本的Pod,才触发新建操作。
- RollingUpdate:默认升级策略。逐步更新每个节点上的 Pod。可以配置 maxUnavailable 来控制更新速度
spec:
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 2