我有以下部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
selector:
matchLabels:
component: postgres
template:
metadata:
labels:
component: postgres
spec:
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: postgres-persistent-volume-claim
containers:
- name: postgres
image: prikshet/postgres
ports:
- containerPort: 5432
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
subPath: postgres
当我包含第23-26行并执行kubectl apply
时,pod会出现错误并且不会运行,但当我删除第23-36行时,pod会运行。我想使用第23-26行创建卷挂载。检查此pod的日志时出现的错误是:
postgres: could not access the server configuration file "/var/lib/postgresql/data/postgresql.conf": No such file or directory
postgres持久卷声明是:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-persistent-volume-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
如何解决这个问题?
1条答案
按热度按时间bpsygsoo1#
实际上有两种可能性会发生此错误:
1.您的文件
/var/lib/postgresql/data/postgresql.conf
实际上并不存在。在这种情况下,您需要在挂载它之前创建它。1.正如评论中提到的meaningqo good,您使用了错误的
subPath
。您的文件/var/lib/postgresql/data/postgresql.conf
存在,但您试图挂载基于subPath
的错误文件。请查看explanationmountPath
和subPath
之间的区别:mountPath
显示了引用卷在容器中的挂载位置。例如,如果将卷挂载到mountPath: /a/b/c
,则该卷将在目录/a/b/c
下对容器可用。挂载卷将使mountPath
下的所有卷可用。如果只需要挂载卷的一部分,例如卷中的单个文件,您可以使用subPath
指定必须挂载的部分。例如,mountPath: /a/b/c
,subPath: d
将使d
在目录/a/b/c
下挂载的卷中的任何内容。请注意,当subPath
是文件夹时,该文件夹的内容将挂载到mountPath