表空间允许dba存储多个文件系统在同一服务器上的数据库和控制(文件系统)的特定部分数据库存储。你可以想想如果你是给磁盘挂载名称,然后使用这些名称作为额外的参数在创建数据库对象。
PostgreSQL支持这个特性,允许您主数据目录以外的存储数据,和雷竞技下载官网为PostgreSQL Percona运营商是一个很好的选择把这个Kubernetes环境。
什么时候它会需要?
最明显的用例表空间是性能优化。你把数据库的适当部分快速但昂贵的存储和使用较慢的,但很少有人使用便宜的存储数据库对象。典型的例子将使用后的SSD索引,使用大型缓慢归档数据的硬盘。
当然,Kubernetes已经为您提供了强大的方法为此在随角果的基础上(与节点选择器,纵容,等等)。但是如果你想去更深,让这种分化的数据库对象(表和索引),表空间正是你需要的。
表空间的另一个著名的用例是快速添加新分区的数据库集群运行时空间使用的最初一个,不能扩展它(可能看起来不那么典型的云存储)。最后,您可能需要表空间当现有架构迁移到云端。
每个表空间由Percona操作符为PostgreSQL雷竞技下载官网对应于一个单独的持久的体积,安装在一个容器/表空间目录中。

为你提供一个新的表空间数据库在Kubernetes包括两个部分:
- 配置新的表空间存储的运营商,
- 在这个表空间和PostgreSQL创建数据库对象。
第一部分是Percona运营商的传统方法,通过修改自定义资源通过雷竞技下载官网部署/ cr.yaml配置文件。它有一个特殊的spec.tablespaceStorages部分与部分名称等于PostgreSQL表空间名称。
这个例子已经在部署/ cr。yaml显示了如何创建表空间存储命名湖1 gb大小的动态配置(你可以看到官方Kubernetes文档持久卷细节):
|
1
2
3
4
5
6
7
8
9
10
|
规范
:
…
tablespaceStorages
:
湖
:
volumeSpec
:
大小
:1克
accessmode
:ReadWriteOnce
storagetype
:动态
storageclass
:“”
matchLabels
:“”
|
在应用运行kubectl应用- f / cr.yaml部署命令,新湖表空间将会出现在你的数据库。请考虑,如果你将你的新表空间添加到现有的集群PostgreSQL,可能需要时间操作符创建持久卷索赔和获得持久卷挂载。
现在你可以添加表空间< tablespace_name >到你的创建隐式地创建SQL语句表、索引、甚至整个数据库特定的表空间(当然,您的用户应该适当创建特权,使其可能的)。
让我们创建一个示例表中已经提到湖表空间:
|
1
2
3
4
5
|
创建
表
产品(
product_sku
字符(10),
数量
int,
manufactured_date
timestamptz)
表空间
湖;
|
还可以设置一个默认的表空间设置default_tablespace = < tablespace_name >;声明。它将会影响所有进一步创建表和创建索引命令没有显式的表空间指示语,直到您设置一个空字符串。
如您所见,Percona运营商为雷竞技下载官网PostgreSQL简化了创建表空间进行所有必要的修改持久卷和豆荚。同样不会删除一个已经存在的表空间,而不是自动的,由运营商和PostgreSQL。
删除现有的表空间从数据库中Kubernetes还包括两个部分:
- 删除相关和PostgreSQL数据库对象和表空间
- 删除表空间存储在Kubernetes
使表空间删除PostgreSQL可能,你应该把这个表空间空(删除表空间到是不可能的使用这个表空间的所有数据库中的所有对象已被移除)。表空间中列出pg_tablespace表,您可以使用它来找出哪些对象存储在一个特定的表空间。的示例命令湖表空间将如下:
|
1
|
选择
relname
从
pg_class
在哪里
reltablespace = (选择
oid
从
pg_tablespace
在哪里
spcname =“湖”);
|
当你的表空间是空的,你可以登录的PostgreSQL主实例作为一个超级用户,然后执行删除表空间< tablespace_name >;命令。
现在,当PostgreSQL部分完成后,您可以删除表空间的入口tablespaceStorages部分(别忘了运行kubectl应用- f / cr.yaml部署命令应用变化)。
然而,仍将安装在持久的卷/表空间目录在PostgreSQL豆荚。删除这些坐骑,你应该编辑所有部署对象为pgPrimary和pgReplica在你的Kubernetes集群和删除实例体积和VolumeMount条目相关的表空间。
你可以看到部署对象的列表kubectl得到部署命令。运行它的默认集群命名cluster1结果输出如下所示:
|
1
2
3
4
5
6
7
|
的名字
准备好了
向上
- - - - - -
来
- - - - - -
日期
可用
年龄
cluster1
1
/
1
1
1
156米
cluster1
- - - - - -
靠背
- - - - - -
共享
- - - - - -
回购
1
/
1
1
1
156米
cluster1
- - - - - -
pgbouncer
3
/
3
3
3
154米
cluster1
- - - - - -
repl1
1
/
1
1
1
154米
cluster1
- - - - - -
repl2
1
/
1
1
1
154米
postgres
- - - - - -
操作符
1
/
1
1
1
157米
|
现在运行kubectl编辑部署< oblect_name >为cluster1,cluster1-repl1,cluster1-repl2因此对象。每个命令将打开一个文本编辑器,你应该删除相应的行,的情况下湖表空间将如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
…
规范
:
…
容器
:
——名字
:数据库
…
volumeMounts
:
——名字
:tablespace-lake
mountPath
:表空间/湖
卷
:
…
——名字
:tablespace-lake
persistentVolumeClaim
:
claimName
:cluster1-tablespace-lake
…
|
完成编辑没有表空间支架导致豆荚被重塑。
所以,只有计划的扩展是有意义的。





