Монтирование тома NFS в Google Container Engine с ОС Container (COS)

После переноса типа образа из container-vm в cos для узлов кластера GKE, кажется, больше невозможно смонтировать том NFS для модуля.

Кажется, проблема заключается в отсутствии клиентских библиотек NFS, поскольку команда монтирования из командной строки не выполняется во всех версиях COS, которые я пробовал (cos-stable-58-9334-62-0, cos-beta-59-9460-20-0, cos-dev-60-9540-0-0).

sudo mount -t nfs mynfsserver:/myshare /mnt

не удается с

mount: wrong fs type, bad option, bad superblock on mynfsserver:/myshare,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)

Но это противоречит поддерживаемым типам томов, перечисленным здесь: https://cloud.google.com/container-engine/docs/node-image-migration

Монтирование тома NFS в модуле работает в пуле с типом изображения container-vm но не с cos,

С, потому что я получаю следующие сообщения с kubectl describe pod:

MountVolume.SetUp failed for volume "kubernetes.io/nfs/b6e6cf44-41e7-11e7-8b00-42010a840079-nfs-mandant1" (spec.Name: "nfs-mandant1") pod "b6e6cf44-41e7-11e7-8b00-42010a840079" (UID: "b6e6cf44-41e7-11e7-8b00-42010a840079") with: mount failed: exit status 1
Mounting command: /home/kubernetes/containerized_mounter/mounter
Mounting arguments: singlefs-1-vm:/data/mandant1 /var/lib/kubelet/pods/b6e6cf44-41e7-11e7-8b00-42010a840079/volumes/kubernetes.io~nfs/nfs-mandant1 nfs []
Output: Mount failed: Mount failed: exit status 32
Mounting command: chroot
Mounting arguments: [/home/kubernetes/containerized_mounter/rootfs mount -t nfs singlefs-1-vm:/data/mandant1 /var/lib/kubelet/pods/b6e6cf44-41e7-11e7-8b00-42010a840079/volumes/kubernetes.io~nfs/nfs-mandant1]
Output: mount.nfs: Failed to resolve server singlefs-1-vm: Temporary failure in name resolution

2 ответа

Я использовал решение @saad-ali, упомянутое выше, из проекта kubernetes, чтобы сделать эту работу.

Чтобы быть конкретным, я добавил следующее в мой cloud-config:

# This script creates a chroot environment containing the tools needed to mount an nfs drive
- path: /tmp/mount_config.sh
  permissions: 0755
  owner: root
  content: |
    #!/bin/sh
    set +x # For debugging

    export USER=root
    export HOME=/home/dockerrunner
    mkdir -p /tmp/mount_chroot
    chmod a+x /tmp/mount_chroot
    cd /tmp/
    echo "Sleeping for 30 seconds because toolbox pull fails otherwise"
    sleep 30
    toolbox --bind /tmp /google-cloud-sdk/bin/gsutil cp gs://<uploaded-file-bucket>/mounter.tar /tmp/mounter.tar
    tar xf /tmp/mounter.tar -C /tmp/mount_chroot/
    mount --bind /tmp/mount_chroot /tmp/mount_chroot
    mount -o remount, exec /tmp/mount_chroot
    mount --rbind /proc /tmp/mount_chroot/proc
    mount --rbind /dev /tmp/mount_chroot/dev
    mount --rbind /tmp /tmp/mount_chroot/tmp
    mount --rbind /mnt /tmp/mount_chroot/mnt

Загруженный файл-контейнер-контейнер с изображением чрума, созданный командой kube, загружен с сайта: https://storage.googleapis.com/kubernetes-release/gci-mounter/mounter.tar

Затем runcmd для облачной конфигурации выглядит примерно так:

runcmd:
- /tmp/mount_config.sh
- mkdir -p /mnt/disks/nfs_mount
- chroot /tmp/mount_chroot /bin/mount -t nfs -o rw nfsserver:/sftp /mnt/disks/nfs_mount

Это работает. Безобразно, черт возьми, но пока придется.

Мартин, вы настраиваете монтирование вручную (выполняете монтирование самостоятельно), или вы позволяете kubernetes делать это от вашего имени через модуль, ссылающийся на том NFS?

Бывший не будет работать. Позже будет. Как вы обнаружили, COS не поставляется с клиентскими библиотеками NFS, поэтому GKE справляется с этим, устанавливая chroot (в /home/kubernetes/containerized_mounter/rootfs) с необходимыми двоичными файлами и вызывая монтирование внутри них.

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