加入我们,于10月8日至10日在纽约市,学习关于GraphQL联邦和API平台工程的最新技巧、趋势和新闻。加入在纽约市的GraphQL峰会2024
文档
免费开始

在 Kubernetes 上部署

Kubernetes 上的路由器自托管部署


学习如何部署一个)在 Kubernetes 中使用 Helm 图表。

Kubernetes cluster
Query
Load Balancer
Router
Coprocessor
Router
Coprocessor
Clients

以下指南提供了以下步骤:

  • 从 Apollo 容器存储库中获取 Helm 图表。
  • 使用基本 Helm 图表部署 路由器
  • 配置图表值以导出度量、启用 Rhai 脚本和部署协处理器。
  • 选择最适合从网关迁移到 路由器的图表值。

注意

Apollo 路由器核心的源代码及其所有分发均以 Elastic License v2.0 (ELv2) 许可证下提供。

关于路由器 Helm 图表

Helm是 Kubernetes(k8s)的包管理器。Apollo 为 GitHub 中的每个 Apollo 路由器核心版本提供应用程序 Helm 图表。自路由器版本 0.14.0 以来,Apollo 以 GitHub 容器存储库中的 开放容器倡议(OCI)镜像的形式发布了路由器 Helm 图表。

注意

OCI 路由器图表的路径是oci://ghcr.io/apollographql/helm-charts/router

您可以通过相同的 命令行选项和 YAML 配置来自定义已部署的 路由器,但分别在不同的 Helm CLI 选项和 YAML 键下。

基本部署

按照此指南使用 Helm 部署 ,以安装每个路由器版本中提供的提供的基本图表。

每个 路由器图表都有一个 values.yaml 文件,包含 路由器和部署设置。已发布且未编辑的文件包含一些明确的设置,包括:

设置 Helm

  1. 安装 Helm 版本 3.x。路由器的 Helm 图表需要 Helm v3.x。

    注意

    您的Kubernetes版本必须与Helm v3兼容。详细信息,请参阅Helm版本支持策略

  2. 使用Helm登录到GitHub的Apollo容器注册库。

    • 获取GitHub OCI令牌并将其保存在环境变量GITHUB_OCI_TOKEN中。有关说明,请参照认证到GitHub容器注册库指南

    • 使用helm registry login命令,使用您保存的GITHUB_OCI_TOKEN和GitHub用户名:

      echo ${GITHUB_OCI_TOKEN} | helm registry login -u <username> --password-stdin ghcr.io
  3. 登录后,使用helm show values命令显示最新的router图表值来验证您对注册库的访问权限:

    helm show values oci://ghcr.io/apollographql/helm-charts/router

设置集群

安装工具并为您的Kubernetes集群提供基础设施。

例如,请参阅从Apollo的参考架构设置。该指南提供了您可参考的步骤,包括收集云平台(GCP或AWS)的帐户和凭证、提供资源以及部署您的

💡 技巧

要管理在Kubernetes上部署router所需的系统资源:

设置图

设置您的自托管并获取其图引用API密钥

如果您需要设置的指南,您可以按照自托管路由快速启动和完成以下步骤:步骤 1 (设置 Apollo 工具)步骤 1(设置 Apollo 工具),步骤 4(获取您的子图模式)步骤 4(获取您的子图模式)以及步骤 5(发布您的子图模式)步骤 5(发布您的子图模式)

部署路由器

要部署路由器,请使用带有容器仓库中 OCI 图像的参数、values.yaml配置文件的参数以及覆盖特定配置值的附加参数helm install命令。

helm install --namespace <router-namespace> --set managedFederation.apiKey="<graph-api-key>" --set managedFederation.graphRef="<graph-ref>" oci://ghcr.io/apollographql/helm-charts/router --version <router-version> --values router/values.yaml

用于特定配置值所需的参数:

  • --set managedFederation.graphRef="<graph-ref>"。你的管理图引用(id@variant),与APOLLO_GRAPH_REF环境变量的值相同。
  • --set managedFederation.apiKey="<graph-api-key>"。您的管理图的 API 键,与APOLLO_KEY环境变量的值相同。

一些可选但推荐使用的参数:

  • --namespace <router-namespace>。此部署的命名空间范围。
  • --version <router-version>。要部署的路由器版本。如果不使用helm install指定,则安装最新版本。

验证部署

使用helm list命令验证您的路由器是否是部署的版本之一。

如果您使用了--namespace <router-namespace>选项,您只能列出您命名空间内的版本:

helm list --namespace <router-namespace>

带有指标端点的部署

路由器支持 Prometheus 和 OpenTelemetry 协议(OTLP)的指标端点。基本部署不启用指标端点,因为路由器图表明确禁用了 Prometheus(和 OTLP 通过省略)。

