首页 > 其他分享 >13. Kubernetes - DaemonSet

13. Kubernetes - DaemonSet

时间:2022-10-21 19:04:36浏览次数:56  
标签:Node 13 Kubernetes nginx DaemonSet Pod 节点

DaemonSet

通过控制器名称可以看出:Daemon,就是用来部署守护进程的。

DaemonSet 用于在每个 Kubernetes 节点中将守护进程的副本作为后台进程运行,说白了就是在每个节点部署一个 Pod 副本,当新的节点加入到 Kubernetes 集群中,Pod 会被调度到该节点上运行,当节点从集群只能够被移除后,该节点上的这个 Pod 也会被移除。当然,如果删除 DaemonSet,所有和这个对象相关的 Pods 都会被删除。

基于这种特性,DaemonSet 常被用于:

  • 集群存储守护程序,如 glusterd、ceph 要部署在每个节点上以提供持久性存储。
  • 节点监控守护进程,如 Prometheus 监控集群,可以在每个节点上运行一个 node-exporter 进程来收集监控节点的信息。
  • 日志收集守护程序,如 fluentd 或 filebeat,在每个节点上运行以收集日志。
  • 节点网络插件,比如 flannel、calico,在每个节点上运行为 Pod 提供网络服务。

正常情况下,Pod 运行在哪个节点上是由 Kubernetes 的调度器策略来决定的,然而 DaemonSet 控制器创建的 Pod 实际上提前已经确定了在哪个节点上了,所以即使调度器还没有启动,依旧可以创建 Pod。

DaemonSet 资源清单

DaemonSet 的资源清单配置当时和其它控制器几乎一样:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: ds-nginx
  namespace: default
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80

查看 Pod 状态:

kubectl get pods -A -o wide

可以发现每个 Worker 节点都运行了一个 Pod。

如果是 kubeadm 安装的 Kubernetes 集群,那么 Master 节点将不会启动该 Pod。因为 Master 节点默认被标记了 污点

DaemonSet 运行的示意图如下:

image

集群中的 Pod 和 Node 是一一对应d的,而 DaemonSet 会管理全部机器上的 Pod 副本,负责对它们进行更新和删除。

DaemonSet 控制器保证每个 Node 上有且只有一个被管理的 Pod 的实现原理:

  • 首先 DaemonSet 从 ETCD 获取到 Node 列表,然后遍历所有的 Node。
  • 根据资源对象定义是否有调度相关的配置,然后分别检查 Node 是否符合要求。
  • 在可运行 Pod 的节点上检查是否已有对应的 Pod,如果没有,则在这个 Node 上创建该 Pod,如果有不止一个,就删除多余的 Pod ,如果只有一个 Pod,就不管。

在后面学习了资源调度后,也可以用 Deployment 来实现 DaemonSet 的效果。

同时 DeamonSet 也支持 OnDeleteRollingUpdate 两种更新方式,默认是滚动更新。

标签:Node,13,Kubernetes,nginx,DaemonSet,Pod,节点
From: https://www.cnblogs.com/ezops/p/16814494.html

相关文章