构建基本的 DaemonSet

本页展示了如何构建一个基础的 DaemonSet,使其在 Kubernetes 集群的每个节点上运行一个 Pod。它涵盖了一个简单的用例:挂载主机上的文件,使用初始化容器(init container)记录文件内容,并利用 pause 容器。

开始之前

你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以与你的集群通信。建议在至少有两个节点的集群上运行本教程,且这些节点不能作为控制平面主机。如果你还没有集群,可以通过 minikube 创建一个,或者使用以下 Kubernetes 演练场之一。

一个至少包含两个节点(一个控制平面节点和一个工作节点)的 Kubernetes 集群,用于演示 DaemonSet 的行为。

定义 DaemonSet

在此任务中,创建了一个基础 DaemonSet,以确保 Pod 的副本被调度到每个节点上。Pod 将使用初始化容器读取并记录主机上 /etc/machine-id 的内容,而主容器将是一个 pause 容器,用于保持 Pod 的运行状态。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: example-daemonset
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: example
  template:
    metadata:
      labels:
        app.kubernetes.io/name: example
    spec:
      containers:
      - name: pause
        image: registry.k8s.io/pause
      initContainers:
      - name: log-machine-id
        image: busybox:1.37
        command: ['sh', '-c', 'cat /etc/machine-id > /var/log/machine-id.log']
        volumeMounts:
        - name: machine-id
          mountPath: /etc/machine-id
          readOnly: true
        - name: log-dir
          mountPath: /var/log
      volumes:
      - name: machine-id
        hostPath:
          path: /etc/machine-id
          type: File
      - name: log-dir
        hostPath:
          path: /var/log
  1. 根据(YAML)清单创建 DaemonSet

    kubectl apply -f https://k8s.io/examples/application/basic-daemonset.yaml
    
  2. 应用清单后,您可以验证 DaemonSet 是否正在集群中的每个节点上运行一个 Pod

    kubectl get pods -o wide
    

    输出将列出每个节点一个 Pod,类似于

    NAME                                READY   STATUS    RESTARTS   AGE    IP       NODE
    example-daemonset-xxxxx             1/1     Running   0          5m     x.x.x.x  node-1
    example-daemonset-yyyyy             1/1     Running   0          5m     x.x.x.x  node-2
    
  3. 您可以通过检查从主机挂载的日志目录来查看所记录的 /etc/machine-id 文件的内容

    kubectl exec <pod-name> -- cat /var/log/machine-id.log
    

    其中 <pod-name> 是您的 Pod 名称之一。

清理

要删除 DaemonSet,请运行以下命令

kubectl delete --cascade=foreground --ignore-not-found --now daemonsets/example-daemonset

这个简单的 DaemonSet 示例介绍了诸如初始化容器和主机路径卷(host path volumes)等关键组件,这些组件可以在更高级的用例中进行扩展。更多详情,请参阅 DaemonSet

接下来


最后修改时间 2025年1月7日上午 9:41 (PST): 清理 create-daemon-set.md (3407a0e1cd)