基础设施即代码(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即可调整实时卷大小(AWSEBS、PVC) - 使用
PGBouncer进行数据库连接池 - 支持
PG13的快速升级。支持所有集群全局升级 - 恢复和克隆
Postgres集群(包括主要版本升级) - 此外,可以配置到
S3存储桶的逻辑备份 - 来自
S3 WAL存档的备用集群 - 可针对非云环境进行配置
K8s上的基本凭证和用户管理,简化应用程序部署- 支持自定义
TLS证书 - 创建和编辑
Postgres集群清单的UI - 在
Amazon AWS、Google Cloud、OpenShift和Kind本地运行良好 - 支持
AWSEBSgp2到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, pgextwlist, pg_auth_mon
- 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
更多
基础设施即代码(IAC),Zalando Postgres Operator 简介的更多相关文章
- 基础设施即代码(IAC),Zalando Postgres Operator UI 入门
Postgres Operator UI 提供了一个图形界面,方便用户体验数据库即服务.一旦 database 和/或 Kubernetes (K8s) 管理员设置了 operator,其他团队就很容 ...
- Zalando Postgres Operator 快速上手
本指南旨在让您快速了解在本地 Kubernetes 环境中使用 Postgres Operator. 前提条件 由于 Postgres Operator 是为 Kubernetes (K8s) 框架设 ...
- 云原生时代,为什么基础设施即代码(IaC)是开发者体验的核心?
作者 | 林俊(万念) 来源 |尔达 Erda 公众号 从一个小故事开始 你是一个高级开发工程师. 某天,你自信地写好了自动煮咖啡功能的代码,并在本地调试通过.代码合并入主干分支后,你准备把服务发布到 ...
- 云原生之旅 - 4)基础设施即代码 使用 Terraform 创建 Kubernetes
前言 上一篇文章我们已经简单的入门Terraform, 本篇介绍如何使用Terraform在GCP和AWS 创建Kubernetes 资源. Kubernetes 在云原生时代的重要性不言而喻,等于这 ...
- Developer Friendly | 基础设施即代码的事实标准Terraform已支持京东云!
Developer Friendly | 基础设施即代码的事实标准Terraform已支持京东云! Chef.Puppet.Ansible.SaltStack 都可以称为配置管理工具,这些工具的主要目 ...
- AWS 基础设施即代码(五)
基础设施即代码 概述 手动配置的挑战:可能因为人为错误导致缺乏可靠性,环境无法完全再现,同时需要额外文档 基础设施即代码,是软件开发中用于创建可重用.可维护.可扩展及可测试基础设施的技术.实践和工具, ...
- 云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
使用 PGO 在 Kubernetes 上运行 Cloud Native PostgreSQL:来自 Crunchy Data 的 Postgres Operator! Cloud Native Po ...
- 《第一行代码》之——1.Android简介
Android简介 Android系统架构 (图片源自维基百科) Android大致分为四层架构,五块区域. Linux内核层 Android系统基于Linux2.6,这一层为Android设备的各种 ...
- alpha阶段 代码结构及技术难点简介
我们的产品是安卓端app,所以目前主要就是用Android Studio来进行代码开发. Android Studio的项目的结构还是比较清晰的,如下图,主要就是java文件夹内的代码部分(.java ...
随机推荐
- Anaconda 安装 国内镜像问题解决方案
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 遇到问题:安装2021版本后无法打开Anaconda Navigator 解决方案:使用管理员身份打开Avaconda Prompt,输入conda ...
- Linux详解 --- 进程管理
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 进程管理一览 接下来的几篇博客,我将主要按照这个思维导图的划分去进行讲解. 管理 在理解什么是进程管理之前,我想我们可以先理解一下什么是管理! 问 ...
- 千兆网数据CRC检验和过滤
项目简述 本次项目在计算机将图像数据信息通过千兆网发送给FPGA后,由于接收到的数据可能混乱和无效,需要对数据CRC校验和无效包过滤. 项目原理及框图 对iddr_ctrl模块的输入数据和使能信号,分 ...
- 几种常用的MOS管参数、应用电路及区别:IRF540N、IRF9540N、IRF9540
1. IRF540N,N沟道,100V,33A,44mΩ@10V 栅极(Gate-G,也叫做门极),源极(Source-S), 漏极(Drain-D) 漏源电压(Vdss) 100V 连续漏极电流(I ...
- loj6271 「长乐集训 2017 Day10」生成树求和 加强版(矩阵树定理,循环卷积)
loj6271 「长乐集训 2017 Day10」生成树求和 加强版(矩阵树定理,循环卷积) loj 题解时间 首先想到先分开三进制下每一位,然后每一位分别求结果为0,1,2的树的个数. 然后考虑矩阵 ...
- python 列表推导式,生成器推导式,集合推导式,字典推导式简介
1.列表推导式multiples = [i for i in range(30) if i % 2 is 0]names = [[],[]]multiples = [name for lst in n ...
- mysql问题排查与性能优化
MySQL 问题排查都有哪些手段? 使用 show processlist 命令查看当前所有连接信息. 使用 explain 命令查询 SQL 语句执行计划. 开启慢查询日志,查看慢查询的 SQL. ...
- Redis 如何设置密码及验证密码?
设置密码:config set requirepass 123456 授权密码:auth 123456
- 什么是 MyBatis 的接口绑定?有哪些实现方式?
接口绑定,就是在 MyBatis 中任意定义接口,然后把接口里面的方法和 SQL 语句绑 定, 我们直接调用接口方法就可以,这样比起原来了 SqlSession 提供的方法我们可 以有更加灵活的选择和 ...
- 两个相同的对象会有不同的的 hash code 吗?
不能,根据 hash code 的规定,这是不可能的.