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

 

posted @ 2018-08-30 10:34  大胖猴  阅读(4518)  评论(0编辑  收藏