管理多池 Kubernetes 群集中的 Pod

已完成

Contoso 开发人员正致力于将内部开发的 Windows 和 Linux 应用程序转换为可以使用 Helm 图表进行部署的基于 Docker 的映像。 当你计划在 Azure Stack HCI 上实现 Kubernetes 群集时,需要确保同时支持这两种操作系统平台。

什么是 Azure Stack HCI 上 Kubernetes 群集中的节点池

Azure Stack HCI 上的 AKS 支持同一个 Kubernetes 群集中的多个节点池。 根据你在预配池时指定的设置,每个池由完全相同配置的 VM 组成。

通过将节点分组到单独的池中,可以将 Pod 部署定目标到合适的 VM 集。 例如,你可能有仅受 Windows 操作系统支持或需要专用硬件(如图形处理器单元)的容器化工作负载。

控制将 Pod 部署到 Azure Stack HCI 上 Kubernetes 群集中的节点池

默认情况下,Kubernetes 计划以一种优化资源利用率的方式在任何可用的工作器节点上预配容器化工作负载。 若要更改此行为,可以根据你指定的自定义条件对所选的节点应用约束。 这些约束包括节点选择器以及污点和容忍。

节点选择器

节点选择器是基于 YAML 的 Pod 或部署定义中的设置,用于标识可以在其上计划相应 Pod 的目标节点。 如果你打算根据目标节点的操作系统来指定目标节点,则可以依赖于 Kubernetes 自动分配给节点的内置标签。 根据预期的操作系统,节点选择器将采用格式 kubernetes.io/os = Windowskubernetes.io/os = Linux。 例如,以下基于 YAML 的 Pod 清单将 Linux 节点指定为部署目标:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    kubernetes.io/os = Linux

排斥和容许

污点和容忍提供了一种控制 Pod 放置的替代方法。 使用这种方法时,污点是节点配置的一部分,而容忍则是 Pod 规范的一部分。 通过污点处理某个节点,可以有效地阻止它托管任何没有相应的特定于污点的容忍的 Pod。

例如,在 Azure Stack HCI 上的 AKS 中,若要在 Windows 节点上计划 Pod,则应将以下容忍添加到它的定义中:

tolerations:
- key: node.kubernetes.io/os
  operator: Equal
  value: Windows
  effect: NoSchedule

此外,还需要将污点 node.kubernetes.io/os=Windows:NoSchedule 添加到要专门用于部署具有相应容忍的 Pod 的每个 Windows 节点中。 为此,可以使用 kubectl 命令行实用工具,然后在连接到目标群集后,为范围内的每个节点运行以下命令(其中 <node_name> 占位符指定目标节点的名称):

kubectl taint node <node_name> node.kubernetes.io/os=Windows:NoSchedule

备注

节点选择器强制将 Pod 放置在特定的节点集合上。 容忍支持 Pod 在一组指定的污点节点上运行,但不阻止它们被放置在没有污点的节点上。

知识检查

1.

Contoso 计划将 Windows 和 Linux 容器化工作负载部署到 Azure Stack HCI 上的 AKS。 你需要记录确保将基于 Windows 的 Pod 部署到运行 Windows 的 Kubernetes 群集节点的过程。 你决定为此目的使用污点和容忍。 应将污点应用于哪个群集组件?