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