Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 带Kubernetes和persistentDisk的Postgres_Postgresql_Docker_Kubernetes - Fatal编程技术网

Postgresql 带Kubernetes和persistentDisk的Postgres

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:

我刚开始使用Kubernates,在使用带有GCE永久磁盘的Kubernates安装Postgres时遇到问题。 我可以使用Kubernates演练和以下指南成功安装Mysql:

然而,当我尝试在postgres上实现类似的功能时,在连接到磁盘或使用磁盘时似乎失败了。 我在上面帖子的mysql基础上创建了一个pod yaml,但替换了postgres docker图像:

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之间等待一两分钟,它就会工作。不客气,很高兴它能为你工作!感谢您提供有关断开连接超时的提示。