【发布时间】:2019-04-17 12:27:46
【问题描述】:
Kubernetes 版本 - 1.8
- 使用 pvc 为 postgres 数据库创建 statefulset
- 向数据库中添加了一些表
- 通过将 statefulset 缩放到 0 然后再缩放到 1 来重新启动 pod
- 第 2 步中创建的表不再可用
在 docker-for-desktop 集群 k8s 版本 1.10 上尝试了另一个 scnario
- 使用 pvc 为 postgres 数据库创建 statefulset
- 向数据库中添加了一些表
- 重新启动桌面版 docker
- 第 2 步中创建的表不再可用
k8s 清单
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_DB: kong
POSTGRES_USER: kong
POSTGRES_PASSWORD: kong
PGDATA: /var/lib/postgresql/data/pgdata
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-pv
labels:
app: postgres
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/postgresql/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
labels:
app: postgres
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: postgres
app: postgres
spec:
ports:
- name: pgql
port: 5432
targetPort: 5432
protocol: TCP
selector:
app: postgres
---
apiVersion: apps/v1beta2 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1
kind: StatefulSet
metadata:
name: postgres
spec:
serviceName: "postgres"
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:9.6
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5432
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
persistentVolumeClaim:
claimName: postgres-pvc
---
【问题讨论】:
-
考虑添加您用于创建环境的清单。没有它,我们对您正在使用什么类型的资源(例如,问题将是
hostPathPersistent Volume,它在使用多个节点时不起作用......)没有最小的想法。 /i>。请参阅:How to create a Minimal, Complete, and Verifiable example。 -
添加了我正在使用的 k8s 清单
-
您使用的是单节点集群(如 Minikube),还是具有多个节点的 Kubernetes 集群?如果使用多个节点,问题出在
hostPath卷上,它将目录从主机节点的文件系统挂载到您的 Pod 中。 pod 重新创建时,可能会被调度到另一个节点,导致卷数据丢失。尝试重新创建您的步骤,这次检查 pod 分配给了kubectl get po -o wide的节点。
标签: kubernetes