我正在尝试将postgres服务部署到google cloud kubernetes,并使用持久卷和持久卷声明为我的应用程序提供存储。
当我部署时,pod卡在CrashLoopBackOff中。
pod的一个事件失败,并显示以下消息:
Error: failed to start container "postgres": Error response from daemon: error while creating mount source path '/data/postgres-pv': mkdir /data: read-only file system
这是我尝试使用kubectl部署的yaml:
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv
labels:
type: local
app: postgres
spec:
capacity:
storage: 5Gi
storageClassName: standard
accessModes:
- ReadWriteOnce
hostPath:
path: /data/postgres-pv
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-pvc
labels:
type: local
app: postgres
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
volumeName: postgres-pv
---
apiVersion: v1
kind: Secret
metadata:
name: postgres-credentials
type: Opaque
data:
user: YWRtaW4=
password: password==
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres-container
image: postgres:9.6.6
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgres-credentials
key: user
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-credentials
key: password
- name: POSTGRES_DB
value: kubernetes_django
ports:
- containerPort: 5432
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgres-volume-mount
volumes:
- name: postgres-volume-mount
persistentVolumeClaim:
claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
ports:
- protocol: TCP
port: 5432
targetPort: 5432
selector:
app: postgres没有失败的部署,但pod卡在CrashLoopBackOff中。
谢谢你的帮助!
发布于 2018-10-26 10:37:47
问题出在您的持久卷上。您正在使用的主机路径不受支持,according to the doc永远不会受支持
发布于 2019-02-22 07:04:55
我也有同样的问题。在GCP之后,我让它在minikube上工作,但它在GCP上给出了相同的错误。
正如帕特里克·W提到的,the docs说:
持久卷的
类型
中不起作用
为了解决这个问题,我在kubernetes docs中找到了一个解决方案。
您首先必须创建一个gcePersistentDisk
gcloud compute disks create --size=[SIZE] --zone=[ZONE] [DISK_NAME]然后,链接中描述的配置应该可以做到这一点:
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv
labels:
type: local
spec:
capacity:
storage: 4Gi
storageClassName: standard
accessModes:
- ReadWriteMany
gcePersistentDisk:
pdName:data-disk
fsType: ext4
readOnly: true发布于 2019-04-29 07:25:57
首先,您不应该在持久卷中使用主机路径。其次,我认为你在部署中遗漏了一部分,你应该指定一个PDATA目录。
为了简单起见,我分享了我的yml部署:
1.持久卷声明:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi2.config映射到保持位置env :
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_DB: profile
POSTGRES_USER: postgresadmin
POSTGRES_PASSWORD: othmane
PGDATA: /var/lib/postgresql/data/pgdata3. postgres部署:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:10.4
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5432
name: postgres
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- name: postgres-db
mountPath: /var/lib/postgresql/data
volumes:
- name: postgres-db
persistentVolumeClaim:
claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
name: postgres
spec:
selector:
app: postgres
ports:
- protocol: "TCP"
port: 5432
targetPort: 5432
type: ClusterIPhttps://stackoverflow.com/questions/52911037
复制相似问题