「Kubernetes Objects」- DaemonSet

  CREATED BY JENKINSBOT

问题描述

启动日志收集器,或者监控代理等基础设施服务,都需要每个节点上运行一个 POD 实例

解决方案

使用 DaemonSet 服务;

例如,每个节点上运行一个 Fluentd 的容器服务,

按照以下的例子,编写一个 fluentd-daemonset.yaml 文件:

kind: DaemonSet
apiVersion: extensions/v1beat1
metadata:
  name: fluentd
spec:
  template:
    metadata:
      name: fluentd
      labels:
        app: fluented
    spec:
      containers:
        - name: fluentd
          image: 'gci.io/google_conntainers/fluentd-elasticsearch:1.3'
          env:
            - name: FLUENTD_ARGS
              value: '-qq'
          columeMounts:
            - name: varlog
              mountPath: /var/log
            - name: containers
              mountPath: /var/lib/docker/containers
      volumes:
        - hostPath:
            path: /var/log
          name: varlog
        - hostPath:
            path: /var/lib/docker/containers
          name: containers

部署资源文件:

kubectl craete -f fluented-daemonset.yaml

kubectl get ds

kubectl describe ds/fluentd

数据存储(PVE)

storageclass & pvc for daemonset

针对 DaemonSet 类型,所有的 Pod 将共享相同的 PVC 资源。

如果每个 Pod 需要独立的数据存储:
1)需要通过应用程序控制,限制当前 Pod 写入目录(诸如 目录锁 等等);
2)通过 hostPath 将数据写入节点;
3)

参考文献

kubernetes/Concepts/DaemonSet