В чём ключевые отличия монтирования дисков к виртуальной машине и к контейнеру?

«В чём ключевые отличия монтирования дисков к виртуальной машине и к контейнеру?» — вопрос из категории Виртуализация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Монтирование к виртуальной машине (VM):

  • Уровень абстракции: Работает на уровне блочных устройств или файловых систем. Гипервизор (KVM, VMware) эмулирует виртуальный диск (например, vda, sdb), который виден гостевой ОС как физический диск.
  • Механизм: Часто использует образы дисков (qcow2, vmdk) или прямое подключение LUN/блочного устройства хоста.
  • Настройка: Требует конфигурации в гипервизоре или через API облачного провайдера (например, подключение Volume в AWS EBS к EC2-инстансу).
  • Пример для KVM (libvirt XML):
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/data-disk.qcow2'/>
      <target dev='vdb' bus='virtio'/>
    </disk>

Монтирование к контейнеру:

  • Уровень абстракции: Работает на уровне файловой системы хоста. Контейнер монтирует каталог или файл, а не блочное устройство.
  • Механизм:
    • Bind Mount: Прямое монтирование каталога с хоста (-v /host/path:/container/path).
    • Docker Volume: Управляемый объект Docker, независимый от хостовой файловой системы.
    • Kubernetes Volumes: Использует объекты PersistentVolume (PV) и PersistentVolumeClaim (PVC) для абстракции от конкретного хранилища (NFS, cloud disk, Ceph).
  • Настройка: Определяется в runtime-команде (Docker) или в спецификации пода (Kubernetes).
  • Пример для Docker:
    docker run -v /mnt/app-data:/app/data:rw nginx
  • Пример для Kubernetes (Pod spec):
    volumes:
      - name: app-storage
        persistentVolumeClaim:
          claimName: my-app-pvc
    containers:
      - name: app
        volumeMounts:
        - mountPath: "/app/data"
          name: app-storage

Ключевое отличие: Виртуальная машина монтирует виртуальное блочное устройство, с которым гостевая ОС может работать как с физическим диском (разбивать на разделы, создавать ФС). Контейнер монтирует готовую файловую систему или её часть (каталог), что легче, быстрее, но не позволяет работать с диском на уровне блочных операций.