Zalando Postgres Operator 快速上手
目錄
-
前提條件
-
配置選項
-
部署選項
-
Kubernetes 上的手動部署設置
-
OpenShift 上的手動部署設置
-
Helm chart
-
檢查 Postgres Operator 是否正在運行
-
部署 operator UI
-
創建 Postgres cluster
-
通過 psql 連接到 Postgres cluster
-
刪除 Postgres cluster
本指南旨在讓您快速瞭解在本地 Kubernetes
環境中使用 Postgres Operator
。
前提條件
由於 Postgres Operator
是爲 Kubernetes (K8s)
框架設計的,因此首先設置它。對於本地測試,我們建議使用以下解決方案之一:
-
minikube, 在
VM
內創建單節點K8s
集羣(需要KVM
或VirtualBox
) -
https://github.com/kubernetes/minikube/releases
-
kind 和 k3d, 允許創建在
Docker
上運行的多節點K8s
集羣(需要Docker
) -
https://kind.sigs.k8s.io/
-
https://k3d.io
要與 K8s
基礎設施交互,請安裝其 CLI
運行時 kubectl。
- https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-binary-via-curl
本快速入門假設您已經啓動了 minikube
或創建了本地 kind
集羣。請注意,您還可以使用 Docker Desktop for Mac
中內置的 K8s
支持來遵循本教程的步驟。您必須將 minikube start
和 minikube delete
替換爲您的啓動操作,以獲得 Docker
內置的 K8s
支持。
配置選項
只能在部署新的 Postgres
集羣之前配置 Postgres Operator
。這可以通過兩種方式工作:通過 ConfigMap
或自定義 OperatorConfiguration
對象。有關配置的更多詳細信息,請參見此處。
- https://postgres-operator.readthedocs.io/en/latest/reference/operator_parameters/
部署選項
Postgres Operator
可以通過以下方式部署:
-
Manual deployment
-
Kustomization
-
Helm chart
Kubernetes 上的手動部署設置
只需應用 yaml
清單即可安裝 Postgres Operator
。注意,我們提供的 /manifests
目錄僅作爲示例;您應該考慮將清單調整爲您的 K8s
環境(例如:命名空間)。
# 首先,克隆存儲庫並切換到目錄
git clone https://github.com/zalando/postgres-operator.git
cd postgres-operator
# 按以下順序應用清單
kubectl create -f manifests/configmap.yaml # 配置
kubectl create -f manifests/operator-service-account-rbac.yaml # 身份和權限
kubectl create -f manifests/postgres-operator.yaml # 部署
kubectl create -f manifests/api-service.yaml # 通過 UI 使用 operator API
有一個 Kustomization manifest 結合了上述資源(CRD 除外)— 它可以與 kubectl 1.14
或更高版本一起使用,如下所示:
-
https://github.com/kubernetes-sigs/kustomize
-
https://github.com/zalando/postgres-operator/blob/master/manifests/kustomization.yaml
kubectl apply -k github.com/zalando/postgres-operator/manifests
爲方便起見,我們使用 run_operator_locally
腳本通過 minikube
自動啓動 operator
。它應用 acid-minimal-cluster
。清單。
- https://github.com/zalando/postgres-operator/blob/master/manifests/minimal-postgres-manifest.yaml
./run_operator_locally.sh
OpenShift 上的手動部署設置
要在 OpenShift
中安裝 Postgres Operator
,您必須將配置參數 kubernetes_use_configmaps
更改爲 "true"
。否則,operator
和 Patroni
將在 OpenShift
不支持的 Endpoints
中存儲 leader
和配置 keys
。對於 postgres-operator
和 postgres-pod
集羣角色,這還需要一組稍微不同的規則。
oc create -f manifests/operator-service-account-rbac-openshift.yaml
Helm chart
或者,可以使用提供的 Helm chart
安裝 operator
,從而爲您節省手動步驟。克隆此 repo
並將目錄更改爲 repo
根目錄。安裝 Helm v3
後,您應該能夠運行:
- https://helm.sh/
helm install postgres-operator ./charts/postgres-operator
該 chart
適用於 Helm 2
和 Helm 3
。使用 v3
時,將跳過 v2
中的 crd-install
hook 併發出警告。使用 Helm 2
安裝應用程序的文檔可以在 v2 文檔中找到。
- https://v2.helm.sh/docs/
該 chart
還託管在:
- https://opensource.zalando.com/postgres-operator/charts/postgres-operator/
檢查 Postgres Operator 是否正在運行
啓動 operator
可能需要幾秒鐘。在應用 Postgres
集羣清單之前檢查 operator pod
是否正在運行。
# 如果您使用 yaml 清單創建了 operator
kubectl get pod -l name=postgres-operator
# 如果您使用 helm chart 創建了 operator
kubectl get pod -l app.kubernetes.io/name=postgres-operator
如果 operator
沒有進入 Running
狀態,請使用 kubectl describe
檢查 deployment
或 pod
的最新 K8s
事件或檢查 operator
日誌:
kubectl logs "$(kubectl get pod -l
部署 operator UI
在以下段落中,我們將描述如何使用 kubectl
從命令行訪問和管理 PostgreSQL
集羣。但也可以通過基於瀏覽器的 Postgres Operator UI 來完成。在部署 UI
之前,請確保 operator
正在運行,並且可以通過 K8s service 訪問其 REST API
。此 API
的 URL
必須在 UI
的部署清單中配置。
-
https://postgres-operator.readthedocs.io/en/latest/operator-ui/
-
https://github.com/zalando/postgres-operator/blob/master/manifests/api-service.yaml
-
https://github.com/zalando/postgres-operator/blob/master/ui/manifests/deployment.yaml#L43
要部署 UI
,只需應用其所有清單文件或使用 UI helm chart
:
# 手動部署
kubectl apply -f ui/manifests/
# 或 kustomization
kubectl apply -k github.com/zalando/postgres-operator/ui/manifests
# 或 helm chart
helm install postgres-operator-ui ./charts/postgres-operator-ui
與 operator
一樣,檢查 UI pod
是否進入 Running
狀態:
# 如果您使用 yaml 清單創建了 operator
kubectl get pod -l name=postgres-operator-ui
# 如果您使用 helm chart 創建了 operator
kubectl get pod -l app.kubernetes.io/name=postgres-operator-ui
您現在可以通過端口轉發 UI pod
(注意 label selector
)訪問 Web
界面,並在瀏覽器中輸入 localhost:8081
:
kubectl port-forward svc/postgres-operator-ui 8081:80
UI 文檔中詳細解釋了可用選項。
- https://postgres-operator.readthedocs.io/en/latest/operator-ui/
創建 Postgres cluster
如果 operator
pod 正在運行,它會偵聽有關 postgresql
資源的新事件。現在,是時候提交您的第一個 Postgres
集羣清單了。
# 創建一個 Postgres cluster
kubectl create -f manifests/minimal-postgres-manifest.yaml
在 cluster
清單提交併通過驗證後,operator
將創建 Service
和 Endpoint
資源以及一個 StatefulSet
,它根據清單中指定的實例數量啓動新的 Pod
。所有資源都像 cluster
一樣命名。數據庫 pod
可以通過它們的數字後綴來識別,從 -0
開始。他們運行 Zalando
的 Spilo 容器鏡像。至於 services
和 endpoints
,將有一個用於 master pod
,另一個用於所有副本(-repl
後綴)。檢查是否所有組件都出現了。使用標籤 application=spilo
過濾並列出標籤 spilo-role
以查看當前誰是 master
。
# 檢查部署的 cluster
kubectl get postgresql
# 檢查創建的 database pod
kubectl get pods -l application=spilo -L spilo-role
# 檢查創建的 service 資源
kubectl get svc -l application=spilo -L spilo-role
通過 psql 連接到 Postgres cluster
您可以在 database pod
上創建端口轉發以連接到 Postgres
。有關說明,請參閱用戶指南。使用 minikube
也很容易從指向 master pod
的 K8s service
中檢索連接字符串:
export HOST_PORT=$(minikube service acid-minimal-cluster --url | sed 's,.*/,,')
export PGHOST=$(echo $HOST_PORT | cut -d: -f 1)
export PGPORT=$(echo $HOST_PORT | cut -d: -f 2)
從 cluster
中創建的 K8s Secret
中檢索密碼。默認情況下拒絕非加密連接,因此將 SSL
模式設置爲 require
:
export PGPASSWORD=$(kubectl get secret postgres.acid-minimal-cluster.credentials -o 'jsonpath={.data.password}' | base64 -d)
export PGSSLMODE=require
psql -U postgres
刪除 Postgres cluster
要刪除 Postgres
集羣,只需刪除 postgresql
自定義資源。
kubectl delete postgresql acid-minimal-cluster
這應該刪除關聯的 StatefulSet
、database Pods
、Services
和 Endpoints
。PersistentVolume
被釋放,PodDisruptionBudget
被刪除。但是,Secrets
不會被刪除,並且備份將保留在原位。
在集羣仍在啓動或在該階段卡住時刪除集羣時,可能會刪除 postgresql
資源,留下孤立的組件。在創建新的 Postgres
集羣時,這可能會導致麻煩。對於全新的設置,您可以刪除本地 minikube
或 kind
集羣並重新開始。
- https://github.com/zalando/postgres-operator/issues/551
黑客下午茶 這裏或許有你感興趣的東西 ^_^
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/ZlvyIr5dfuyhw_BPjBH-aA