生产环境配置
生产环境配置
本指南提供在生产环境中配置 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: 80Pod 拓扑分布
为了获得更好的容错能力,可以使用 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_PASSWORDNoSQL(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评论
登录后参与评论
KnowForge