DaemonSet 簡介
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 代理,或 Gangliagmond
。
一個簡單的用法是,在所有的 Node 上都存在一個 DaemonSet,將被作為每種類型的 daemon 使用。 一個稍微復雜的用法可能是,對單獨的每種類型的 daemon 使用多個 DaemonSet,但具有不同的標志,和/或對不同硬件類型具有不同的內存、CPU要求。
kubernetes 自己也在使用DaemonSet 管理自己的組件
$ 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配置一下filebeat
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訪問
$ 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 是刪除式更新
rollingUpdate 只支持 maxUnavailable ,因為ds是每個主機上啟動一個pod,所以不能有多余節點的啟動
$ kubectl set image ds filebeat-ds filebeat-ds-pod=ikubernetes/filebeat:5.6.7-alpine daemonset "filebeat-ds" image updated