1. 什么是DaemonSet
- DaemonSet确保全部(或者一些)Node上运行一个pod的副本。当有Node加入集群时,也会为他们新增一个pod。当有Node从集群移除时,这些pod也会被回收。删除DaemonSet将会删除它创建的所有pod
- 使用DaemonSet的一些典型用法:
- 运行集群存储daemon,例如在每个node上运行glusterd、ceph。
- 在每个node上运行日志收集,例如fluentd、logstash。
- 在每个node上运行监控daemon,例如prometheus Node Exporter、collectd。
2. 实例:
vim daemonset.yaml
apiVersion: apps/v1 #Kubernetes API 版本号,此处为 apps/v1
kind: DaemonSet #资源类型,此处为 DaemonSet
metadata: #用于定义 DaemonSet 的元数据,包括名称等信息
name: my-daemonset #DaemonSet 的名称,此处为 my-daemonset
labels: #用于标记该 DaemonSet,以便在后续的操作中进行查找、筛选等
app: daemonset #标签app=daemonset
spec: #用于定义 DaemonSet 的规格,包括选择器和容器等信息
selector: #用于指定哪些 Pod 受该 DaemonSet 管理
matchLabels: #用于筛选出需要管理的 Pod,此处使用 app: my-daemonset 筛选符合该标签的 Pod。
app: my-daemonset
template: #用于定义 Pod 模板,即创建新 Pod 时所使用的模板
metadata: #用于定义 Pod 元数据,包括标签等信息
labels: #用于标记该 Pod,以便在后续的操作中进行查找、筛选等
app: my-daemonset
spec: #定义 Pod 的规格,包括容器等信息
containers: #定义容器信息,即在该 Pod 中需要运行的容器
- name: my-daemonset #容器的名称,此处为 my-daemonset
image: nginx:1.9.1 #容器镜像所在的仓库和版本号,此处为 nginx:1.9.1
imagePullPolicy: IfNotPresent #器拉取镜像的策略,此处为 IfNotPresent,表示如果本地已有该镜像则使用本地镜像,否则拉取最新版本镜像
ports: #容器需要暴露的端口号,此处为 80
- containerPort: 80
2.1. 创建daemonset
[root@master1 ~]# kubectl apply -f daemonset.yaml
[root@master1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-daemonset-2zs9k 1/1 Running 0 14m 10.244.0.10 master1 <none> <none>
my-daemonset-bx4qj 1/1 Running 0 14m 10.244.2.15 master2 <none> <none>
my-daemonset-n2sjb 1/1 Running 0 14m 10.244.1.61 node1 <none> <none>
my-daemonset-w5jd6 1/1 Running 0 14m 10.244.3.17 master3 <none> <none>