Kubernetes-DaemonSet
DaemonSet用于在每个Kubernetes节点中将守护进程的副本作为后台运行,当节点从集群中被移除后,该节点上的Pod也会被移除,当然,如果我们删除DaemonSet,所有和这个对象相关的Pods都会被删除。
适用场景
--- 集群存储守护程序,如glusterd、ceph要部署在每个节点上提供持久性存储
--- 节点监视守护进程,如prometheus监控集群,可以在每个节点上运行一个node-exporter进程来收集监控节点的信息
--- 日志收集守护程序,如fluentd或logstash,在每个节点运行容器
DaemonSet Pods调度特性
默认情况下,Pod被分配到具体哪一台Node节点运行是由Scheduler (它通过监听ApiServer,查询还未分配的Node的Pod,根据调度策略为这些Pod进行调度)。但是DaemonSet对象创建的Pod却拥有一些特殊的特性
--- Node的unchedulable属性会被DaemonSet Controller忽略
--- 即使Scheduler还未启动,DaemonSet Controller也能够创建并运行Pod
下面我们创建一个nginx配置文件进行演示
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
[root@kubernetes-m media]# kubectl apply -f nginx-ds.yaml
daemonset.apps/nginx created
[root@kubernetes-m media]# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-2cngl 1/1 Running 0 34s 200.1.2.83 kubernetes-w-2 <none> <none>
nginx-2kvz4 1/1 Running 0 34s 200.1.1.101 kubernetes-w-1 <none> <none>
[root@kubernetes-m media]# kubectl get node
NAME STATUS ROLES AGE VERSION
kubernetes-m Ready master 8d v1.18.0
kubernetes-w-1 Ready <none> 8d v1.18.0
kubernetes-w-2 Ready <none> 8d v1.18.0
[root@kubernetes-m media]# kubectl get daemonsets
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
nginx 2 2 2 2 2 <none> 2m1s
因为上面说了,daemonSet是根据我们节点的数量进行创建,因为master有污点,所以只创建了两个pod