1、镜像选取
鲲鹏服务器的芯片为arm64/armv8架构,所以需要选择支持arm64架构的postgis镜像来安装。docker仓库中已经有可选的镜像,所以不用再从新基于arm64架构通过源码编译制作该镜像。
镜像版本:nickblah/postgis:14-postgis-3
2、yaml编写
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
generation: 1
labels:
app: postgis-server
name: postgis-server
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: postgis-server
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
app: postgis-server
spec:
containers:
- env:
- name: POSTGRES_USER
value: fpi
- name: POSTGRES_PASSWORD
value: 123456
- name: POSTGRES_DB
value: gis
- name: ALLOW_IP_RANGE
value: 0.0.0.0/0
- name: PGDATA
value: /var/lib/postgresql/data
- name: TZ
value: Asia/Shanghai
image: nickblah/postgis:14-postgis-3
imagePullPolicy: IfNotPresent
name: postgis-server
ports:
- containerPort: 5432
name: postgis
protocol: TCP
resources:
limits:
memory: 2Gi
requests:
cpu: 100m
memory: 500Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: data
subPath: postgresql/data
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
nodeName: 192.168.0.44 #固定到k8s节点,方便客户端访问
volumes:
- name: data #创建存储卷将数据保存到NAS存储,避免pod重建后数据丢失
persistentVolumeClaim:
claimName: test-default
---
apiVersion: v1
kind: Service
metadata:
labels:
app: postgis-server
name: postgis-server
spec:
ports:
- name: postgis
port: 15432
protocol: TCP
nodePort: 30432
targetPort: postgis
selector:
app: postgis-server
sessionAffinity: None
type: NodePort
3、安装扩展
postgis镜像部署好以后,并不会给创建的postgresql数据库添加postgis扩展。需要连接到数据库后再sql命令窗口执行添加扩展的sql指令。
postgis需要的指令如下:
部分SQL语句创建及查询
--给PostGIS添加扩展及扩展解释
CREATE EXTENSION postgis; --postgis的基本核心功能,仅支持地理图形(矢量要素),在其他Extension前启用
CREATE EXTENSION postgis_raster; --对栅格数据的支持
CREATE EXTENSION postgis_topology; --拓扑功能的支持
CREATE EXTENSION postgis_sfcgal; --这个Extension主要是集成了CGAL(Computational Geometry Algorithms Library,计算几何算法库),来进行三维空间数据的空间运算,例如:ST_3DDifference、ST_3DUnion 等,可见是通常空间运算在三维空间上的拓展
CREATE EXTENSION address_standardizer_data_us;
CREATE EXTENSION address_standardizer;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder; --TIGER指的是(拓扑集成地理编码和参考),这个是美国人口普查局的GIS数据,提供了美国全国的行政区划、交通道路、水系等空间数据。这个Extension提供了TIGER数据的地理编码支持,需要注意的是这个Extension启用前,需要先启用fuzzystrmatch(字符串模糊查询)Extension,以及可选的address_standardizer(TIGER数据地址规则化)address_standardizer_data_us(地址规则化示例数据集)Extension
-- --二维空间数据创建
-- -- 创建含有单点的几何表
-- CREATE TABLE point (name varchar, geom geometry);
-- INSERT INTO point VALUES ('Point', 'POINT(0 0)');
-- -- 创建含有单线的几何表
-- CREATE TABLE line (name varchar, geom geometry);
-- INSERT INTO line VALUES ('road', 'LINESTRING(0 0, 1 1, 2 1, 2 2)');
-- -- 创建含有单面的几何表
-- CREATE TABLE polygon (name varchar, geom geometry);
-- INSERT INTO polygon VALUES ('boundary', 'POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))');
-- --三维空间数据创建
-- -- 创建含有三棱柱的表
-- CREATE TABLE triangularPyramid (name varchar, geom geometry);
-- INSERT INTO triangularPyramid (name, geom) VALUES ('beam', ST_Extrude(ST_GeomFromText('POLYGON((0 0,1 3,2 0, 0 0))'),0,0,10));
-- -- 创建含有立方体的表
-- CREATE TABLE cubeBox (name varchar, geom geometry);
-- INSERT INTO cubeBox (name, geom) VALUES ('box', ST_Extrude(ST_GeomFromText('POLYGON((0 0,2 0,2 2,0 2,0 0))'),0,0,2));
-- --查询预览
-- -- 查询含有三棱柱的表
-- SELECT name, ST_AsText(geom) AS ewkt FROM triangularPyramid;
-- -- 查询含有立方体的表
-- SELECT name, ST_AsText(geom) AS ewkt FROM cubeBox;
-- -- 查看三棱柱的X3D格式文本
-- SELECT ST_AsX3D(geom) AS x3d FROM triangularPyramid;
-- -- 查看立方体的X3D格式文本
-- SELECT ST_AsX3D(geom) AS x3d FROM cubeBox