启用计算隔离

Kf 应用可以部署在集群中的专用节点上。 如果您需要对应用 Pod 所在的节点进行更多控制,则需要使用此功能。例如:

  • 如果要针对不同的应用共享同一个集群,但希望为特定应用保留专用节点。
  • 如果您希望为给定组织(Kf 空间)保留专用节点。
  • 如果您希望针对 Windows 等特定操作系统。
  • 如果您希望将两项不同服务中经常通信的 Pod 放在同一位置。

为启用计算隔离功能,Kf 使用 Kubernetes nodeSelector。如需使用此功能,请先在您希望应用 Pod 所在的节点或节点池上添加标签,然后在 Kf Space 中添加相同的符合条件的标签。此空间中安装的所有应用都将登录具有匹配标签的节点。

Kf 会创建一个 Kubernetes Pod 来执行每个 Kf 构建,但是您可以使用 buildNodeSelector 功能来隔离计算资源以仅执行构建 Pod。一个用例是将构建 Pod 隔离在具有 SSD 的节点上运行,同时在其他节点上运行应用 Pod。BuildNodeSelector 功能可为您的集群提供计算资源优化和灵活性。请参阅本页面上的“配置 BuildNodeSelector 和构建节点池”一章。

在 Kf 集群中配置 nodeSelector

默认情况下,计算隔离处于停用状态。请按以下步骤配置标签和 nodeSelector。

  1. 在您希望应用 pod 访问的节点上添加一个标签 (distype=ssd)。

    kubectl label nodes nodeid disktype=ssd
  2. 在 Kf 空间上添加同一标签。此空间中部署的所有应用都将访问符合条件的节点。

    kf configure-space set-nodeselector space-name disktype ssd

    您可以通过再次运行同一命令来添加多个标签。

  3. 检查标签是否已配置。

    kf configure-space get-nodeselector space-name
  4. 从空间中删除标签。

    kf configure-space unset-nodeselector space-name disktype

替换 kf 堆栈的 nodeSelector

根据用于构建和封装应用的堆栈 (buildpack),可以进一步确定 Kf 应用的部署。例如,如果您希望使用 spaceStacksV2 构建的应用访问具有 Linux 内核 4.4.1 的节点。堆栈上的 nodeSelector 值会替换空间上配置的值。

如需在堆栈上配置 nodeSelector,请执行以下操作:

  1. 修改 Kf 集群的 config-defaults 并添加标签。

    $ kubectl -n kf edit configmaps config-defaults
    
  2. nodeSelector 添加到堆栈定义中。

    .....
    .....
    spaceStacksV2: |
    - name:  cflinuxfs3
            image: cloudfoundry/cflinuxfs3
            nodeSelector:
                  OS_KERNEL: LINUX_4.4.1
    .....
    .....
    

配置 BuildNodeSelector 和构建节点池

构建节点选择器仅在替换构建 Pod 的节点选择器时有效,且不会影响应用 Pod。例如,如果您同时指定空间中的节点选择器和 Kfsystem 中的构建节点选择器,则应用 Pod 将具有空间节点选择器,而构建 Pod 则具有 Kfsystem 中的构建节点选择器;但是如果您仅在空间中指定节点选择器,则应用 Pod 和构建 Pod 都将具有空间中的节点选择器。

  1. 在要为其分配构建 Pod 的节点上添加标签(例如 disktype:ssd)。

    kubectl label nodes nodeid disktype=ssd
  2. 通过修补 KfSystem CR 添加/更新构建节点选择器(采用 key:value 对格式)。

    kubectl patch kfsystem kfsystem --type='json' -p='[{'op': 'replace', 'path': '/spec/kf/config/buildNodeSelectors', 'value': {<key>:<value>}}]'

    例如,如需添加 disktype=ssd 作为构建节点选择器,请运行以下命令:

    kubectl patch kfsystem kfsystem --type='json' -p='[{'op': 'replace', 'path': '/spec/kf/config/buildNodeSelectors', 'value': {"disktype":"ssd"}}]'