使用 Daemonsets 运行 Pod

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在 Kubernetes 中,DaemonSet 是一种控制器,用于确保集群中的每个节点上都运行着一个 Pod 的副本。本实验将指导你创建一个 DaemonSet,以便在集群中的每个节点上运行 Pod 的副本。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") subgraph Lab Skills kubernetes/initialization -.-> lab-8454{{"使用 Daemonsets 运行 Pod"}} kubernetes/get -.-> lab-8454{{"使用 Daemonsets 运行 Pod"}} kubernetes/create -.-> lab-8454{{"使用 Daemonsets 运行 Pod"}} kubernetes/apply -.-> lab-8454{{"使用 Daemonsets 运行 Pod"}} kubernetes/describe -.-> lab-8454{{"使用 Daemonsets 运行 Pod"}} end

启动 Minikube 集群

在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。

  1. 导航到工作目录

    打开终端并导航到默认的项目文件夹:

    cd /home/labex/project
  2. 启动 Minikube

    启动 Minikube 以初始化一个 Kubernetes 集群:

    minikube start
    • 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
    • 根据系统性能,Minikube 可能需要几分钟才能启动。
  3. 验证 Minikube 是否正在运行

    检查 Minikube 集群的状态:

    minikube status
    • 查找 kubeletapiserver 等组件是否显示为 Running
    • 如果集群未运行,请重新运行 minikube start

如果启动 Minikube 时遇到问题,可以使用 minikube delete 重置环境(如有需要)。

创建一个 Pod

创建一个简单的 Pod,它将作为副本的模板。创建一个名为 /home/labex/project/myapp-pod.yaml 的文件,内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
    - name: myapp-container
      image: nginx
      ports:
        - containerPort: 80

使用以下命令创建 Pod:

kubectl apply -f /home/labex/project/myapp-pod.yaml

创建一个 DaemonSet

创建一个 DaemonSet,以便在集群中的每个节点上运行 myapp-pod 的副本。创建一个名为 /home/labex/project/myapp-daemonset.yaml 的文件,内容如下:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp-daemonset
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp-container
          image: nginx
          ports:
            - containerPort: 80

此 DaemonSet 使用 myapp-pod 作为副本的模板,并将 matchLabels 选择器设置为 app: myapp,以确保在每个节点上创建副本。

使用以下命令创建 DaemonSet:

kubectl apply -f /home/labex/project/myapp-daemonset.yaml

验证 DaemonSet

验证 DaemonSet 是否已创建,并确保 myapp-pod 的副本在集群中的每个节点上运行。使用以下命令列出集群中的节点:

kubectl get nodes

使用以下命令列出由 DaemonSet 创建的 Pod:

kubectl get pods -l app=myapp

你应该会看到集群中每个节点对应一个 Pod。

更新 DaemonSet

更新 DaemonSet 以更改 myapp-container 使用的镜像。创建一个名为 /home/labex/project/myapp-daemonset-update.yaml 的文件,内容如下:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp-daemonset
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp-container
          image: busybox
          command: ["sleep", "3600"]

此更新后的 DaemonSet 将 myapp-container 使用的镜像更改为 busybox,并将命令设置为 sleep 3600

使用以下命令更新 DaemonSet:

kubectl apply -f /home/labex/project/myapp-daemonset-update.yaml

验证 DaemonSet 是否已更新,并确保 myapp-pod 的副本正在使用新镜像运行。使用以下命令列出由 DaemonSet 创建的 Pod:

kubectl get pods -l app=myapp

你应该会看到使用更新后的镜像创建的新 Pod。

总结

在本实验中,你学习了如何在 Kubernetes 中使用 DaemonSet 在集群中的每个节点上运行 Pod 的副本。