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

使用 Helm 建立 PostgreSQL 叢集

Crunchy Data 提供一組開放原始碼 PostgreSQL 和 PostgreSQL 相關容器。Crunchy PostgreSQL 容器套件包含部署、監控和管理開放原始碼 PostgreSQL 資料庫的容器,如需更多詳細資訊,請檢視此 GitHub 儲存庫

在這篇文章中,我們將向您展示如何使用 Helm(Kubernetes 套件管理器)部署 PostgreSQL 叢集。作為參考,本文中使用的 Crunchy Helm Chart 範例位於此處,而預先建置的容器可以在 DockerHub 上的此位置找到。

此範例將在您的 Kubernetes 叢集中建立以下項目

  • postgres master 服務
  • postgres replica 服務
  • postgres 9.5 master 資料庫 (Pod)
  • postgres 9.5 replica 資料庫 (複製控制器)

HelmBlogDiagram.jpg

此範例建立一個簡易的 Postgres 串流複製部署,其中包含一個 master(讀寫)和一個非同步副本(唯讀)。您可以動態擴展副本的數量。

目錄

此範例由各種 Chart 檔案組成,如下所示

values.yaml此檔案包含您可以在資料庫範本中參考的值,讓您可以在一個地方指定資料庫密碼等值
templates/master-pod.yamlPostgres master 資料庫 Pod 定義。此檔案會導致建立單一 postgres master Pod。
templates/master-service.yamlPostgres master 資料庫具有建立的服務作為代理。此檔案會導致建立單一服務以代理呼叫至 master 資料庫。
templates/replica-rc.yamlPostgres replica 資料庫由此檔案定義。此檔案會導致建立複製控制器,允許 postgres replica 容器隨需擴展。
templates/replica-service.yaml此檔案會導致建立 replica 資料庫容器的服務代理。

安裝

依照其 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

副本大約需要一分鐘才能開始與 master 複製。若要測試複製,請使用此命令查看複製是否正在進行,並在提示時輸入密碼作為密碼

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

如果您看到從該查詢返回的行,則表示 master 正在複製到從屬節點。嘗試在 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)'

然後驗證資料已複製到從屬節點

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

您可以執行以下 Kubernetes 命令來擴展唯讀副本的數量

kubectl scale rc crunchy-replica --replicas=2

副本需要 60 秒才能啟動並開始從 master 複製。

Kubernetes Helm 和 Charts 專案提供了一種精簡的方式來打包複雜的應用程式,並將它們部署在 Kubernetes 叢集上。部署 PostgreSQL 叢集有時可能具有挑戰性,但使用 Helm 和 Charts 大大簡化了任務。