Zalando Postgres Operator 快速上手

為少發表於2022-04-08

image

本指南旨在讓您快速瞭解在本地 Kubernetes 環境中使用 Postgres Operator

前提條件

由於 Postgres Operator 是為 Kubernetes (K8s) 框架設計的,因此首先設定它。 對於本地測試,我們建議使用以下解決方案之一:

要與 K8s 基礎設施互動,請安裝其 CLI 執行時 kubectl

本快速入門假設您已經啟動了 minikube 或建立了本地 kind 叢集。 請注意,您還可以使用 Docker Desktop for Mac 中內建的 K8s 支援來遵循本教程的步驟。您必須將 minikube startminikube delete 替換為您的啟動操作,以獲得 Docker 內建的 K8s 支援。

配置選項

只能在部署新的 Postgres 叢集之前配置 Postgres Operator。這可以通過兩種方式工作:通過 ConfigMap 或自定義 OperatorConfiguration 物件。有關配置的更多詳細資訊,請參見此處

部署選項

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 或更高版本一起使用,如下所示:

kubectl apply -k github.com/zalando/postgres-operator/manifests

為方便起見,我們使用 run_operator_locally 指令碼通過 minikube 自動啟動 operator。 它應用 acid-minimal-cluster。清單。

./run_operator_locally.sh

OpenShift 上的手動部署設定

要在 OpenShift 中安裝 Postgres Operator,您必須將配置引數 kubernetes_use_configmaps 更改為 "true"。否則,operatorPatroni 將在 OpenShift 不支援的 Endpoints 中儲存 leader 和配置 keys。對於 postgres-operatorpostgres-pod 叢集角色,這還需要一組稍微不同的規則。

oc create -f manifests/operator-service-account-rbac-openshift.yaml

Helm chart

或者,可以使用提供的 Helm
chart 安裝 operator,從而為您節省手動步驟。克隆此 repo 並將目錄更改為 repo 根目錄。安裝 Helm v3 後,您應該能夠執行:

helm install postgres-operator ./charts/postgres-operator

chart 適用於 Helm 2Helm 3。使用 v3 時,將跳過 v2 中的 crd-install hook 併發出警告。使用 Helm 2 安裝應用程式的文件可以在 v2 文件中找到。

chart 還託管在:

檢查 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 檢查 deploymentpod 的最新 K8s 事件或檢查 operator 日誌:

kubectl logs "$(kubectl get pod -l name=postgres-operator --output='name')"

部署 operator UI

在以下段落中,我們將描述如何使用 kubectl 從命令列訪問和管理 PostgreSQL 叢集。 但也可以通過基於瀏覽器的 Postgres Operator UI 來完成。在部署 UI 之前,請確保 operator 正在執行,並且可以通過 K8s service 訪問其 REST API。此 APIURL 必須在 UI部署清單中配置。

要部署 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 文件中詳細解釋了可用選項。

建立 Postgres cluster

如果 operator pod 正在執行,它會偵聽有關 postgresql 資源的新事件。 現在,是時候提交您的第一個 Postgres 叢集清單了。

# 建立一個 Postgres cluster
kubectl create -f manifests/minimal-postgres-manifest.yaml

cluster 清單提交併通過驗證後,operator 將建立 ServiceEndpoint 資源以及一個 StatefulSet,它根據清單中指定的例項數量啟動新的 Pod。所有資源都像 cluster 一樣命名。 資料庫 pod 可以通過它們的數字字尾來識別,從 -0 開始。他們執行 ZalandoSpilo 容器映象。至於 servicesendpoints,將有一個用於 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 podK8s 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

這應該刪除關聯的 StatefulSetdatabase PodsServicesEndpointsPersistentVolume 被釋放,PodDisruptionBudget 被刪除。但是,Secrets 不會被刪除,並且備份將保留在原位。

在叢集仍在啟動或在該階段卡住時刪除叢集時,可能會刪除 postgresql 資源,留下孤立的元件。 在建立新的 Postgres 叢集時,這可能會導致麻煩。對於全新的設定,您可以刪除本地 minikubekind 叢集並重新開始。

更多

相關文章