概念:
    image.png

    DaemonSet确保全部(或者一些)Node上运行一个Pod的副本,当有Node加入集群时也会为他们新增一个Pod,当有Node从集群移除时,这些Pod也会被回收,删除DaemonSet将会删除它创建的所有Pod

    DaemonSet 的一些典型用法:

    • 运行集群存储 daemon,例如在每个 Node 上运行 glusterd、ceph
    • 在每个 Node 上运行日志收集 daemon,例如fluentd、logstash
    • 在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond

    一个简单的用法是,在所有的 Node 上都存在一个 DaemonSet,将被作为每种类型的 daemon 使用, 一个稍微复杂的用法可能是,对单独的每种类型的 daemon 使用多个 DaemonSet,但具有不同的标志,和/或对不同硬件类型具有不同的内存、CPU要求

    示例:
    image.png

    [root@master ~]# kubectl explain ds.spec.
    KIND: DaemonSet
    minReadySeconds
    revisionHistoryLimit
    selector
    template -required-
    templateGeneration
    updateStrategy

    Redis示例:
    image.png
    image.png

    [root@master manifests]# vim ds-demo.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: redis
    namespace”: default
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: redis
    role: logstore
    template:
    metadata:
    labels:
    app: redis
    role: logstore
    spec:
    containers:
    - name: redis
    image: redis:4.0-alpine
    ports:
    - name: redis
    containerPort: 6379
    —-
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
    name: filebeat-ds
    namespace: default
    spec:
    selector:
    matchLabels:
    app: filebeat
    release: stable
    template:
    metadata:
    labels:
    app: filebeat
    release: stable
    spec:
    containers:
    - name: filebeat
    image: ikubernetes/filebeat:5.6.5-alpine
    env:
    - name: REDIS_HOST
    value: redis.default.svc.cluster.local
    - name: REDIS_LOG_LEVEL
    value: info

    创建并暴漏端口:
    image.png

    [root@master manifests]# kubectl apply -f ds-demo.yaml
    deployment.apps/redis created
    daemonset.apps/filebeat-ds created

    [root@master manifests]# kubectl expose deploy redis —port=6379
    service/redis exposed

    [root@master manifests]# kubectl get svc
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

    kubernetes ClusterIP 10.96.0.1 443/TCP 4d19h
    myapp NodePort 10.104.138.182 80:30298/TCP 3d21h
    nginx ClusterIP 10.98.2.12 80/TCP 4d
    redis ClusterIP 10.97.149.76 6379/TCP 15s

    DaemonSet有两种更新策略类型 :
    image.png

    • OnDelete:向后兼容性的默认更新策略,使用 OnDelete更新策略,在更新DaemonSet模板后,只有在手动删除旧的DaemonSet pod时才会创建新的DaemonSet pod,这与Kubernetes 1.5或更早版本中DaemonSet的行为相同
    • RollingUpdate:使用RollingUpdate更新策略,在更新DaemonSet模板后,旧的DaemonSet pod将被终止,并且将以受控方式自动创建新的DaemonSet pod

    [root@master ~]# kubectl explain ds.spec.updateStrategy.type.
    KIND: DaemonSet
    VERSION: extensions/v1beta1

    FIELD: type

    DESCRIPTION:
    Type of daemon set update. Can be “RollingUpdate” or “OnDelete”. Default is
    OnDelete.

    要启用DaemonSet的滚动更新功能,必须将其设置 .spec.updateStrategy.type为RollingUpdate

    相关文档:https://www.cnblogs.com/wlbl/p/10694306.html