Kubernetes之DaemonSet控制器

DaemonSet 簡介

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

使用 DaemonSet 的一些典型用法:redis

  • 運行集羣存儲 daemon,例如在每一個 Node 上運行 glusterdceph
  • 在每一個 Node 上運行日誌收集 daemon,例如fluentdlogstash
  • 在每一個 Node 上運行監控 daemon,例如 Prometheus Node Exporter、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
相關文章
相關標籤/搜索