GKE (1.7.12-gke.1) Динамическая подготовка: содержимое каталога создается в containerFS вместо тома FS
У меня кластер 1.7.12-гке.1.
проблема
- Когда я динамически выделяю тома, я создаю PVC.
- После начальной загрузки данных в этот PVC я уничтожаю контейнер, который сделал данные.
- Затем я запускаю второй контейнер, который связывает тот же ПВХ.
Я ожидаю, что файлы postgres /data из первого каталога будут видны в новом контейнере... но это не так.
обычно может видеть файлы между ними при монтировании, но все файлы, созданные postgres по какой-то причине в каталоге data/, не видны в новых модулях.
подробности
Каким-то образом кажется, что эти конкретные подкаталоги каталогов не сохраняются в томе (или, по крайней мере, не таким образом, чтобы их можно было потом монтировать в новый контейнер из того же 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
Я вижу, что в томе много данных после запуска этого модуля:
/ $ 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
и я использую один и тот же идентификатор (70) в первом случае, поэтому числовой идентификатор пользователя должен быть идентичен, поэтому я не вижу причин, по которым это может быть ошибкой прав доступа (хотя я могу ошибаться).
Некоторые последующие вопросы, в случае, если основной вопрос "где мои / данные содержимого?" не легко ответить:
1) Есть ли простой способ подтвердить или загрузить динамически подготовленное содержимое тома? Я бы предпочел не полагаться на kubernetes для отладки, если том имел правильное содержимое, так как монтирование контейнера может делать странные вещи.
2) Есть ли какая-то причина, по которой содержимое определенного подкаталога не отображается в новом модуле, использующем тот же PVC, в который я изначально записал содержимое?
2 ответа
Я вижу, что у вас есть 2 крепления в вашем контейнере:
$ 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
Основываясь на вашей спецификации Pod, Kubernetes обрабатывает только первое крепление, /var/lib/postgresql
, Кажется, что-то еще монтирует этот каталог данных, и похоже, что он монтирует его из файловой системы контейнера (/dev/sda1), а не из GCE PD (/dev/sdb).
Таким образом, ваш второй модуль не увидит никакого содержимого в каталоге данных, потому что он монтируется только локально в первом контейнере.
Что-то странное с вашими креплениями:
/ $ 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
Вы монтируете /dev/sda1, который должен быть корневой файловой системой вашего контейнера поверх устройства /deb/sdb.
Просто интересно, ты размонтируешь громкость /var/lib/postgresql/
перед тем как убить первый контейнер?