Postgresql 带Kubernetes和persistentDisk的Postgres
我刚开始使用Kubernates,在使用带有GCE永久磁盘的Kubernates安装Postgres时遇到问题。 我可以使用Kubernates演练和以下指南成功安装Mysql: 然而,当我尝试在postgres上实现类似的功能时,在连接到磁盘或使用磁盘时似乎失败了。 我在上面帖子的mysql基础上创建了一个pod yaml,但替换了postgres docker图像:Postgresql 带Kubernetes和persistentDisk的Postgres,postgresql,docker,kubernetes,Postgresql,Docker,Kubernetes,我刚开始使用Kubernates,在使用带有GCE永久磁盘的Kubernates安装Postgres时遇到问题。 我可以使用Kubernates演练和以下指南成功安装Mysql: 然而,当我尝试在postgres上实现类似的功能时,在连接到磁盘或使用磁盘时似乎失败了。 我在上面帖子的mysql基础上创建了一个pod yaml,但替换了postgres docker图像: apiVersion: v1beta1 id: postgres desiredState: manifest:
apiVersion: v1beta1
id: postgres
desiredState:
manifest:
version: v1beta1
id: postgres
containers:
- name: postgres
image: postgres
env:
- name: DB_PASS
value: password
cpu: 100
ports:
- containerPort: 5432
volumeMounts:
# name must match the volume name below
- name: persistent-storage
# mount path within the container
mountPath: /var/lib/postgresql/data
volumes:
- name: persistent-storage
source:
persistentDisk:
# This GCE PD must already exist and be formatted ext4
pdName: postgres-disk
fsType: ext4
labels:
name: postgres
kind: Pod
然而,当我创建
$ kubectl create -f postgres.yaml
我得到以下错误:
$ kubectl logs postgres
$ postgres cannot access the server configuration file "/var/lib/postgresql/data/postgresql.conf": No such file or directory
我可以看到postgres磁盘连接到minion服务器,所以我想知道它是否与我正在使用的docker映像中的卷有关,或者我是否需要为postgresql.conf文件提供单独的装载路径
现在,如果我更改装载路径(例如mountPath:/var/lib/postgresql),pod将正常启动,但它似乎没有使用持久数据。
检查minion上docker容器中的卷可以让我:
"Volumes": {
"/dev/termination-log": "/var/lib/kubelet/pods/52177db4-149c-11e5-a64b-42010af06968/containers/postgres/91ecf33c939588b4165865f46b646677bf964fab81ea7ec08b598568513d4644",
"/var/lib/postgresql": "/var/lib/kubelet/pods/52177db4-149c-11e5-a64b-42010af06968/volumes/kubernetes.io~gce-pd/pgdata",
"/var/lib/postgresql/data": "/var/lib/docker/vfs/dir/c3ecda11de6a598d99842c06bee22097f1cb63a6e467cbe7af874d003140a4af",
"/var/run/secrets/kubernetes.io/serviceaccount": "/var/lib/kubelet/pods/52177db4-149c-11e5-a64b-42010af06968/volumes/kubernetes.io~secret/default-token-b6s28"
},
我还尝试将json文件与v1beta3一起使用,结果类似:
{
"kind": "Pod",
"apiVersion": "v1beta3",
"metadata": {
"name": "postgres"
},
"spec": {
"volumes": [{
"name": "pgdata",
"gcePersistentDisk": {
"pdName": "postgres-disk",
"fsType": "ext4"
}
}],
"containers": [
{
"name": "postgres",
"image": "postgres",
"ports": [
{
"name": "postgres-ports",
"hostPort": 5432,
"containerPort": 5432
}
],
"env": [
{
"name": "DB_USER",
"value": "postgres"
},
{
"name": "DB_PASS",
"value": "password"
}
],
"volumeMounts": [
{
"name": "pgdata",
"readOnly": false,
"mountPath": "/var/lib/postgresql/data"
}
]
}
]
}
}
很可能我刚刚错过了文档中的一些内容,但是如果有任何帮助,我们将不胜感激 您的yaml有“persistentDisk”,其中应该有“gcePersistentDisk”。使用kubectl create-f--validate
捕获这样的错误。不过,您的json看起来是正确的
postgres是否可能要求该配置文件已经存在?请查看文档中的卷 在将GCE PD与pod一起使用之前,您需要先创建它
gcloud compute disks create --size=500GB --zone=us-central1-a pg-data-disk
这将是您的配置,注意gcePersistentDisk
apiVersion: v1beta1
id: postgres
desiredState:
manifest:
version: v1beta1
id: postgres
containers:
- name: postgres
image: postgres
env:
- name: DB_PASS
value: password
cpu: 100
ports:
- containerPort: 5432
volumeMounts:
# name must match the volume name below
- name: persistent-storage
# mount path within the container
mountPath: /var/lib/postgresql/data
volumes:
- name: persistent-storage
source:
gcePersistentDisk:
# This GCE PD must already exist and be formatted ext4
pdName: pg-data-disk
fsType: ext4
labels:
name: postgres
kind: Pod
我也遇到了同样的问题-这是由于db初始化脚本错误地假设非空卷目录意味着它已经初始化 不幸的是,新的GCE持久化磁盘包含一个
丢失+找到的
目录
我已经提交了docker映像的修复程序。谢谢-我还尝试了使用gcePersistent磁盘。我认为您可能是对的,配置不存在,或者在容器启动时持久磁盘可能没有准备好。如果我发现更多,我会更新。谢谢-我取得了一些进展,我能够连接到永久磁盘,然后关闭容器,重新连接,并查看数据。我确实注意到,如果我使用kubectl关闭pod,然后快速地重新创建它们,它就不会连接到持久磁盘。如果我在停止和创建pod之间等待一两分钟,它就会工作。不客气,很高兴它能为你工作!感谢您提供有关断开连接超时的提示。