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