本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
使用 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 副本資料庫 (複製控制器)
此示例建立一個簡單的 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 | 此檔案導致為副本資料庫容器建立服務代理。 |
安裝
根據 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 可以大大簡化此任務。
- 下載 Kubernetes
- 在 GitHub 上參與 Kubernetes 專案
- 在 Stack Overflow 上提問(或回答問題)
- 在 Slack 上與社群聯絡
- 在 Twitter 上關注我們 @Kubernetesio 獲取最新更新