Minikube & Kubernetes: использование подключенного диска Windows в качестве постоянного тома в контейнере Postgres

ПРИМЕЧАНИЕ. После дальнейшего устранения неполадок я считаю, что это проблема с креплением minikube. Большая часть приведенного ниже описания может не относиться к конкретной проблеме. Смотрите мои комментарии для дополнительной информации. Удерживая вопрос как заданный.


Я пытаюсь использовать локальную SDCard в качестве точки монтирования в мини-кубе, создать постоянный том в точке монтирования, создать соответствующее постоянное утверждение тома, а затем использовать его в качестве монтирования тома в контейнере, в котором размещен экземпляр postgres. Сначала я опишу, как я создавал до PVC, а затем углублюсь в определение pod.

1. Я использую команду minikube для запуска виртуальной машины minikube (Hyper-V) с точкой монтирования:

запуск мини-куба --vm-driver="hyperv" --hyperv-virtual-switch="Мой виртуальный коммутатор" --mount --mount-string="D:\data:/data"

После запуска этого я использовал minikube ssh определить, что каталог смонтирован правильно и имеет владельца / группу root.

2. Создайте постоянный том:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-data-pv
  labels:
    type: local
    application: postgres
spec:
  capacity:
    storage: 500Mi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "/data/gather-client/postgres/data"

3. Создайте PersistentVolumeClaim:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-data-pvc
  annotations:
    volume.beta.kubernetes.io/storage-class: ""
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

4. Создание контейнера и контейнера Моя первая попытка создания пакета была простым, хорошо документированным подходом:

kind: Pod
apiVersion: v1
metadata:
  name: gather-client
spec:
  volumes:
  - name: postgres-data
    persistentVolumeClaim:
      claimName: postgres-data-pvc
  containers:
    - name: metadata-db
      image: postgres:9.6.5
      env:
      - name: PGDATA
        value: /var/lib/postgresql/data/pgdata
      volumeMounts:
      - name: postgres-data
        mountPath: /var/lib/postgresql/data

В этот момент я получаю CrashLoopBackoff и после проверки журнала контейнера нахожу ошибку:

chown: смена владельца '/var/lib/postgresql/data/pgdata': ошибка ввода / вывода

Я считаю, что здесь происходит то, что в контейнере есть пользователь postgres, который выполняет команду initdb, а каталог принадлежит root? Опять же, я не чувствую, что я получил бы ошибку ввода / вывода в этом случае.

Во всяком случае, я попробовал два дополнительных подхода:

1. Использование securityContext с fsGroup, совпадающей с UID/GID пользователя postgres (999)

Здесь я просто добавил этот фрагмент вверху спецификации в надежде, что том будет создан с учетом контекста пользователя postgres (я не слишком уверен, что именно так это работает...):

  securityContext:
    fsGroup: 999

Я получаю ту же ошибку и быстро перехожу к следующему подходу...

2. Использование initContainer для выполнения команды chown. Это где я провел большую часть своего времени. Я добавил немного команд отладки, чтобы лучше понять, что здесь происходит.

  initContainers:
  - name: metadata-db-init
    image: postgres:9.6.5
    command: ["sh"]
    args: ["-c", "whoami; ls -l /var/lib/postgresql; ls -l /var/lib/postgresql/data; chown postgres /var/lib/postgresql/data; chown postgres /var/lib/postgresql/data/pgdata"]
    volumeMounts:
    - name: postgres-data
      mountPath: /var/lib/postgresql/data

После этого я получаю статус модуля Init:CrashLoopBackOff. Вот что я получаю в журнале внутри initContainer:

корень

всего 0 drwxrwxrwx 1 корневой корень 0 янв 1 1970 данные

всего 1 drwxrwxrwx 1 корневой корень 0 1 января 1970 г. pgdata -rw-rw-rw- 1 корневой корень 5 января 1 1970 тест

chown: смена владельца '/ var / lib / postgresql / data': ошибка ввода / вывода

chown: смена владельца '/var/lib/postgresql/data/pgdata': ошибка ввода / вывода

Я также написал простой тестовый файл из сценария оболочки в каталог pgdata и обнаружил, что он существует на моей SDCard. Из этого я предположил, что ошибка ввода / вывода не связана с разрешениями. Кроме того, возможность записи в каталог как root означает, что файловая система находится в рабочем состоянии. Я просто не могу поесть (как root). Как это могло произойти?

0 ответов

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