DaemonSet 确保所有(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它建立的全部 Pod。node
使用 DaemonSet 的一些典型用法:redis
glusterd
、ceph
。fluentd
、logstash
。collectd
、Datadog 代理、New Relic 代理,或 Ganglia gmond
。一个简单的用法是,在全部的 Node 上都存在一个 DaemonSet,将被做为每种类型的 daemon 使用。 一个稍微复杂的用法多是,对单独的每种类型的 daemon 使用多个 DaemonSet,但具备不一样的标志,和/或对不一样硬件类型具备不一样的内存、CPU要求。api
kubernetes 本身也在使用DaemonSet 管理本身的组件app
$ kubectl get ds -n kube-system NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE-SELECTOR AGE calico-node 4 4 4 4 4 <none> 34d
#启动一个redis配置一下filebeatide
apiVersion: apps/v1 kind: Deployment metadata: name: redis namespace: default spec: replicas: 1 selector: matchLabels: app: redis role: log-store template: metadata: labels: app: redis role: log-store spec: containers: - name: redis-pod 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: all template: metadata: labels: app: filebeat release: all spec: containers: - name: filebeat-ds-pod image: ikubernetes/filebeat:5.6.6-alpine env: - name: REDIS_HOST value: redis.default.svc.cluster.local - name: REDIS_LOG_LEVEL value: info
暴露redis端口 供filebeat访问spa
$ kubectl expose deployment redis --port=6379
查看一下服务代理
$ kubectl get ds NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE-SELECTOR AGE filebeat-ds 4 4 4 4 4 <none> 12m $ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE filebeat-ds-8tf5v 1/1 Running 0 13m 10.42.2.78 k8s-node01 filebeat-ds-9fqfv 1/1 Running 0 13m 10.42.0.220 rancher-node filebeat-ds-pdc8m 1/1 Running 0 13m 10.42.1.108 k8s-master filebeat-ds-v4dct 1/1 Running 0 13m 10.42.3.214 k8s-node02
kubectl explain ds.spec.updateStrategy 日志
默认是 rollingUpdate 是删除式更新code
rollingUpdate 只支持 maxUnavailable ,由于ds是每一个主机上启动一个pod,因此不能有多余节点的启动blog
$ kubectl set image ds filebeat-ds filebeat-ds-pod=ikubernetes/filebeat:5.6.7-alpine daemonset "filebeat-ds" image updated