动一下小手点一下赞。谢谢! 你的赞就是我更新的动力。

Kubernetes (K8S) 是一个用于自动部署、扩展和管理容器化应用程序的开源平台。它支持在集群中运行多个容器,并提供了一系列组件来管理这些容器。其中一个重要的组件就是调度器 (Scheduler),它负责将 Pod 部署到集群中的具体节点上。在本文中,我们将详细介绍 K8S 调度 Pod 的组件以及相应的代码示例。

调度器是 Kubernetes 中的一个核心组件,它负责决策将 Pod 分配给哪个节点来运行。调度器是通过一系列策略和算法来进行调度决策的。下面是调度 Pod 的组件的流程:

步骤

描述

准备阶段

调度器准备通过筛选器和优选器选择适合的节点来运行 Pod

过滤器 (Filtering)

调度器使用过滤算法来排除不适合运行 Pod 的节点

优选器 (Prioritization)

调度器使用优选算法来根据节点的条件进行打分排序

选择阶段

调度器选择得分最高的节点来运行 Pod

绑定阶段

调度器将 Pod 绑定到选定的节点上

现在让我们看一下每个步骤需要做什么,并给出相应的代码示例:

准备阶段 在准备阶段,调度器将初始化并准备运行筛选器和优选器。这些组件将评估节点和 Pod 的特性,并为节点生成一个得分。

代码示例:

// 创建一个调度器对象
scheduler := scheduling.NewGenericScheduler(cache, frameworkHandle)

// 配置和初始化筛选器
filter := predicates.NewFilteringPredicate(frameworkHandle)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

过滤器 过滤器是调度器的一部分,用于根据节点特性过滤出不适合运行 Pod 的节点。

代码示例:

// 执行过滤操作
nodeList, _ := cache.List()
filteredNodes, _ := filter.Filter(nil, make([]*v1.Pod, 0), nodeList)
  • 1.
  • 2.
  • 3.

优选器 优选器是调度器的另一个组件,用于根据节点的条件对节点进行打分排序。

代码示例:

// 配置和初始化一个优选器
scorePluginArgs := scoreplugin.DefaultPluginArgs{
  FrameworkHandle: frameworkHandle,
  Name: "custom-score-plugin",
  ScoringStrategy: scoring.ScorerStrategy{},
}
customScorer, _ := scorePluginArgs.GetScorer()

// 执行优选操作
scoredNodes := scorers.NewGenericScorer(frameworkHandle).Score(nil, make([]*v1.Pod, 0), filteredNodes)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

选择阶段 选择阶段是调度器的核心操作,它使用得分最高的节点来运行 Pod。

代码示例:

// 选择得分最高的节点
highestNode := scoredNodes[0]

// 创建一个 Pod 绑定到选择的节点上
pod := &v1.Pod{
  ObjectMeta: metav1.ObjectMeta{
    Name: "example-pod",
    Namespace: "default",
  },
  Spec: v1.PodSpec{
  NodeName: highestNode.Pod.Name,
  },
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

绑定阶段 绑定阶段是将 Pod 绑定到选定的节点上。

代码示例:

// 在调度器上执行绑定操作
bindOp := scheduling.BindPluginOp{
  PodName: pod.Name,
  PodNamespace: pod.Namespace,
  PodUID: pod.UID,
  NodeName: pod.Spec.NodeSelector,
}
scheduler.Bind(context.Background(), bindOp)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

通过以上的代码示例,我们详细介绍了 K8S 调度 Pod 的组件以及其运行流程。调度器是 Kubernetes 集群中的关键组件之一,它能够根据一系列策略和算法来将 Pod 部署到最适合的节点上。了解这些调度器的基本概念和代码示例将帮助开发者更好地理解和使用 Kubernetes。