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。
在您希望应用 pod 访问的节点上添加一个标签 (
distype=ssd
)。kubectl label nodes nodeid disktype=ssd
在 Kf 空间上添加同一标签。此空间中部署的所有应用都将访问符合条件的节点。
kf configure-space set-nodeselector space-name disktype ssd
您可以通过再次运行同一命令来添加多个标签。
检查标签是否已配置。
kf configure-space get-nodeselector space-name
从空间中删除标签。
kf configure-space unset-nodeselector space-name disktype
替换 kf 堆栈的 nodeSelector
根据用于构建和封装应用的堆栈 (buildpack),可以进一步确定 Kf 应用的部署。例如,如果您希望使用 spaceStacksV2
构建的应用访问具有 Linux 内核 4.4.1 的节点。堆栈上的 nodeSelector
值会替换空间上配置的值。
如需在堆栈上配置 nodeSelector
,请执行以下操作:
修改 Kf 集群的
config-defaults
并添加标签。$ kubectl -n kf edit configmaps config-defaults
将
nodeSelector
添加到堆栈定义中。..... ..... spaceStacksV2: | - name: cflinuxfs3 image: cloudfoundry/cflinuxfs3 nodeSelector: OS_KERNEL: LINUX_4.4.1 ..... .....
配置 BuildNodeSelector 和构建节点池
构建节点选择器仅在替换构建 Pod 的节点选择器时有效,且不会影响应用 Pod。例如,如果您同时指定空间中的节点选择器和 Kfsystem 中的构建节点选择器,则应用 Pod 将具有空间节点选择器,而构建 Pod 则具有 Kfsystem 中的构建节点选择器;但是如果您仅在空间中指定节点选择器,则应用 Pod 和构建 Pod 都将具有空间中的节点选择器。
在要为其分配构建 Pod 的节点上添加标签(例如
disktype:ssd
)。kubectl label nodes nodeid disktype=ssd
通过修补 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"}}]'