本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

使用 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 可以大大簡化此任務。