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/ перед тем как убить первый контейнер?

Другие вопросы по тегам