基礎設施即程式碼(IAC),Zalando Postgres Operator 簡介

  • 2022 年 4 月 11 日
  • 筆記

image

Postgres Operator 在由 Patroni 提供支援的 Kubernetes (K8s) 上提供易於運行的高可用性 PostgreSQL 集群。它僅通過 Postgres 清單 (CRD) 進行配置,以輕鬆集成到自動化 CI/CD 管道中,而無需直接訪問 Kubernetes API,從而促進基礎設施即程式碼(infrastructure as code)而不是手動操作。

Operator 功能

  • Postgres 集群變化的滾動更新,包括快速的小版本更新
  • 無需重新啟動 pod 即可調整實時卷大小(AWS EBS、PVC)
  • 使用 PGBouncer 進行資料庫連接池
  • 支援 PG13 的快速升級。支援所有集群全局升級
  • 恢復和克隆 Postgres 集群(包括主要版本升級)
  • 此外,可以配置到 S3 存儲桶的邏輯備份
  • 來自 S3 WAL 存檔的備用集群
  • 可針對非雲環境進行配置
  • K8s 上的基本憑證和用戶管理,簡化應用程式部署
  • 支援自定義 TLS 證書
  • 創建和編輯 Postgres 集群清單的 UI
  • 在 Amazon AWS、Google Cloud、OpenShift 和 Kind 本地運行良好
  • 支援 AWS EBS gp2 到 gp3 遷移,支援 iops 和吞吐量配置

PostgreSQL 功能

Postgres Operator 在 Zalando 開發並已在生產中使用了三年多。

使用 Spilo 12 或更舊的鏡像

如果您已經在舊版本中使用帶有 Spilo 12 Docker 鏡像的 Postgres operator,則需要注意備份路徑的更改。我們將主版本引入備份路徑,以平滑現在支援的主版本升級。

新的 operator 配置可以設置兼容性標誌 enable_spilo_wal_path_compat 以使 Spilo 在當前路徑中查找 wal 段,但也可以在舊格式路徑中查找。 這是以潛在的性能成本為代價的,應該在幾天後禁用。

最新的 Spilo 鏡像是:registry.opensource.zalan.do/acid/spilo-14:2.1-p4

最舊的 Spilo 鏡像是:registry.opensource.zalan.do/acid/spilo-12:1.6-p5

入門

為了快速獲得第一印象,請按照入門教程的說明進行操作。

支援的 Postgres 和應用程式設置

image

概念

Postgres operator 在 Kubernetes (K8s) 上管理 PostgreSQL 集群:

  1. operator 監視 PostgreSQL 集群清單的添加、更新和刪除,並相應地更改正在運行的集群。 例如,當用戶提交新清單時,operator 會獲取該清單並生成一個新的 Postgres 集群以及所有必要的實體,例如 K8s StatefulSets 和 Postgres 角色。 有關清單可能包含的設置,請參閱此 Postgres 集群清單。
  2. operator 還監視其自身配置的更新,並在必要時更改正在運行的 Postgres 集群。例如,如果 pod 中的 Docker 鏡像發生變化,則 operator 執行滾動更新,這意味著它會與新的 Docker 鏡像一一重新生成每個託管 StatefulSet 的 pod。
  3. 最後,operator 定期將每個 Postgres 集群的實際狀態與集群清單中定義的所需狀態同步。
  4. operator 的目標是解放雙手,因為配置只能通過清單進行。 這可以輕鬆集成到自動化部署管道中,而無需直接訪問 K8s。

作用域

Postgres Operator 的 scope 是提供、修改配置和清理使用 Patroni 的 Postgres 集群,基本上是為了在 K8s 上輕鬆方便地運行基於 Patroni 的集群。配置和修改包括一側的 K8s 資源,但也包括集群啟動並運行後的資料庫和角色配置。我們盡量把工作留給 K8s 和 Patroni,尤其是集群引導和高可用性。不過,operator 需要參與一些總體編排,比如滾動更新以改善用戶體驗。

在當前狀態下,監控或調整 Postgres 不在 operator 的作用域內。但是,通過全局可配置的 sidecar,我們提供了足夠的靈活性來補充其他工具,如 ZMON、Prometheus 或更多 Postgres 特定選項。

所涉實體概述

這是一張圖,它總結了 operator 在提交新的 Postgres cluster CRD 時將創建的內容:

image

如果沒有對單個集群 pod 內部的概述,這張圖是不完整的,所以讓我們放大一下:

image

這兩張圖應該可以幫助您了解 operator 提供的功能類型的基礎知識。

狀態

該項目目前正在積極開發中。然而,Zalando 已經在內部使用它,以便在 K8s 上運行大量 Postgres 集群,用於 staging 環境和越來越多的 production 集群。在這種環境中,operator 被部署到多個 K8s 集群中,用戶通過我們的 CI/CD 基礎設施部署清單或依靠精簡的用戶介面來創建清單。

請將發現的任何問題報告給 //github.com/zalando/postgres-operator/issues。

相關影片

相關文章

更多

Tags: