Helm Chart

生产环境配置

师成师成· 更新于 2026-09-29· 阅读 10 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

生产环境配置

本指南提供在生产环境中配置 Apache Polaris Helm chart 的说明。如需查看 chart 全部取值,请参阅 Chart 参考 页面。

前置条件

  • 一个 Kubernetes 集群(建议 1.33+)
  • 已安装 Helm 3.x 或 4.x
  • 已配置 kubectl 以访问你的集群
  • 一个 PostgreSQL 或 MongoDB 数据库

添加 Helm 仓库

添加 Apache Polaris 官方 Helm 仓库:

helm repo add polaris https://downloads.apache.org/polaris/helm-chart
helm repo update

安装

创建一个 values.yaml 文件,并在其中写入你的生产环境配置。所有可用的配置选项请参见 Chart 的 Values 参考。

创建目标命名空间并安装 Chart:

kubectl create namespace polaris
helm install polaris polaris/polaris --namespace polaris --values your-production-values.yaml

验证安装:

helm test polaris --namespace polaris

生产环境配置

默认的 Helm Chart 值适用于开发和测试,但不建议在生产环境中使用。以下各节介绍了生产部署需要配置的关键领域。

身份认证

Polaris 支持内部身份认证(使用 RSA 密钥对或对称密钥),以及通过 OIDC 进行的外部身份认证,可对接 Keycloak、Okta、Azure AD 等身份提供方。

默认情况下,Polaris Helm Chart 使用自动生成密钥的内部身份认证。在多副本的生产环境中,所有 Polaris Pod 必须共享相同的令牌签名密钥,以避免令牌校验失败。

详细的配置说明请参阅身份认证页面。

持久化

默认情况下,Polaris Helm Chart 使用 in-memory 元数据存储,这不适用于生产环境。必须配置持久化的元数据存储,以确保 Pod 重启时数据不会丢失。

Polaris 支持 PostgreSQL(JDBC)和 MongoDB(NoSQL,测试版)作为可用于生产的元数据存储。详细的配置说明请参阅持久化页面。

网络

有关使用 Gateway API 或 Ingress 配置对 Polaris 的外部访问,请参阅服务与网络指南。

资源管理

在生产环境中,为 Polaris Pod 定义资源请求和限制至关重要。资源请求可确保 Pod 获得运行所需的足够资源,而资源限制则防止其在节点上占用过多资源。

为 Polaris Pod 定义资源请求和限制:

resources:
  requests:
    memory: "8Gi"
    cpu: "4"
  limits:
    memory: "8Gi"
    cpu: "4"

根据预期的工作负载和可用的集群资源调整这些值。

扩缩容

为了实现高可用性,可以运行多个 Polaris 服务器副本。这需要按照上述方式配置一个持久化元存储。

静态副本数

必须将 replicaCount 设置为所需的 Pod 数量:

replicaCount: 3

自动扩缩容

可以启用水平自动扩缩容,用于定义副本的最小与最大数量,以及 CPU 或内存的使用率目标:

autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 5
  targetCPUUtilizationPercentage: 80
  targetMemoryUtilizationPercentage: 80

Pod 拓扑分布

为了获得更好的容错能力,可以使用 topologySpreadConstraints 将 Pod 分布到不同的节点、机架或可用区。这有助于防止单一基础设施故障导致所有 Polaris 副本同时宕机。

下面是一个示例,它将 Pod 分布到不同的可用区,并确保每个可用区中的 Pod 数量相差不超过一:

topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: "topology.kubernetes.io/zone"
    whenUnsatisfiable: "DoNotSchedule"

Pod 优先级

在生产环境中,建议为 Polaris Pod 设置 priorityClassName。这样可以确保 Kubernetes 调度器给予它们比非关键工作负载更高的优先级,并有助于防止它们在节点资源不足时被驱逐。

首先,必须在集群中创建一个 PriorityClass。例如:

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: polaris-high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for Polaris service pods only."

然后,可以在 values.yaml 文件中设置 priorityClassName:

priorityClassName: "polaris-high-priority"

引导初始化 Realm

首次安装 Polaris 时,需要使用 Polaris 管理工具对每个 realm 进行引导初始化。

有关引导初始化 realm 的更多信息,请参阅管理工具指南。

PostgreSQL 元数据存储的示例:

kubectl run polaris-bootstrap \
  -n polaris \
  --image=apache/polaris-admin-tool:latest \
  --restart=Never \
  --rm -it \
  --env="polaris.persistence.type=relational-jdbc" \
  --env="quarkus.datasource.username=$(kubectl get secret polaris-persistence -n polaris -o jsonpath='{.data.username}' | base64 --decode)" \
  --env="quarkus.datasource.password=$(kubectl get secret polaris-persistence -n polaris -o jsonpath='{.data.password}' | base64 --decode)" \
  --env="quarkus.datasource.jdbc.url=$(kubectl get secret polaris-persistence -n polaris -o jsonpath='{.data.jdbcUrl}' | base64 --decode)" \
  -- \
  bootstrap -r polaris-realm1 -c polaris-realm1,root,$ROOT_PASSWORD

NoSQL(MongoDB)元数据存储示例:

kubectl run polaris-bootstrap \
  -n polaris \
  --image=apache/polaris-admin-tool:latest \
  --restart=Never \
  --rm -it \
  --env="polaris.persistence.type=nosql" \
  --env="polaris.persistence.nosql.backend=MongoDb" \
  --env="quarkus.mongodb.database=polaris" \
  --env="quarkus.mongodb.connection-string=$(kubectl get secret polaris-nosql-persistence -n polaris -o jsonpath='{.data.connectionString}' | base64 --decode)" \
  -- \
  bootstrap -r polaris-realm1 -c polaris-realm1,root,$ROOT_PASSWORD

上述两条命令都会引导创建一个名为 polaris-realm1 的 realm,其根密码为:$ROOT_PASSWORD。

⚠️ 警告

请将 $ROOT_PASSWORD 替换为强健且唯一的根凭据密码。

卸载

helm uninstall --namespace polaris polaris
kubectl delete namespace polaris --wait=true --ignore-not-found

评论

登录后参与评论

正在加载评论…