k8s中DaemonSet实战详解

一、DaemonSet介绍
DaemonSet 的主要作用,是在 Kubernetes 集群里,运行一个 Daemon Pod。DaemonSet 只管理 Pod 对象,然后通过 nodeAffinity 和 Toleration 这两个调度器参数的功能,保证了每个节点上有且只有一个 Pod。

二、DaemonSet 使用场景
每个节点上只有一个这样的 Daemon Pod 实例,然后当有新的节点加入 Kubernetes 集群后,该 Pod 会自动地在新节点上被创建出来。当旧节点被删除后,它上面的 Pod 也会相应地被回收掉。Daemon Pod 的意义确实是非常重要的。比如的作用:

• 网络插件的 Agent 组件,都必须运行在每一个节点上,用来处理这个节点上的容器网络。

• 存储插件的 Agent 组件,也必须运行在每一个节点上,用来在这个节点上挂载远程存储目录,操作容器的 Volume 目录,比如:glusterd、ceph。

• 监控组件和日志组件,也必须运行在每一个节点上,负责这个节点上的监控信息和日志搜集,比如:fluentd、logstash、Prometheus 等。

三、DaemonSet调度
DaemonSet通过kubernetes默认的调度器scheduler会在所有的node节点上运行一个Pod副本,可以通过如下三种方式将Pod运行在部分节点上:

• 指定nodeName节点运行
• 通过标签运行nodeSelector
• 通过亲和力调度node Affinity和node Anti-affinity

DaemonSet调度算法用于实现将Pod运行在特定的node节点上

四、示例
相较于Deployment,StatefulSet,DaemonSet没有副本数,因为他是一个节点启动一个,容器。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.15.2
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            memory: 200Mi
            cpu:100m
          requests:
            cpu: 100m
            memory: 200Mi
      terminationGracePeriodSeconds: 30

五、更新与回滚

kubectl set image  ds nginx nginx=nginx:1.15.3 -n test --record

kubectl rollout history ds nginx --revision=2 -n test

#更新多次后查看更新记录
kubectl rollout history ds nginx -n test

你可能感兴趣的:(kubernetes,容器,云原生)