PostgreSQL (Postgres) 是一个健壮的有状态、对象关系和开源数据库,以其可靠性、高性能和可扩展性而闻名。数据库管理系统提供的功能包括外键约束、高可用性、复杂查询、SQL 多版本并发控制 (MVCC) 和可更新视图。这些特性使 PostgreSQL 适合为 Kubernetes (K8s) 应用程序提供弹性和高可用性的数据服务。
但是,要将 PostgreSQL 数据库组件实施到 Kubernetes 环境中,您需要一个自动配置、修改和监控 PostgreSQL 集群的操作员。操作员监控 PostgreSQL 集群清单——节点、安全性、容错性和站点拓扑——并进行必要的调整。
PostgreSQL Kubernetes Operator 包括:
让我们仔细看看这些 PostgreSQL Kubernetes Operator。我们将审查每个运营商的一些功能以及每个运营商的安装情况,以帮助您确定哪一个最能满足您的需求。
Crunchy Postgres Operator for Kubernetes (PGO) 可自动部署并简化支持 Kubernetes 的 PostgreSQL 集群的管理。Operator 还提供 pod 自定义和 PostgreSQL 配置功能,通过 pgBackRest开源实用程序 提供高可用性、监控和数据恢复。
重要的 PGO 功能包括:
您可以通过两种方式安装 PGO PostgreSQL Operator:
您需要这些先决条件来安装和运行 PGO:
有关安装和配置 PGO 的详细步骤,请参阅 Crunchy Data 的文档。Crunchy Operator 的架构依赖于 Kubernetes 自定义资源 (CR) 来创建各种自定义资源定义 (CRD) 来部署和管理 PostgreSQL 集群。这些 CRD 包括:
要让操作员使用自定义资源配置 PostgreSQL 集群,您需要首先将用于定义 PostgreSQL 集群的属性添加到 pgclusters.crunchydata.com CRD。包括集群名称、存储、秘密引用、边车和高可用性规则等详细信息。
接下来,PostgreSQL Operator 将运行各种任务来部署健康的集群。其中一项任务是为秘密引用创建部署,例如 pgBackRest 存储库和 PostgreSQL 主实例。
设置 PostgreSQL 实例后,操作员会创建一个pgBackRest以利用其 repo 的副本配置功能。pgBackRest 存储库还包括如下功能和特性:
有关设置自定义配置、灾难恢复、用户角色和身份验证的进一步指导, 请参阅 Crunchy 的 PostgreSQL Operator文档。
Patroni 为 Zalando 的Postgres Operator提供支持。Operator 可帮助您自动集成到 CI/CD 管道中,而无需访问 Kubernetes API。这种直接访问消除了手动操作并自动化了资源配置。此外,该 Operator 使您能够管理各种命名空间中的多个 Postgres 集群。
大部分操作员范围简化了在 Kubernetes 上部署由 Patroni 提供支持的集群——滚动更新、配置和清理 Postgres 集群——而 Patroni 处理高可用性集群引导操作。
我们建议使用以下选项之一在本地运行 Kubernetes:
此外,请务必安装 kubectl 以与 Kubernetes 基础架构进行交互。
您可以通过以下三种方式之一安装 Postgres Operator:
有关详细的安装指南,请参阅 Zalando 的文档。
一旦安装完成并且操作员正在运行,您就可以部署 Postgres 集群。首先,使用以下命令提交 Postgres 集群清单:
kubectl create -f manifests/minimal-postgres-manifest.yaml
在 Postgres Operator 添加并验证集群清单后,它会创建端点和服务资源以及 StatefulSet 以根据清单指示的实例生成新的 pod。
接下来,数据库 pod 将运行 Spilo 映像和 Patroni pod 模板,由数字后缀标识。它们将分为主 pod 和另一个 pod,用于端点和服务下的副本。
AppsCode 开发了KubeDB,可让您为各种数据库创建 Operator。KubeDB 自动执行 Kubernetes 中的常规 PostgreSQL 操作,例如集群配置、备份、恢复、修补、故障发现和修复。此外,KubeDB Operator 允许您为所有有状态和无状态应用程序管理一个堆栈,从而降低了复杂性。
KubeDB 的其他核心功能包括:
您将需要这些工具来运行 KubeDB:
由于 KubeDB 操作员在 Kubernetes 环境中监控 Postgres 对象,因此 KubeDB 操作员在创建 Postgres 对象后启动了一个新的 StatefulSet 和两个集群 IP 服务。
按照以下步骤安装 KubeDB 算子,并详细了解 KubeDB 算子如何在 Kubernetes 中管理 Postgres 数据库。
KubeDB 与其他 PostgreSQL 运营商的不同之处在于,其他运营商使用内部工具而不是 Patroni 管理集群。此外,KubeDB 在独立的 GitHub 存储库中维护组织良好的文档。
尽管该公司提供免费的社区运营商,但部署功能运营商所需的所有核心组件仅在其基于订阅的企业版中可用。有关更多安装说明,请参阅 KubeDB 的文档。
StackGres Operator提供了多个框架来设置资源、配置持久卷和定义配置文件,就像 Zalando 提供的一样。这些配置经过全面验证,包括最佳实践和对在个人和企业级别部署 StackGres 操作员的支持。
团队在处理分布式基础架构时面临的一些核心挑战是可观察性、性能调整以及抽象出与相互交织的平台相关的复杂性。StackGres 对这些挑战的解决方案之一是将Envoy添加到他们的操作员中,这是一个通过可观察性和一致的性能调整帮助查明错误的代理。
在此过程中,操作员执行其 Kubernetes 任务,同时收集指标并调整平台以提高其容错性和可用性。
StackGres 的安装相对简单:您可以使用 kubectl 命令或通过 Helm 快速安装它,以进行生产就绪和可定制的安装:
kubectl apply -f 'https://sgres.io/install
or
helm install --namespace stackgres stackgres-operator --set-string
adminui.service.type=LoadBalancer
https://stackgres.io/downloads/stackgres-k8s/stackgres/latest/helm/stackgres-operator.tgz
安装后,确认操作员已准备好使用此命令:
kubectl wait -n stackgres deployment -l group=stackgres.io --for=condition=Available
当操作员准备好使用时,您会看到 Pod 正在运行:
➜ kubectl get pods -n stackgres -l group=stackgres.io
NAME READY STATUS RESTARTS AGE
stackgres-operator-78d57d4f55-pm8r2 1/1 Running 0 3m34s
stackgres-restapi-6ffd694fd5-hcpgp 2/2 Running 0 3m30s
您现在可以创建、扩展和自定义 Postgres 集群。查看 StackGres文档以获取有关如何配置和部署 StackGres 集群的进一步指导。
Percona Distribution for PostgreSQL Operator是 Percona 对 Operator 领域的补充,基于 Crunchy Data 的 Operator。Percona 的架构与 Crunchy Data 非常相似,但有一些附加功能:
Postgres Operator 在部署时将以下组件添加到 Postgres 容器套件中:
最新的 Percona Postgres 算子(1.10)正式支持这些平台:
您还可以通过 Minikube 或 Helm 图表安装 Percona。您将需要 kubectl 工具来在所有平台上部署操作员。
在每个平台上设置 Percona 需要不同的配置,所有这些都可以在他们的文档中找到。
我们强调的操作符满足在 Kubernetes 上运行高可用性和容错 PostgreSQL 集群的基本阈值。但是,您需要为 Postgres pod 提供动态和容器原生存储,以保持可用性,即使在 pod 重新调度时也是如此。
您需要满足可用性、性能、安全性、合规性和服务级别协议 (SLA) 要求的端到端数据管理解决方案。详细了解Portworx 数据服务数据库即服务平台如何帮助部署和自动管理您的 Kubernetes 数据服务。