Kubernetes之DaemonSet控制器


DaemonSet 簡介

DaemonSet 確保全部(或者一些)Node 上運行一個 Pod 的副本。當有 Node 加入集群時,也會為他們新增一個 Pod 。當有 Node 從集群移除時,這些 Pod 也會被回收。刪除 DaemonSet 將會刪除它創建的所有 Pod。

使用 DaemonSet 的一些典型用法:

  • 運行集群存儲 daemon,例如在每個 Node 上運行 glusterdceph
  • 在每個 Node 上運行日志收集 daemon,例如fluentdlogstash
  • 在每個 Node 上運行監控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond

一個簡單的用法是,在所有的 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM