当前位置: 首页 > 科技观察

谈到基础架构即代码(IAC),ZalandoPostgresOperator

时间:2023-03-21 17:09:11 科技观察

PostgresOperator在由Patroni提供支持的Kubernetes(K8s)上提供了一个易于运行、高度可用的PostgreSQL集群。它仅通过Postgres清单(CRD)进行配置,无需直接访问KubernetesAPI即可轻松集成到自动化CI/CD管道中,从而促进基础设施即代码而不是手动工作。Patroni:https://github.com/zalando/patroniPostgreSQL:https://www.postgresql.org/Operator功能Postgres集群更改的滚动更新,包括快速次要版本更新实时卷大小调整无需pod重启(AWSEBS、PVC)数据库连接池使用PGBouncer,支持PG13的快速升级。支持所有集群的全局升级Postgres集群的恢复和克隆(包括主要版本升级)此外,可以配置逻辑备份到S3存储桶可以为非云环境配置来自S3WAL存档的备份集群K8s上的基本凭证和用户管理,简化应用程序部署支持自定义TLS证书UI,用于创建和编辑Postgres集群清单在AmazonAWS、GoogleCloud、OpenShift和Kind上本地运行良好支持AWSEBSgp2到gp3迁移,支持iops和吞吐量配置PostgreSQL功能支持PostgreSQL14,从9.6+通过Spilo通过Patroni流式复制集群使用pg_basebackup/WAL-E进行时间点恢复(Point-In-Time-Recovery)Spilo:https://github.com/zalando/spilopg_basebackup:https://www。postgresql.org/docs/11/app-pgbasebackup.htmlWAL-E:https://github.com/wal-e/wal-e预加载库:bg_mon、pg_stat_statements、pgextwlist、pg_auth_monbg_mon:https://github.com/Cyber??Dem0n/bg_monpg_stat_statements:https://www.postgresql.org/docs/14/pgstatstatements.htmlpgextwlist:https://github.com/dimitri/pgextwlistpg_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和timescaledbdecoderbufs:https://github.com/debezium/postgres-decoderbufshypopg:https://github.com/HypoPG/hypopgpg_cron:https://github.com/citusdata/pg_cronpg_partman:https://github.com/pgpartman/pg_partmanpg_stat_kcache:https://github.com/powa-team/pg_stat_kcachepgq:https://github.com/pgq/pgqplpgsql_check:https://github.com/okbob/plpgsql_checkpostgis:https://postgis.net/set_user:https://github.com/pgaudit/set_usertimescaledb:https://github.com/timescale/timescaledbZalando开发的PostgresOperator并在生产中使用了三年多。使用Spilo12或更早版本的镜像如果您已经在旧版本中使用Postgresoperator和Spilo12Docker镜像,您需要注意备份路径的变化。我们将主要版本引入备份路径,以平滑升级到现在支持的主要版本。大版本升级:https://github.com/zalando/postgres-operator/blob/master/docs/administrator.md#minor-and-major-version-upgrade新的算子配置可以设置兼容性标志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快速入门获得第一印象,请按照入门教程中的说明进行操作。入门教程:https://github.com/zalando/postgres-operator/blob/master/docs/quickstart.md支持的Postgres和应用程序设置概念Postgresoperator在Kubernetes(K8s)上管理PostgreSQL集群:OperatorMonitoringPostgreSQLClustersInventoryadditions、更新和删除以及对正在运行的集群的相应更改。例如,当用户提交新清单时,操作员会获取该清单并生成一个新的Postgres集群,其中包含所有必要的实体,例如K8sStatefulSets和Postgres角色。有关清单可能包含的设置,请参阅此Postgres集群清单。运算符:https://coreos.com/blog/introducing-operators.htmlPostgres集群清单:https://github.com/zalando/postgres-operator/blob/master/manifests/complete-postgres-manifest.yamloperator还监视其更新自己的配置,如有必要,更改正在运行的Postgres集群。例如,如果pod中的Docker镜像发生变化,operator会执行滚动更新,这意味着它会使用新的Docker镜像逐个重新生成每个托管StatefulSet的pod。自配置:https://github.com/zalando/postgres-operator/blob/master/manifests/configmap.yaml最后,操作员定期将每个Postgres集群的实际状态与集群清单中定义的所需状态同步。操作员的目标是免提,因为配置只能通过清单完成。这可以很容易地集成到自动化部署管道中,而无需直接访问K8s。PostgresOperator的范围是使用Patroni提供、修改配置和清理Postgres集群,基本上是在K8s上轻松方便地运行基于Patroni的集群。配置和修改一方面包括K8s资源,还包括集群启动运行后的数据库和角色配置。我们尝试将工作留给K8s和Patroni,尤其是集群引导和高可用性。但是运营商需要参与一些整体的编排,比如滚动更新来提升用户体验。在目前的状态下,监控或调整Postgres不在操作员的范围之内。然而,通过全局可配置的sidecar,我们提供了足够的灵活性来补充其他工具,例如ZMON、Prometheus或更多Postgres特定的选项。ZMON:https://opensource.zalando.com/zmon/Prometheus:https://prometheus.io/涉及的实体概述这是一张图表,总结了操作员在提交新的Postgres集群时将创建的内容CRD:该图表将如果不概述单个集群pod中的内容,那么我们就不会完整,所以让我们放大:这两张图应该可以帮助您了解操作员提供的功能类型的基础知识。状态该项目目前正在积极开发中。然而,Zalando已经在内部使用它在K8s上运行大量Postgres集群用于暂存环境,并越来越多地用于生产集群。在这个环境中,Operator被部署到多个K8s集群,用户通过我们的CI/CD基础设施部署清单或依赖简化的用户界面来创建清单。https://jobs.zalando.com/tech/blog/postgresql-in-a-time-of-kubernetes/