Mil*_*iez 2 postgresql kubernetes google-kubernetes-engine
我正在尝试在PersistentVolumeClaimGKE 中部署 Postgres。根据此处的描述(请参阅 参考资料PGDATA),建议在安装外部卷时创建一个子目录。所以,这就是我对 PG 部署所做的事情:
spec:
containers:
- name: postgres-dev
image: "postgres:12.1"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5432
env:
- name: PGDATA
value: "/var/lib/postgresql/data/pgdata"
volumeMounts:
- name: postgres-persistent-storage-dev
mountPath: "/var/lib/postgresql/data/pgdata"
volumes:
- name: postgres-persistent-storage-dev
persistentVolumeClaim:
claimName: postgres-pvc-dev
Run Code Online (Sandbox Code Playgroud)
/pgdata我在 中创建子目录/postgresql/data,这将是 Postgres 数据的原始挂载点。
但是当我尝试部署 Postgres pod 时,它因退避错误而停止,并且收到以下事件:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 20s default-scheduler Successfully assigned default/postgres-dev-7f549754d-nm2lf to gke-cluster-pool-1-4ce1e4d6-m33c
Normal SuccessfulAttachVolume 15s attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-eea8ee4d-9d00-11ea-a854-42010a8a0057"
Normal Pulled 9s (x2 over 10s) kubelet, gke-cluster-pool-1-4ce1e4d6-m33c Container image "postgres:12.1" already present on machine
Normal Created 9s (x2 over 10s) kubelet, gke-cluster-pool-1-4ce1e4d6-m33c Created container postgres-dev
Normal Started 9s (x2 over 10s) kubelet, gke-cluster-pool-1-4ce1e4d6-m33c Started container postgres-dev
Warning BackOff 7s (x2 over 8s) kubelet, gke-cluster-pool-1-4ce1e4d6-m33c Back-off restarting failed container
Run Code Online (Sandbox Code Playgroud)
这些是来自 Postgres 容器的日志:
initdb: error: directory "/var/lib/postgresql/data/pgdata" exists but is not empty
It contains a lost+found directory, perhaps due to it being a mount point.
Using a mount point directly as the data directory is not recommended.
Create a subdirectory under the mount point.
Run Code Online (Sandbox Code Playgroud)
因此,我为 mountpoint 创建了子目录,如 的建议initdb,然后它抱怨它。PVC 是在部署之前创建的,因此其中没有数据。
我也尝试使用全新的、不存在的目录/var/lib/postgres/data,但效果是一样的。
另一个有趣的点是,当我在 中进行设置时minikube,一切正常。
我该如何处理这个问题?
在更仔细地阅读 Postgres 错误日志后,我意识到问题在于我将挂载点路径和数据路径设置为相同的 dir。Postgres 容器中日志消息的这一特定部分是关键部分:
Using a mount point directly as the data directory is not recommended.
Create a subdirectory under the mount point.
Run Code Online (Sandbox Code Playgroud)
我将 env var 的值更改PGDATA为/var/lib/postgresql/data/pgdata(这是数据库数据目录),并将安装点更改为/var/lib/postgresql/data(这是 Postgres 从中初始化自身的目录)。
这次改变之后,它就像一个魅力。
| 归档时间: |
|
| 查看次数: |
6267 次 |
| 最近记录: |