2

Kubernates を使い始めたのですが、GCE Persistent ディスクを使用して Kubernetes を使用して Postgres をインストールする際に問題が発生しています。Kubernates ウォークスルーと次のガイドの両方を使用して、Mysql を正常にインストールできます: http://amygdala.github.io/kubernetes/2015/01/13/k8s1.html

しかし、postgres で同様のことを実現しようとすると、ディスクへのアタッチ時またはディスクの使用時に失敗するようです。上記の投稿の mysql に基づいてポッド 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 がミニオン サーバーに接続されていることがわかります。使用している Docker イメージのボリュームに関連しているのか、それとも postgresql.conf ファイル用に別のマウント パスが必要なのか疑問に思っています。

ここで、マウント パス (例: mountPath: /var/lib/postgresql) を変更すると、ポッドは正常に起動しますが、永続データを使用しているようには見えません。ミニオンの 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"
    },

また、v1beta3 で json ファイルを使用してみましたが、同様の結果が得られました。

{
  "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 で何かを見逃している可能性は十分にありますが、これで何か助けていただければ幸いです。

4

3 に答える 3