基礎設施即程式碼(IAC),Zalando Postgres Operator 簡介
Postgres Operator
在由 Patroni 提供支援的 Kubernetes (K8s) 上提供易於執行的高可用性 PostgreSQL 叢集。它僅通過 Postgres 清單 (CRD) 進行配置,以輕鬆整合到自動化 CI/CD
管道中,而無需直接訪問 Kubernetes API
,從而促進基礎設施即程式碼(infrastructure as code)
而不是手動操作。
- Patroni: https://github.com/zalando/patroni
- PostgreSQL: https://www.postgresql.org/
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 功能
- 支援
PostgreSQL 14
,從9.6+
開始 - 通過
Patroni
流式複製叢集 - 通過 Spilo 使用 pg_basebackup / WAL-E 進行時間點恢復(
Point-In-Time-Recovery
)- Spilo: https://github.com/zalando/spilo
- pg_basebackup: https://www.postgresql.org/docs/11/app-pgbasebackup.html
- WAL-E: https://github.com/wal-e/wal-e
- 預載入庫:bg_mon, pg_stat_statements
- bg_mon: https://github.com/CyberDem0n/bg_mon
- pg_stat_statements: https://www.postgresql.org/docs/14/pgstatstatements.html
- pgextwlist: https://github.com/dimitri/pgextwlist
- pg_auth_mon: https://github.com/RafiaSabih/pg_auth_mon
- 包括。 流行的
Postgres
擴充套件,例如 decoderbufs, hypopg, pg_cron, pg_partman, pg_stat_kcache, pgq, plpgsql_check, postgis, set_user 和 timescaledb- decoderbufs: https://github.com/debezium/postgres-decoderbufs
- hypopg: https://github.com/HypoPG/hypopg
- pg_cron: https://github.com/citusdata/pg_cron
- pg_partman: https://github.com/pgpartman/pg_partman
- pg_stat_kcache: https://github.com/powa-team/pg_stat_kcache
- pgq: https://github.com/pgq/pgq
- plpgsql_check: https://github.com/okbob/plpgsql_check
- postgis: https://postgis.net/
- set_user: https://github.com/pgaudit/set_user
- timescaledb: https://github.com/timescale/timescaledb
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 和應用程式設定
概念
Postgres operator 在 Kubernetes (K8s) 上管理 PostgreSQL 叢集:
-
operator
監視PostgreSQL
叢集清單的新增、更新和刪除,並相應地更改正在執行的叢集。 例如,當用戶提交新清單時,operator
會獲取該清單並生成一個新的Postgres
叢集以及所有必要的實體,例如K8s StatefulSets
和Postgres
角色。 有關清單可能包含的設定,請參閱此 Postgres 叢集清單。 -
operator
還監視其自身配置的更新,並在必要時更改正在執行的Postgres
叢集。例如,如果pod
中的Docker
映象發生變化,則operator
執行滾動更新,這意味著它會與新的Docker
映象一一重新生成每個託管StatefulSet
的pod
。 - 最後,
operator
定期將每個Postgres
叢集的實際狀態與叢集清單中定義的所需狀態同步。 -
operator
的目標是解放雙手,因為配置只能通過清單進行。 這可以輕鬆整合到自動化部署管道中,而無需直接訪問K8s
。
作用域
Postgres Operator
的 scope
是提供、修改配置和清理使用 Patroni
的 Postgres
叢集,基本上是為了在 K8s
上輕鬆方便地執行基於 Patroni
的叢集。配置和修改包括一側的 K8s
資源,但也包括叢集啟動並執行後的資料庫和角色配置。我們儘量把工作留給 K8s
和 Patroni
,尤其是叢集引導和高可用性。不過,operator
需要參與一些總體編排,比如滾動更新以改善使用者體驗。
在當前狀態下,監控或調整 Postgres
不在 operator
的作用域內。但是,通過全域性可配置的 sidecar
,我們提供了足夠的靈活性來補充其他工具,如 ZMON、Prometheus 或更多 Postgres
特定選項。
- ZMON: https://opensource.zalando.com/zmon/
- Prometheus: https://prometheus.io/
所涉實體概述
這是一張圖,它總結了 operator
在提交新的 Postgres cluster CRD
時將建立的內容:
如果沒有對單個叢集 pod
內部的概述,這張圖是不完整的,所以讓我們放大一下:
這兩張圖應該可以幫助您瞭解 operator
提供的功能型別的基礎知識。
狀態
該專案目前正在積極開發中。然而,Zalando
已經在內部使用它,以便在 K8s
上執行大量 Postgres
叢集,用於 staging
環境和越來越多的 production
叢集。在這種環境中,operator
被部署到多個 K8s
叢集中,使用者通過我們的 CI/CD
基礎設施部署清單或依靠精簡的使用者介面來建立清單。
請將發現的任何問題報告給 https://github.com/zalando/postgres-operator/issues。
相關視訊
- "照看您的 PostGIS 群" talk by Felix Kunde, FOSS4G 2021: video | slides
- "Zalando K8S上的PostgreSQL:生產兩年" talk by Alexander Kukushkin, FOSSDEM 2020: video | slides
- https://fosdem.org/2020/schedule/event/postgresql_postgresql_on_k8s_at_zalando_two_years_in_production/
- https://fosdem.org/2020/schedule/event/postgresql_postgresql_on_k8s_at_zalando_two_years_in_production/attachments/slides/3883/export/events/attachments/postgresql_postgresql_on_k8s_at_zalando_two_years_in_production/slides/3883/PostgreSQL_on_K8s_at_Zalando_Two_years_in_production.pdf
- "Zalando 的 Postgres 即服務" talk by Jan Mußler, DevOpsDays Poznań 2019: video
- "在 Kubernetes 上構建您自己的 PostgreSQL 即服務" talk by Alexander Kukushkin, KubeCon NA 2018: video | slides
- "PostgreSQL 和 Kubernetes:沒有供應商鎖定的 DBaaS" talk by Oleksii Kliukin, PostgreSQL Sessions 2018: video | slides
- "使用 Patroni 在 Kubernetes 上實現 PostgreSQL 高可用" talk by Oleksii Kliukin, Atmosphere 2018: video | slides
- "藍象點播:Postgres + Kubernetes" talk by Oleksii Kliukin and Jan Mussler, FOSDEM 2018: video | slides (pdf)
- "Kube-Native Postgres" talk by Josh Berkus, KubeCon 2017: video
相關文章
- "Zalando Operator for PostgreSQL 入門" by Daniel Westermann on dbi services blog, Mar. 2021.
- "Zalando 使用 Postgres Operator for Kubernetes 的經驗" by Nikolay Bogdanov on flant blog, Feb. 2021.
- "如何設定連續備份和監控" by Pål Kristensen on GitHub, Mar. 2020.
- "Postgres on Kubernetes 使用 Zalando operator" by Vito Botta on has_many :code, Feb. 2020.
- "在 Google Kubernetes Engine 中執行 PostgreSQL" by Kenneth Rørvik on Repill Linpro blog, Sep. 2019.
- "Zalando Postgres Operator:一年後" by Sergey Dudoladov on Open Source Zalando, Nov. 2018