此项目采用单实例部署,切勿在生产环境使用! |
1. 说明
此文档需要镜像 postgres:14
。部署完成后,集群内部地址为:
1
svc-postgres.core-middle.svc.cluster.local:5432
2. 创建 PVC
导入以下配置,创建PVC。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-postgres-data
namespace: core-middle
labels:
app: postgres
spec:
storageClassName: 'sc-nfs-share'
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
3. 管理员用户配置
将管理员用户配置导入到 Secret 中。
1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Secret
metadata:
name: secret-postgres-root
namespace: core-middle
labels:
app: postgres
type: Opaque
stringData:
username: 'postgres'
password: 'postgres-admin-password' (1)
其中
1 | 你需要为管理员用户配置更为复杂的密码 |
4. 创建 PostgresSQL 服务器
使用以下配置创建 PostgresSQL 服务器。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sts-postgres
namespace: core-middle
labels:
app: postgres
spec:
serviceName: svc-postgres
selector:
matchLabels:
app: postgres
replicas: 1
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:14
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: secret-postgres-root
key: password
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: secret-postgres-root
key: username
- name: 'PGDATA'
value: "/var/lib/postgresql/data/pgdata"
resources:
requests:
memory: 3Gi
volumes:
- name: postgres-data
persistentVolumeClaim:
claimName: pvc-postgres-data
5. 关联Service
将 PostgresSQL 服务关联到 Service 下。
1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: Service
metadata:
labels:
app: postgres
name: svc-postgres
namespace: core-middle
spec:
ports:
- port: 5432
targetPort: 5432
selector:
app: postgres
6. 测试
使用以下命令查看实例部署情况:
1
kubectl get pods,secrets,services,deployments,pvc -n core-middle -l app=postgres
如果一切无误的话可使用以下命令测试 PostgresSQL ,输出结果如下所示。
测试命令
1
2
3
PG_NAME=$(kubectl get secrets -n core-middle secret-postgres-root -o jsonpath='{.data.username}' | base64 -d)
PG_PASSWD=$(kubectl get secrets -n core-middle secret-postgres-root -o jsonpath='{.data.password}' | base64 -d)
kubectl exec -it -n core-middle pods/sts-postgres-0 -- psql postgresql://$PG_NAME:$PG_PASSWD@svc-postgres.core-middle.svc.cluster.local:5432 -c "select 1"
输出结果
1
2
3
4
?column?
----------
1
(1 row)