参考文档:

https://blog.csdn.net/weixin_39750084/article/details/136349711 (主要)

https://blog.csdn.net/qq_14910065/article/details/135351830

创建资源文件 vim postgres.yaml,内容如下:

 1apiVersion: v1
 2kind: Namespace
 3metadata:
 4  name: postgres-dev
 5---
 6apiVersion: v1
 7kind: ConfigMap
 8metadata:
 9  name: postgres-config
10  namespace: postgres-dev
11  labels:
12    app: postgres
13data:
14  POSTGRES_DB: test
15  POSTGRES_USER: root
16  POSTGRES_PASSWORD: "123456"
17---
18kind: PersistentVolume
19apiVersion: v1
20metadata:
21  name: postgres-pv
22  labels:
23    app: postgres
24spec:
25  storageClassName: postgres-sc
26  capacity:
27    storage: 10Gi
28  accessModes:
29    - ReadWriteMany
30  volumeMode: Filesystem
31  hostPath:
32    path: "/home/zhangcong/dev/postgres-data"
33---
34kind: PersistentVolumeClaim
35apiVersion: v1
36metadata:
37  name: postgres-pvc
38  namespace: postgres-dev
39  labels:
40    app: postgres
41spec:
42  storageClassName: postgres-sc
43  accessModes:
44    - ReadWriteMany
45  resources:
46    requests:
47      storage: 10Gi
48---
49apiVersion: apps/v1
50kind: Deployment
51metadata:
52  name: postgres-deployment
53  namespace: postgres-dev
54spec:
55  strategy:
56    type: Recreate
57  selector:
58    matchLabels:
59      app: postgres
60  replicas: 1
61  template:
62    metadata:
63      labels:
64        app: postgres
65    spec:
66      containers:
67        - name: postgres
68          image: postgres:15.6
69          imagePullPolicy: "IfNotPresent"
70          ports:
71            - containerPort: 5432
72          envFrom:
73            - configMapRef:
74                name: postgres-config
75          volumeMounts:
76            - mountPath: /var/lib/postgresql/data
77              name: postgredb
78      volumes:
79        - name: postgredb
80          persistentVolumeClaim:
81            claimName: postgres-pvc
82---
83apiVersion: v1
84kind: Service
85metadata:
86  name: postgres-service
87  namespace: postgres-dev
88  labels:
89    app: postgres
90spec:
91  type: NodePort
92  ports:
93  - port: 5432
94    targetPort: 5432
95    nodePort: 30076
96    protocol: TCP
97  selector:
98   app: postgres

说明:

  • ConfigMap中保存的是初始化时创建的数据库、用户名和密码,之后可以通过 命令 psql -U root -h 192.168.0.91 -p 30076 test 连接;当然也可以通过数据库工具连接

  • 建议在创建pvc、pv时指定 storageClassName,否则数据库持久化时,可能不知道文件存到哪儿去了

应用资源文件:

1[zhangcong@master k8s]$ kubectl apply -f postgres.yaml 
2namespace/postgres-dev created
3configmap/postgres-config created
4persistentvolume/postgres-pv created
5persistentvolumeclaim/postgres-pvc created
6deployment.apps/postgres-deployment created
7service/postgres-service created