Kubernetes 中如何让容器运行在特定的节点上?

阅读时长 4 分钟读完

Kubernetes 是一个流行的容器编排管理工具,它可以帮助开发者管理和运行大规模的容器化应用。在 Kubernetes 中,可以使用节点选择器和亲和性来控制容器运行在哪些节点上。

节点选择器

节点选择器是 Kubernetes 中一种基于标签的选择器,允许用户选择某些节点运行他们的容器。具体而言,用户可以在 Pod 配置文件中添加 nodeSelector 字段,指定筛选节点的标签。例如,以下配置文件会选择标签为 disk=ssd 的节点运行:

-- -------------------- ---- -------
----------- --
----- ---
---------
  ----- ------
-----
  -----------
  - ----- ------------
    ------ --------
  -------------
    ----- ---
展开代码

当 Kubernetes 系统在调度 Pod 时,会先筛选出已经被标记为 disk=ssd 的节点,并将容器调度到这些节点上运行。

亲和性

亲和性是 Kubernetes 中高级的选择器,它允许用户更加灵活地管理如何将容器调度到节点。亲和性可以指定:

  • Pod 和节点之间的硬亲和性(Pod 紧密绑定到某些节点,不得不在这些节点上运行);
  • Pod 和节点之间的软亲和性(Pod 更喜欢运行在某些节点上,但不同在其他节点上运行)。

硬亲和性的例子包括:

  • nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution(Pod 必须运行在特定的节点上)
  • podAffinity.requiredDuringSchedulingIgnoredDuringExecution(Pod 必须紧密绑定在其他一些 Pod 上,并且这些 Pod 也必须在特定的节点上)

软亲和性的例子包括:

  • nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution(Pod 更喜欢运行在某个节点上)
  • podAffinity.preferredDuringSchedulingIgnoredDuringExecution(Pod 更愿意被部署在与一些其他 Pod 相似的节点上)

以下是一个硬亲和性的实例,展示了如何将 Pod 调度到指定厂商标签的节点上:

-- -------------------- ---- -------
----------- --
----- ---
---------
  ----- ------
-----
  -----------
  - ----- ------------
    ------ --------
  ---------
    -------------
      -----------------------------------------------
        ------------------
        - -----------------
          - ---- ------
            --------- --
            -------
            - ------
展开代码

上述 Pod 配置文件指定了 vendor=nvidia 的标签。当 Kubernetes 调度器将要选择某个节点来运行该 Pod 时,它使用 vendor 标签进行选择,只选择拥有 vendor=nvidia 标签的节点。

总结

在本文中,我们介绍了 Kubernetes 中如何使用节点选择器和亲和性来控制容器运行的位置。除了 nodeSelector,Kubernetes 中还有很多其他的选择器,包括 nodeAffinitypodAffinity。不同的选择器和标签组合可以帮助开发者更加灵活地管理和控制容器的运行位置。

参考例子

pod_with_node_selector.yaml

-- -------------------- ---- -------
----------- --
----- ---
---------
  ----- ------
-----
  -----------
  - ----- ------------
    ------ --------
  -------------
    ----- ---
展开代码

pod_with_affinity.yaml

-- -------------------- ---- -------
----------- --
----- ---
---------
  ----- ------
-----
  -----------
  - ----- ------------
    ------ --------
  ---------
    -------------
      -----------------------------------------------
        ------------------
        - -----------------
          - ---- ------
            --------- --
            -------
            - ------
展开代码

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6477b5a2968c7c53b0418217

纠错
反馈

纠错反馈