首页 > 解决方案 > 如何使用脚本 [CI/CD] 在 Kubernetes 中更新 postgres 数据库?

问题描述

我有一个部署在 kubernetes 中的 postgres 数据库,连接到 pvc [使用RWX访问模式]。通过我的 CI/CD 更新(创建表)数据库而不是登录到 pod 并运行查询 [不删除 pvc] 的正确方法是什么?

标签: postgresqlkubernetescontinuous-integration

解决方案


我的理解是,您提出问题的背景原因是如何以最少的停机时间将数据库结构更改数据库部署到生产中。为此,我会选择Blue Green Deployments 1

在您发表评论后,我假设您已经运行了 PostgreSQL 实例,并且希望通过直接在“磁盘”(在本例中为 PVC)上更改文件结构来修改数据库的内容。

如果我们谈论数据完整性等,直接在磁盘上修改数据结构并不是最好的主意。

本文第2条解释了该声明的原因。它描述了 postgreSQL 如何准确地将数据存储在磁盘上。

PostgreSQL(默认情况下)将数据块(PostgreSQL 称为页面)以 8k 块写入磁盘。

此外,table 和 file_path 之间存在关系,因此 postgresql 知道哪个文件存储了哪个 table。

SELECT pg_relation_filepath('test_data');  
pg_relation_filepath  
----------------------  
base/20886/186770

在本例中,文件/database/base/20866/186770包含表的实际数据test_data

更新数据库而不是登录到 pod 并运行查询的正确方法是什么

但是,如果您确定您有完整的文件集供数据库操作(例如您在 pg_dump / pg_restore 期间使用的文件),您可以尝试将该数据放在另一个 PVC 上并重新创建 pod,但这仍然会导致停机.

希望有帮助。


推荐阅读