这篇文章已发表一年多。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已不准确。

使用 Helm 创建 PostgreSQL 集群

Crunchy Data 提供了一套开源的 PostgreSQL 和 PostgreSQL 相关容器。Crunchy PostgreSQL 容器套件包含用于部署、监控和管理开源 PostgreSQL 数据库的容器,更多详细信息请参阅这个 GitHub 仓库

在这篇博文中,我们将向你展示如何使用 Kubernetes 包管理器 Helm 部署 PostgreSQL 集群。供参考,本文中使用的 Crunchy Helm Chart 示例位于此处,预构建的容器可以在 DockerHub 的这个位置找到。

这个例子将在你的 Kubernetes 集群中创建以下内容

  • postgres master 服务
  • postgres replica 服务
  • postgres 9.5 master 数据库 (pod)
  • postgres 9.5 replica 数据库 (replication controller)

HelmBlogDiagram.jpg

这个例子创建了一个简单的 Postgres 流复制部署,包含一个 master (读写) 和一个异步 replica (只读)。你可以动态扩展 replica 的数量。

目录

该示例由以下各种 Chart 文件组成

values.yaml这个文件包含你可以在数据库模板中引用的值,允许你在一个地方指定数据库密码等值
templates/master-pod.yamlpostgres master 数据库 Pod 定义。这个文件会创建一个 postgres master Pod。
templates/master-service.yamlpostgres master 数据库创建了一个用作代理的服务。这个文件会创建一个服务来代理对 master 数据库的调用。
templates/replica-rc.yamlpostgres replica 数据库由此文件定义。这个文件会创建一个 replication controller,允许按需扩展 postgres replica 容器。
templates/replica-service.yaml这个文件会创建 replica 数据库容器的服务代理。

安装

根据 Helm 的 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

replica 大约需要一分钟才能开始与 master 进行复制。要测试复制,请使用此命令查看复制是否正在进行,提示时输入数据库密码

psql -h crunchy-master -U postgres postgres -c 'table pg\_stat\_replication'

如果该查询返回一行结果,则表示 master 正在复制到 replica。尝试在 master 上创建一些数据

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)'

然后验证数据是否已复制到 replica

psql -h crunchy-replica -U postgres postgres -c 'table foo'

你可以通过运行以下 Kubernetes 命令扩展只读 replica 的数量

kubectl scale rc crunchy-replica --replicas=2

replica 启动并开始从 master 复制需要 60 秒。

Kubernetes 的 Helm 和 Charts 项目提供了一种简化复杂应用的打包和部署方式,使其能够轻松部署到 Kubernetes 集群。部署 PostgreSQL 集群有时可能具有挑战性,但使用 Helm 和 Charts 可以大大简化此任务。