本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。

使用 Helm 创建 PostgreSQL 集群

Crunchy Data 提供一套开源的 PostgreSQL 和 PostgreSQL 相关容器。Crunchy PostgreSQL 容器套件包括用于部署、监控和管理开源 PostgreSQL 数据库的容器,更多详情请查看此 GitHub 仓库

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

此示例将在您的 Kubernetes 集群中创建以下内容

  • Postgres 主服务
  • Postgres 副本服务
  • Postgres 9.5 主数据库 (pod)
  • Postgres 9.5 副本数据库 (复制控制器)

HelmBlogDiagram.jpg

此示例创建一个简单的 Postgres 流复制部署,包括一个主(读写)和一个异步副本(只读)。您可以动态地扩展副本数量。

内容

该示例由各种 Chart 文件组成,如下所示

values.yaml此文件包含您可以在数据库模板中引用的值,允许您在一个地方指定数据库密码等值
templates/master-pod.yamlPostgres 主数据库 pod 定义。此文件导致创建单个 Postgres 主 pod。
templates/master-service.yamlPostgres 主数据库有一个服务被创建作为代理。此文件导致创建单个服务来代理对主数据库的调用。
templates/replica-rc.yamlPostgres 副本数据库由该文件定义。此文件导致创建复制控制器,从而允许按需扩展 Postgres 副本容器。
templates/replica-service.yaml此文件导致为副本数据库容器创建服务代理。

安装

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

副本大约需要一分钟才能开始与主数据库进行复制。要测试复制是否正在进行,请使用此命令,并在出现提示时输入密码:

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 可以大大简化此任务。