配置专用节点池

关于节点池

节点池是集群中全都具有相同配置的一组节点。通常,如果 Pod 具有不同的资源要求,您可以定义单独的节点池。例如,apigee-cassandra Pod 需要永久性存储空间,而其他 Apigee Hybrid Pod 则不需要。

本主题介绍如何为 Hybrid 安装配置专用节点池。

使用默认 nodeSelector

最佳做法是设置两个专用节点池:一个用于 Cassandra Pod,另一个用于所有其他运行时 Pod。使用默认 nodeSelector 配置,安装程序会将 Cassandra Pod 分配给名为 apigee-data 的有状态节点池,并将所有其他 Pod 分配给名为 apigee-runtime 的无状态节点池。您只需要使用这些名称创建节点池,Apigee Hybrid 就会为您处理 Pod 计划详细信息:

默认节点池名称 说明
apigee-data 有状态节点池。
apigee-runtime 无状态节点池。

以下是默认的 nodeSelector 配置。apigeeData 属性指定 Cassandra Pod 的节点池。apigeeRuntime 指定所有其他 Pod 的节点池。您可以在替换文件中替换这些默认设置,如本主题后面所述:

nodeSelector:
  requiredForScheduling: true
  apigeeRuntime:
    key: "cloud.google.com/gke-nodepool"
    value: "apigee-runtime"
  apigeeData:
    key: "cloud.google.com/gke-nodepool"
    value: "apigee-data"

同样,如需确保将 Pod 计划到正确的节点,您只需创建两个名称分别为 apigee-dataapigee-runtime 的节点池。

requiredForScheduling 属性

nodeSelector 配置部分具有名为 requiredForScheduling 的属性:

nodeSelector:
  requiredForScheduling: false
  apigeeRuntime:
    key: "cloud.google.com/gke-nodepool"
    value: "apigee-runtime"
  apigeeData:
    key: "cloud.google.com/gke-nodepool"
    value: "apigee-data"

如果设置为 false(默认值),则无论是否使用所需名称定义节点池,系统都会计划底层 Pod。这意味着,如果您忘记创建节点池,或者不慎命名 apigee-runtimeapigee-data 以外的节点池,则 Hybrid 运行时安装将成功。Kubernetes 将决定在哪里运行您的 Pod。

如果将 requiredForScheduling 设置为 true(默认值),则安装将会失败,除非有与配置的 nodeSelector 键和值匹配的节点池。

使用自定义节点池名称

如果您不想使用默认名称的节点池,则可以使用自定义名称创建节点池,并在 nodeSelector 节中指定这些名称。例如,以下配置会将 Cassandra Pod 分配给名为 my-cassandra-pool 的池,并将其他所有 Pod 分配给名为 my-runtime-pool 的池:

nodeSelector:
  requiredForScheduling: false
  apigeeRuntime:
    key: "cloud.google.com/gke-nodepool"
    value: "my-runtime-pool"
  apigeeData:
    key: "cloud.google.com/gke-nodepool"
    value: "my-cassandra-pool"

替换 GKE 上特定组件的节点池

您还可以在单个组件级别替换节点池配置。例如,以下配置会将值为 apigee-custom 的节点池分配给 runtime 组件:

runtime:
  nodeSelector:
    key: cloud.google.com/gke-nodepool
    value: apigee-custom

您可以在以下任何组件中指定自定义节点池:

  • istio
  • mart
  • synchronizer
  • runtime
  • cassandra
  • udca
  • logger

GKE 节点池配置

在 GKE 中,节点池必须具有您在创建池时提供的唯一名称,并且 GKE 会自动为每个节点添加如下标签:

cloud.google.com/gke-nodepool=THE_NODE_POOL_NAME

只要您创建了名为 apigee-dataapigee-runtime 的节点池,就不需要进一步配置。如果要使用自定义节点名称,请参阅使用自定义节点池名称

Anthos 节点池配置

目前仅 Anthos 1.1.1 支持 Apigee Hybrid。此版本的 Anthos 不支持节点池功能;因此,您必须按照以下方式,手动为工作器节点添加标签。在 Hybrid 集群启动并运行后,执行以下步骤:

  1. 运行以下命令以获取集群中的工作器节点列表:
    kubectl -n apigee get nodes

    输出示例:

    NAME                   STATUS   ROLES    AGE     VERSION
    apigee-092d639a-4hqt   Ready    <none>   7d      v1.14.6-gke.2
    apigee-092d639a-ffd0   Ready    <none>   7d      v1.14.6-gke.2
    apigee-109b55fc-5tjf   Ready    <none>   7d      v1.14.6-gke.2
    apigee-c2a9203a-8h27   Ready    <none>   7d      v1.14.6-gke.2
    apigee-c70aedae-t366   Ready    <none>   7d      v1.14.6-gke.2
    apigee-d349e89b-hv2b   Ready    <none>   7d      v1.14.6-gke.2
  2. 为每个节点添加标签,以区分运行时节点和数据节点。

    使用以下命令为节点添加标签:

    kubectl label node NODE_NAME KEY=VALUE

    例如:

    $ kubectl label node apigee-092d639a-4hqt apigee.com/apigee-nodepool=apigee-runtime
    $ kubectl label node apigee-092d639a-ffd0 apigee.com/apigee-nodepool=apigee-runtime
    $ kubectl label node apigee-109b55fc-5tjf apigee.com/apigee-nodepool=apigee-runtime
    $ kubectl label node apigee-c2a9203a-8h27 apigee.com/apigee-nodepool=apigee-data
    $ kubectl label node apigee-c70aedae-t366 apigee.com/apigee-nodepool=apigee-data
    $ kubectl label node apigee-d349e89b-hv2b apigee.com/apigee-nodepool=apigee-data

替换 Anthos GKE 上特定组件的节点池

您还可以在 Anthos GKE 安装的各个组件级别替换节点池配置。例如,以下配置会将值为 apigee-custom 的节点池分配给 runtime 组件:

runtime:
  nodeSelector:
    key: apigee.com/apigee-nodepool
    value: apigee-custom

您可以在以下任何组件中指定自定义节点池:

  • istio
  • mart
  • synchronizer
  • runtime
  • cassandra
  • udca
  • logger