使用节点选择器进行调度

KubernetesKubernetesBeginner
立即练习

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

介绍

在本实验中,我们将首先创建一个简单的部署(deployment),然后为其分配节点选择器(Node Selectors)。接着,我们将进入更复杂的场景,使用不同的选择器将 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/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/label("Label") subgraph Lab Skills kubernetes/initialization -.-> lab-15001{{"使用节点选择器进行调度"}} kubernetes/get -.-> lab-15001{{"使用节点选择器进行调度"}} kubernetes/create -.-> lab-15001{{"使用节点选择器进行调度"}} kubernetes/apply -.-> lab-15001{{"使用节点选择器进行调度"}} kubernetes/label -.-> lab-15001{{"使用节点选择器进行调度"}} 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 重置环境(如有需要)。

创建一个简单的 Deployment

在这一步中,我们将创建一个包含单个 Pod 的简单 Deployment。

  1. 创建一个名为 simple-deployment.yaml 的文件,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: simple-app
  template:
    metadata:
      labels:
        app: simple-app
    spec:
      containers:
        - name: simple-container
          image: nginx:latest
  1. 使用 kubectl 创建 Deployment:
kubectl apply -f simple-deployment.yaml
  1. 验证 Deployment 是否已创建:
kubectl get deployments

为 Deployment 分配节点选择器(Node Selector)

在这一步中,我们将为在第一步中创建的 Deployment 分配一个节点选择器(Node Selector)。

  1. 为节点添加标签:
kubectl label nodes minikube disk=ssd
  1. 编辑 node-selector-deployment.yaml 文件,并在 spec.template.spec 部分下添加 nodeSelector 字段:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: selector-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: selector-app
  template:
    metadata:
      labels:
        app: selector-app
    spec:
      nodeSelector:
        disk: ssd
      containers:
        - name: selector-container
          image: nginx:latest
  1. 使用 kubectl 应用更改:
kubectl apply -f node-selector-deployment.yaml
  1. 验证 Pod 是否已调度到带有 disk=ssd 标签的节点上:
kubectl get pods -o wide | grep selector-deployment

使用不同的节点选择器(Node Selector)

在这一步中,我们将使用不同的节点选择器(Node Selector),根据分配给节点的标签将 Pod 调度到特定节点上。

  1. 创建三个带有不同标签的节点:
kubectl label nodes minikube resigon=labex
kubectl label nodes minikube gpu=true
  1. 创建一个名为 multi-selector-deployment.yaml 的文件,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: multi-selector-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: multi-selector-app
  template:
    metadata:
      labels:
        app: multi-selector-app
    spec:
      containers:
        - name: multi-selector-container
          image: nginx:latest
      nodeSelector:
        resigon: labex
        gpu: "true"
  1. 应用更改:
kubectl apply -f multi-selector-deployment.yaml
  1. 验证 Pod 是否已调度到带有相应标签的节点上:
kubectl get pods -o wide | grep multi-selector-deployment

总结

在本实验中,我们学习了如何使用节点选择器(Node Selector)和节点亲和性(Node Affinity)将 Pod 调度到特定节点上。我们从简单的部署开始,然后逐步进入更复杂的场景,使用不同的选择器和亲和性规则,根据分配给节点的标签将 Pod 调度到特定节点上。

恭喜!你已成功完成本实验。