经过多年的积极发展,PGO提出了一个强大的功能集,以尽可能方便地管理 Kubernetes 上的开源 Postgres 数据库。我们的目标是结合在生产中运行 Postgres 所需的核心功能和我们在 Kubernetes 上运行 Postgres 的课程,以创建一个为声明性工作流构建的 Kubernetes Operator。
PGO 5.0 的一个重要设计目标是尽可能轻松地运行具有预期功能的生产就绪 Postgres。让我们看看运行准备好用于生产的云原生 Postgres 需要什么。
准备生产的云原生 Postgres
有一组特定的功能对于运行任何数据库都是必不可少的,更不用说生产中的 Postgres。我们已经在 Postgres Operator 的早期版本中实现了所有这些功能,并将它们移动到 PGO 5.0 的完全声明性工作流程中:
- 高可用性:确保数据始终可访问,不会出现单点故障。
- (单点)
- 灾难恢复:为各种规模的数据提供成熟的备份/恢复系统,并能够在 Kubernetes、AWS S3、谷歌云存储 (GCS) 和 Azure Blob 存储上存储备份。
- 监控:提供专为在 Kubernetes 中运行而定制的 Postgres 健康洞察。
- 可定制性:以 Kubernetes 友好的方式轻松调整 Postgres 旋钮。
- 安全性:遵循 Kubernetes 和 Postgres 安全运行数据库的最佳实践
在 Kubernetes 上看到下一代 Postgres 的最佳方式是亲自尝试一下。
开始在 Kubernetes 上运行 Postgres
在 Kubernetes 上开始运行 Postgres 的一个好方法是通过示例。我们创建了一个“ Postgres Operator 示例”存储库,其中涵盖了许多常见的 Postgres 用例。首先,我们建议分叉PGO 示例存储库,这样可以方便地将其插入到 ArgoCD 等GitOps工具中:
https://github.com/CrunchyData/postgres-operator-examples/fork
设置完成后,您需要做的第一件事就是部署 PGO,即 Postgres Operator。这里有一些命令可以帮助您做到这一点:
YOUR_GITHUB_UN="<你的 GitHub 用户名>"
git clone --depth 1 "git@github.com:${YOUR_GITHUB_UN}/postgres-operator-examples.git"
cd postgres-operator-examples
kubectl -k kustomize/install
“kubectl”上的“-k”命令允许您运行Kustomization,它将安装运行 PGO 所需的所有对象,包括创建一个名为“postgres-operator”的命名空间。您可以使用下面的命令让您知道 PGO 何时启动并运行,这通常只需要几秒钟:
kubectl -n postgres-operator 获取 pods \
--selector=postgres-operator.crunchydata.com/control-plane=postgres-operator \
--field-selector=status.phase=Running
使用示例,您可以通过运行以下命令部署 Postgres 集群:
kubectl apply -k kustomize/postgres
或者,如果您想了解如何在 Postgres 集群旁边部署应用程序,您可以运行以下示例,该示例部署由 PGO 创建的 Postgres 数据库支持的Keycloak身份管理系统:
kubectl apply -k kustomize/keycloak
使用 PGO 创建 Postgres 集群还会创建一个 Kubernetes Secret,其中包含将应用程序连接到数据库所需的所有信息,包括主机信息用户凭据。这样做的好处是您不需要知道 Secret 的任何内容:您将它挂载到您的应用程序中,仅此而已!使用 Keycloak 示例,这看起来像:
- name:DB_ADDR
valueFrom: { secretKeyRef: { name: keycloakdb-pguser, key: host } }
- name: DB_PORT
valueFrom: { secretKeyRef: { name: keycloakdb-pguser, key: port } }
- name: DB_DATABASE
valueFrom: { secretKeyRef : { name: keycloakdb-pguser, key: dbname } }
- name: DB_USER
valueFrom: { secretKeyRef: { name: keycloakdb-pguser, key: user } }
- name: DB_PASSWORD
valueFrom: { secretKeyRef: { name: keycloakdb-pguser,密钥:密码 } }
好了,您可以安全地将您的应用程序连接到由 PGO 管理的 Postgres 数据库!
下一步
除了我在这篇文章中所能做的之外,还有更多的内容需要介绍。诸如高可用性、资源大小调整、备份管理、监控、应用软件更新、连接池等主题。




