理解Kubernetes中daemonset是什么

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

posted @ 2021-12-17 10:33  Layzer  阅读(50)  评论(0编辑  收藏  举报