通过 YAML 配置文件在已部署的路由器中启用指标端点:

  1. 创建一个my_values.yaml的 YAML 文件,以包含覆盖默认值的附加值。

  2. 编辑my_values.yaml以启用指标端点:

    my_values.yaml
    router:
    configuration:
    telemetry:
    metrics:
    prometheus:
    enabled: true
    listen: 0.0.0.0:9090
    path: "/metrics"
    otlp:
    temporality: delta
    endpoint: <otlp-endpoint-addr>

    注意

    虽然这个例子中启用了 Prometheus 和 OTLP,但在实践中通常只启用一个端点。

    • router.configuration.telemetry.metrics.prometheus 已配置但默认禁用(enabled: false),此配置设置 enabled: true
    • router.configuration.telemetry.metrics.otlp 已启用。
    • router.configuration.telemetry.temporality 默认是 temporality: cumulative,大多数指标消费者是一个不错的选择。对于DataDog,使用 temporality: delta
  3. 使用额外的YAML配置文件部署 router。例如,从基本部署步骤开始使用 helm install 命令,追加 --values my_values.yaml

    helm install --namespace <router-namespace> --set managedFederation.apiKey="<graph-api-key>" --set managedFederation.graphRef="<graph-ref>" oci://ghcr.io/apollographql/helm-charts/router --version <router-version> --values router/values.yaml --values my_values.yaml

使用Rhai脚本来部署

router 支持使用Rhai脚本来添加自定义功能。

在部署 router 中启用Rhai脚本需要为你的Rhai脚本挂载额外的卷并将脚本放入卷中。可以通过遵循 创建自定义内部路由图表的单独示例 中的步骤。该示例创建了一个新的(内部)图表,它封装(并依赖于)已发布的 router 图表,并且新的图表具有添加必要配置的模板,从而使部署的 router 能够使用Rhai脚本。

使用协作处理器部署

router 支持 外部协作处理router的请求处理生命周期 上运行自定义逻辑。

已部署的协作处理器在 router pod 中有自己的应用程序镜像和容器。

要通过YAML配置文件配置协作处理器和其容器为您部署的 router,请执行以下步骤:

  1. 创建一个my_values.yaml的 YAML 文件,以包含覆盖默认值的附加值。

  2. 编辑 my_values.yaml 以配置 router 的协作处理器。作为参考,遵循 典型最小 配置示例,并将它们应用到 router.configuration.coprocessor

  3. 编辑 my_values.yaml 以添加一个用于协作处理器的容器。

    my_values.yaml
    extraContainers:
    - name: <coprocessor-deployed-name> # name of deployed container
    image: <coprocessor-app-image> # name of application image
    ports:
    - containerPort: <coprocessor-container-port> # must match port of router.configuration.coprocessor.url
    env: [] # array of environment variables
  4. 使用额外的YAML配置文件部署 router。例如,从基本部署步骤开始使用 helm install 命令,追加 --values my_values.yaml

    helm install --namespace <router-namespace> --set managedFederation.apiKey="<graph-api-key>" --set managedFederation.graphRef="<graph-ref>" oci://ghcr.io/apollographql/helm-charts/router --version <router-version> --values router/values.yaml --values my_values.yaml

按环境分开配置

为了支持您在不同环境(开发、预发布、生产等)的不同部署配置,Apollo建议将您的配置值分开到单独的文件

  • 一个 通用 文件,其中包含适用于所有环境的值。
  • 每个环境一个 环境 文件,该文件包含通用文件中的值,并覆盖这些值,同时添加新的环境特定值。

helm install 命令按照你在命令中设置它们的顺序应用每个 --values <values-file> 选项。因此,在设置环境文件之前必须设置一个通用文件,以便首先应用环境文件的值,并覆盖通用文件的值。

例如,此命令先应用 common_values.yaml 文件,然后才应用 prod_values.yaml 文件:

helm install --namespace <router-namespace> --set managedFederation.apiKey="<graph-api-key>" --set managedFederation.graphRef="<graph-ref>" oci://ghcr.io/apollographql/helm-charts/router --version <router-version> --values router/values.yaml --values common_values.yaml --values prod_values.yaml

使用 Istio 在 Kubernetes 中部署

Istio 是 Kubernetes 的一个服务网格,通常由于其流量整形能力而安装在集群上。虽然我们 neither 特地推荐 nor 支持 Istio,也没有为在包含 Istio 的集群中安装 Router 提供具体的指令,但在配置 Istio 时存在一个已知考虑因素。

由于 Istio 的 sidecar 注入方式,可能需要考虑更多的配置和额外配置。如果没有额外的配置,Istio 可能会尝试同时重新配置网络接口和 router 启动,这将导致启动失败。

这不是一个 router 问题,Istio 在他们的 自己的文档 中以一般方式管理问题的说明。他们建议在 Istio 准备就绪之前防止 pod 中所有其他容器的启动。当使用 Istio 时,我们推荐这种方法。

针对网关迁移进行配置

@apollo/gateway 迁移到 router 时,考虑以下建议以最大限度地提高您的 router 部署的兼容性。

增加最大请求数据包字节

默认情况下,router 将其支持的最大请求数据包大小设置为 2MB,而 gateway 将其支持的最大请求数据包大小设置为 20MB。如果您的 gateway 默认接收大于 2MB 的请求,您可以通过以下配置确保 router 与您的 gateway 部署兼容。

values.yaml
router:
configuration:
limits:
http_max_request_bytes: 20000000 #20MB

增加请求超时时间

router 的超时时间增加,以适应具有高延迟的 操作。

values.yaml
router:
configuration:
traffic_shaping:
router:
timeout: 6min
all:
timeout: 5min

传递 subgraph 错误

gateway 将 subgraph 错误传递给客户端,但 router 默认不传递,因此需要配置以传递它们。

values.yaml
router:
configuration:
include_subgraph_errors:
all: true
上一页
概览
下一页
使用 Docker 运行
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,即Apollo GraphQL。

隐私政策

公司