DaemonSet

DaemonSet会在集群的每一个Node上创建唯一的一个Pod,通常用来运行一些需要执行系统级别、与基础结构相关的操作的Pod。例如,希望在每个Node上运行日志收集器和资源监控器。

kube-system命名空间中,Kubnernetes有一个名为kube-proxy的DaemonSet,其创建并接管了一个名为kube-proxy-xxxx的Pod。

创建DaemonSet

默认情况下,DaemonSet会在集群中的所有Node上都部署Pod,但是可以配合Pod的spec.nodeSelector将Pod仅部署到具有特定标签的Node上。

Tips: Node是可以被设置为不可调度的,用以防止Pod被部署到该Node上。但是DaemonSet管理的Pod可以完全绕过调度器,也就是说即使被定义为不可调度的Node,也是可以在上面部署Pod的。

下面展示了一个具体的DaemonSet的配置文件格式:

apiVersion: apps/v1    # 注意DaemonSet资源所属的API组
kind: DaemonSet
metadata:
  name: node-exporter-daemonset
spec:    # DaemonSet的规格
  selector:    # (必须)匹配Pod的标签。可以使用matchLabels或matchExpressions
    matchLabels: 
      app: prometheus
  template:    # Pod的模板
    metadata:
      labels:    # 设定Pod的labels
        app: prometheus
    spec:
      nodeSelector:    # Pod的Node选择器,只在具有该标签的Node上部署Pod;若没有该选择器,则会在集群中的所有Node上部署
        gpu: "true"
      hostNetwork: true        # 设定网络模式,hostNetwork表示与主机相同的协议栈
      containers:
      - name: node-exporter
        image: prom/node-exporter
        imagePullPolicy: IfNotPresent    # 镜像拉取规则
        command:    # 镜像执行的命令
        - /bin/node_exporter
        - --path.procfs
        - /host/proc
        - --path.sysfs
        - /host/sys
        - --collector.filesystem.ignored-mount-points
        - ^/(sys|proc|dev|host|etc)($|/)
        volumeMounts:
        - name: proc
          mountPath: /host/proc
        - name: sys
          mountPath: /host/sys
        - name: root
          mountPath: /rootfs
      volumes:
      - name: proc
        hostPath:
          path: /proc
      - name: sys
        hostPath:
          path: /sys
      - name: root
        hostPath:
          path: /

Last updated

Was this helpful?