postgresql - 带有 Kubernetes 和 persistentDisk 的 Postgres

标签 postgresql docker kubernetes

我刚开始使用 Kubernates,在使用带有 GCE 永久磁盘的 Kubernetes 安装 Postgres 时遇到了问题。 我可以使用 Kubernates 演练和以下指南成功安装 Mysql:http://amygdala.github.io/kubernetes/2015/01/13/k8s1.html

但是,当我尝试用 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-disk 连接到一个 minion 服务器,所以我想知道它是否与我正在使用的 docker 镜像中的卷有关,或者我是否需要 postgresql 的单独挂载路径。配置文件。

现在,如果我更改挂载路径(例如 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"
          }
        ]
      }
    ]
  }
}

我很可能只是错过了 doco 中的某些内容,但是如果有任何帮助,我们将不胜感激!

最佳答案

我也遇到了同样的问题 - 这是由于数据库初始化脚本错误地假设非空卷目录意味着它已经被初始化。

不幸的是,新的 GCE 持久性磁盘包含一个 lost+found 目录。

我已经提交了 docker 镜像的修复 here .

关于postgresql - 带有 Kubernetes 和 persistentDisk 的 Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30881637/

相关文章:

postgresql - 传表给postgreSQL函数,执行select语句,返回表

docker - 在哪里可以找到 docker 镜像的所有变量

python - Docker 容器中缺少 python 包

postgresql - 为什么 SERIAL 不能处理 Postgres 中的这个简单表?

postgresql - 如何在 Sequelize 中翻译以下 PostgreSQL 查询?

ruby-on-rails-3 - 获取错误 : You must install at least one postgresql-client-<version> package when deploy to heroku

docker - 如何在docker build中进行配置,制作和安装

kubernetes - 从远程机器上部署的 kubernetes 仪表板服务访问本地笔记本电脑时无法访问站点问题

具有 Terraform 负载均衡器的 Azure Kubernetes 服务显示 "Internal Server Error"?

Kubernetes pod 偶尔会抛出 "ImagePullBackOff"或 "ErrImagePull"