本文已发布一年以上。较旧的文章可能包含过时的内容。请检查页面上的信息自发布以来是否已变得不正确。
使用 Helm 创建 PostgreSQL 集群
Crunchy Data 提供一套开源的 PostgreSQL 和 PostgreSQL 相关容器。 Crunchy PostgreSQL 容器套件包括部署、监控和管理开源 PostgreSQL 数据库的容器,更多详细信息请查看此 GitHub 存储库。
在这篇文章中,我们将向您展示如何使用 Helm(一个 Kubernetes 包管理器)部署 PostgreSQL 集群。作为参考,本文中使用的 Crunchy Helm Chart 示例位于 此处,预构建的容器可以在 DockerHub 上 此处 找到。
此示例将在您的 Kubernetes 集群中创建以下内容
- Postgres 主服务
- Postgres 副本服务
- Postgres 9.5 主数据库 (pod)
- Postgres 9.5 副本数据库 (复制控制器)
此示例创建一个简单的 Postgres 流复制部署,包含一个主(读写)和一个异步副本(只读)。您可以动态扩展副本的数量。
目录
该示例由各种 Chart 文件组成,如下所示
values.yaml | 此文件包含您可以在数据库模板中引用的值,允许您在一个地方指定数据库密码等值 |
templates/master-pod.yaml | Postgres 主数据库 pod 定义。此文件导致创建一个单独的 Postgres 主 pod。 |
templates/master-service.yaml | Postgres 主数据库创建了一个服务来充当代理。此文件导致创建一个服务来代理对主数据库的调用。 |
templates/replica-rc.yaml | 此文件定义 Postgres 副本数据库。此文件导致创建一个复制控制器,允许根据需要扩展 Postgres 副本容器。 |
templates/replica-service.yaml | 此文件创建副本数据库容器的服务代理。 |
安装
按照其 GitHub 文档 安装 Helm,然后按如下方式安装示例
helm init
cd crunchy-containers/examples/kubehelm
helm install ./crunchy-postgres
测试
安装 Helm Chart 后,您将看到以下服务
kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
crunchy-master 10.0.0.171 \<none\> 5432/TCP 1h
crunchy-replica 10.0.0.31 \<none\> 5432/TCP 1h
kubernetes 10.0.0.1 \<none\> 443/TCP 1h
副本大约需要一分钟才能开始与主服务器复制。要测试复制,请使用此命令查看复制是否正在进行,并在提示时输入密码
psql -h crunchy-master -U postgres postgres -c 'table pg\_stat\_replication'
如果从该查询返回一行,则表示主服务器正在复制到从服务器。尝试在主服务器上创建一些数据
psql -h crunchy-master -U postgres postgres -c 'create table foo (id int)'
psql -h crunchy-master -U postgres postgres -c 'insert into foo values (1)'
然后验证数据是否已复制到从服务器
psql -h crunchy-replica -U postgres postgres -c 'table foo'
您可以通过运行以下 Kubernetes 命令来扩展只读副本的数量
kubectl scale rc crunchy-replica --replicas=2
副本需要 60 秒才能启动并开始从主服务器复制。
Kubernetes Helm 和 Charts 项目提供了一种简化的方式来打包复杂的应用程序并在 Kubernetes 集群上部署它们。部署 PostgreSQL 集群有时可能会很困难,但使用 Helm 和 Charts 可以大大简化该任务。
- 下载 Kubernetes
- 在 GitHub 上参与 Kubernetes 项目
- 在 Stack Overflow 上发布问题(或回答问题)
- 在 Slack 上与社区联系
- 在 Twitter 上关注我们 @Kubernetesio 以获取最新更新