我有一个 1.7.12-gke.1 集群。
问题
- 当我动态配置卷时,我创建了一个 PVC。
- 在将数据引导到该 PVC 后,我终止了生成数据的容器。
- 然后,我启动了第二个容器,它绑定了相同的 PVC。
我希望第一个目录中的 postgres /data 文件将在新容器中可见......但它们不是。
挂载时通常可以看到它们之间的文件,但是由于某种原因,postgres 创建的所有文件在 data/ 目录下,在新 pod 中不可见。
细节
不知何故,这个特定目录的子内容似乎没有存储到卷中(或者至少,不是以这样一种方式,即它们以后可以从同一个 PVC 安装在新容器中)。
我在卷中引导数据目录,如下所示:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: jay-gke-pvc
spec:
accessModes:
- ReadWriteOnce
- ReadOnlyMany
resources:
requests:
storage: 700Mi
---
apiVersion: v1
kind: Pod
metadata:
name: postgres-init
labels:
app: postgres-init
tier: postgres-init
spec:
serviceAccountName: postgresapp
volumes:
- name: postgres-persistent-vol
persistentVolumeClaim:
claimName: jay-gke-pvc
initContainers:
- name: postgres-ini-bootstrap
image: alpine
command: ["rm","-rf","/var/lib/postgresql/*"]
volumeMounts:
- name: postgres-persistent-vol
mountPath: /var/lib/postgresql/
containers:
- name: postgres-ini
image: images/my-postgres:9.6.c
volumeMounts:
- name: postgres-persistent-vol
mountPath: /var/lib/postgresql/
securityContext:
runAsUser: 70
restartPolicy: Never
在这个 pod 启动后,我可以看到卷中有大量数据:
/ $ ls -altrh /var/lib/postgresql/data/
total 140
-rw-r--r-- 1 postgres postgres 1.4K Apr 6 19:24 root.crt
-rw------- 1 postgres postgres 21.6K Apr 6 19:24 postgresql.conf
drwx------ 3 postgres postgres 4.0K Apr 6 19:24 pg_xlog
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_twophase
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_tblspc
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_subtrans
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_snapshots
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_serial
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_replslot
drwx------ 4 postgres postgres 4.0K Apr 6 19:24 pg_multixact
drwx------ 4 postgres postgres 4.0K Apr 6 19:24 pg_logical
-rw------- 1 postgres postgres 1.6K Apr 6 19:24 pg_ident.conf
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_dynshmem
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_commit_ts
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_clog
-r-------- 1 postgres postgres 1.6K Apr 6 19:24 hub-database.key
-rw-r--r-- 1 postgres postgres 1.5K Apr 6 19:24 hub-database.crt
-rw------- 1 postgres postgres 4 Apr 6 19:24 PG_VERSION
drwxr-xr-x 4 root root 4.0K Apr 6 19:24 ..
-rw------- 1 postgres postgres 874 Apr 6 19:24 postgresql.auto.conf
drwx------ 8 postgres postgres 4.0K Apr 6 19:24 base
-rw------- 1 postgres postgres 940 Apr 6 19:24 pg_hba.conf
-rw------- 1 postgres postgres 85 Apr 6 19:24 postmaster.pid
-rw------- 1 postgres postgres 24 Apr 6 19:24 postmaster.opts
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_stat
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_notify
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_log
drwx------ 20 postgres postgres 4.0K Apr 6 19:24 .
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 pg_stat_tmp
drwx------ 2 postgres postgres 4.0K Apr 6 19:24 global
/ $ df -h | grep postgres
/dev/sdb 975.9M 2.5M 906.2M 0% /var/lib/postgresql
/dev/sda1 94.3G 31.0G 63.2G 33% /var/lib/postgresql/data
但是,当我在新的 postgres 容器中安装同一个磁盘以进行数据迁移时,我看到以下内容......没有文件(但数据目录以某种方式可见)。
/ $ ls /hub-db/
data/ lost+found/
/ $ ls /hub-db/data/
/ $ ls -altrh /hub-db/
total 28
drwx------ 2 root root 16.0K Apr 6 19:23 lost+found
drwxr-xr-x 2 root root 4.0K Apr 6 19:24 data
drwxr-xr-x 4 root root 4.0K Apr 6 19:24 .
drwxr-xr-x 1 root root 4.0K Apr 6 19:26 ..
/ $ df -h
Filesystem Size Used Available Use% Mounted on
overlay 94.3G 31.0G 63.3G 33% /
tmpfs 14.7G 0 14.7G 0% /dev
tmpfs 14.7G 0 14.7G 0% /sys/fs/cgroup
/dev/sdb 975.9M 2.5M 906.2M 0% /hub-db
/dev/sda1 94.3G 31.0G 63.3G 33% /dev/termination-log
/dev/sda1 94.3G 31.0G 63.3G 33% /etc/resolv.conf
/dev/sda1 94.3G 31.0G 63.3G 33% /etc/hostname
/dev/sda1 94.3G 31.0G 63.3G 33% /etc/hosts
shm 64.0M 0 64.0M 0% /dev/shm
tmpfs 14.7G 12.0K 14.7G 0% /run/secrets/kubernetes.io/serviceaccount
tmpfs 14.7G 0 14.7G 0% /proc/kcore
tmpfs 14.7G 0 14.7G 0% /proc/timer_list
tmpfs 14.7G 0 14.7G 0% /sys/firmware
请注意,在第二种情况下,我的用户是postgres:x:70:70::/var/lib/postgresql:/bin/sh
,并且在第一种情况下我使用相同的 ID (70),所以数字用户 ID 应该是相同的,因此我看不出这可能是权限错误的任何原因(尽管我可能是错的)。
一些后续问题,以防主要问题“我的 /data 内容在哪里?” 不容易回答:
1) 是否有一种简单的方法来确认或下载动态配置的卷内容?我宁愿不依赖 kubernetes 来调试卷是否具有正确的内容,因为容器挂载可能会做一些奇怪的事情。
2) 是否有任何原因导致特定子目录内容在使用与我最初写入内容相同的 PVC 的新 pod 中不可见?