本文已超過一年。較舊的文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
使用 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 資料庫 (複製控制器)
此範例建立一個簡易的 Postgres 串流複製部署,其中包含一個 master(讀寫)和一個非同步副本(唯讀)。您可以動態擴展副本的數量。
目錄
此範例由各種 Chart 檔案組成,如下所示
values.yaml | 此檔案包含您可以在資料庫範本中參考的值,讓您可以在一個地方指定資料庫密碼等值 |
templates/master-pod.yaml | Postgres master 資料庫 Pod 定義。此檔案會導致建立單一 postgres master Pod。 |
templates/master-service.yaml | Postgres master 資料庫具有建立的服務作為代理。此檔案會導致建立單一服務以代理呼叫至 master 資料庫。 |
templates/replica-rc.yaml | Postgres 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 大大簡化了任務。
- 下載 Kubernetes
- 在 GitHub 上參與 Kubernetes 專案
- 在 Stack Overflow 上發布問題(或回答問題)
- 在 Slack 上與社群聯繫
- 在 Twitter 上追蹤 @Kubernetesio 以獲取最新更新