基础设施即代码(IAC),Zalando Postgres Operator 简介

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 基础设施即代码(IAC),Zalando Postgres Operator 简介

Postgres Operator 在由 Patroni 提供支持的 Kubernetes (K8s) 上提供易于运行的高可用性 PostgreSQL 集群。它仅通过 Postgres 清单 (CRD) 进行配置,以轻松集成到自动化 CI/CD 管道中,而无需直接访问 Kubernetes API,从而促进基础设施即代码(infrastructure as code)而不是手动操作。



   Operator 功能


  • Postgres 集群变化的滚动更新,包括快速的小版本更新
  • 无需重新启动 pod 即可调整实时卷大小(AWSEBSPVC
  • 使用 PGBouncer 进行数据库连接池
  • 支持 PG13 的快速升级。支持所有集群全局升级
  • 恢复和克隆 Postgres 集群(包括主要版本升级)
  • 此外,可以配置到 S3 存储桶的逻辑备份
  • 来自 S3 WAL 存档的备用集群
  • 可针对非云环境进行配置
  • K8s 上的基本凭证和用户管理,简化应用程序部署
  • 支持自定义 TLS 证书
  • 创建和编辑 Postgres 集群清单的 UI
  • Amazon AWSGoogle CloudOpenShiftKind 本地运行良好
  • 支持 AWSEBSgp2gp3 迁移,支持 iops 和吞吐量配置


   PostgreSQL 功能


  • 支持 PostgreSQL 14,从 9.6+ 开始
  • 通过 Patroni 流式复制集群
  • 通过 Spilo 使用 pg_basebackup / WAL-E 进行时间点恢复(Point-In-Time-Recovery)
  • 预加载库:bg_mon, pg_stat_statements, pgextwlist, pg_auth_mon
  • 包括。流行的 Postgres 扩展,例如 decoderbufs, hypopg, pg_cron, pg_partman, pg_stat_kcache, pgq, plpgsql_check, postgis, set_user 和 timescaledb

Postgres OperatorZalando 开发并已在生产中使用了三年多。


   使用 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.gifimage.png


   概念


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


  1. operator 监视 PostgreSQL 集群清单的添加、更新和删除,并相应地更改正在运行的集群。例如,当用户提交新清单时,operator 会获取该清单并生成一个新的 Postgres 集群以及所有必要的实体,例如 K8s StatefulSetsPostgres 角色。有关清单可能包含的设置,请参阅此 Postgres 集群清单。
  1. operator 还监视其自身配置的更新,并在必要时更改正在运行的 Postgres 集群。例如,如果 pod 中的 Docker 镜像发生变化,则 operator 执行滚动更新,这意味着它会与新的 Docker 镜像一一重新生成每个托管 StatefulSetpod
  1. 最后,operator 定期将每个 Postgres 集群的实际状态与集群清单中定义的所需状态同步。


  1. operator 的目标是解放双手,因为配置只能通过清单进行。这可以轻松集成到自动化部署管道中,而无需直接访问 K8s


   作用域


Postgres Operatorscope 是提供、修改配置和清理使用 PatroniPostgres 集群,基本上是为了在 K8s 上轻松方便地运行基于 Patroni 的集群。配置和修改包括一侧的 K8s 资源,但也包括集群启动并运行后的数据库和角色配置。我们尽量把工作留给 K8sPatroni,尤其是集群引导和高可用性。不过,operator 需要参与一些总体编排,比如滚动更新以改善用户体验。


在当前状态下,监控或调整 Postgres 不在 operator 的作用域内。但是,通过全局可配置的 sidecar,我们提供了足够的灵活性来补充其他工具,如 ZMON、Prometheus 或更多 Postgres 特定选项。


   所涉实体概述


这是一张图,它总结了 operator 在提交新的 Postgres cluster CRD 时将创建的内容:

image.gif

image.png


如果没有对单个集群 pod 内部的概述,这张图是不完整的,所以让我们放大一下:

image.gif

image.png


这两张图应该可以帮助您了解 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
  • "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
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Kubernetes Cloud Native API
带你读《云原生应用开发:Operator原理与实践》——1.2.1 Operator 简介
带你读《云原生应用开发:Operator原理与实践》——1.2.1 Operator 简介
带你读《云原生应用开发:Operator原理与实践》——1.2.1 Operator 简介
|
Kubernetes Cloud Native Go
带你读《云原生应用开发:Operator原理与实践》——1.2.2 Operator 应用案例
带你读《云原生应用开发:Operator原理与实践》——1.2.2 Operator 应用案例
带你读《云原生应用开发:Operator原理与实践》——1.2.2 Operator 应用案例
|
缓存 Kubernetes 监控
带你读《云原生应用开发:Operator原理与实践》——2.2.3 Client-go 架构
带你读《云原生应用开发:Operator原理与实践》——2.2.3 Client-go 架构
|
JSON Kubernetes Cloud Native
带你读《云原生应用开发:Operator原理与实践》——2.2.2 Client-go 主体结构
带你读《云原生应用开发:Operator原理与实践》——2.2.2 Client-go 主体结构
|
Kubernetes Cloud Native Perl
带你读《云原生应用开发:Operator原理与实践》——2.2.8 Controller 关于 Client-go 典型场景
带你读《云原生应用开发:Operator原理与实践》——2.2.8 Controller 关于 Client-go 典型场景
|
监控 Cloud Native API
带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析(六)
带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析
|
存储 缓存 Kubernetes
带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析(四)
带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析
|
Kubernetes Cloud Native 开发工具
带你读《云原生应用开发:Operator原理与实践》——1.2.3 主流 Operator 开发工具介绍
带你读《云原生应用开发:Operator原理与实践》——1.2.3 主流 Operator 开发工具介绍
|
Kubernetes Cloud Native 容器
带你读《云原生应用开发:Operator原理与实践》——2.2.1 Client-go 介绍
带你读《云原生应用开发:Operator原理与实践》——2.2.1 Client-go 介绍
|
Kubernetes 关系型数据库 数据库
基础设施即代码(IAC),Zalando Postgres Operator UI 入门
基础设施即代码(IAC),Zalando Postgres Operator UI 入门
154 0
基础设施即代码(IAC),Zalando Postgres Operator UI 入门
下一篇
DataWorks