Для выполнения приведенных ниже команд необходима установленная утилита d8 (Deckhouse CLI) и настроенный контекст kubectl для доступа к кластеру. Также, можно подключиться к master-узлу по SSH и выполнить команду от пользователя root с помощью sudo -i.

После настройки хранилища необходимо включить модуль virtualization. Включение и настройка модуля производятся с помощью веб-интерфейса администратора или с помощью следующей команды:

d8 system module enable virtualization

Отредактируйте конфигурацию модуля одним из способов.

В конфигурации модуля укажите:

Пример базовой настройки модуля виртуализации:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: virtualization
spec:
  enabled: true
  version: 1
  settings:
    ingressClass: nginx # опциональный параметр
    dvcr:
      storage:
        persistentVolumeClaim:
          size: 50G
          storageClassName: rv-thin-r1
        type: PersistentVolumeClaim
    virtualMachineCIDRs:
      - 10.66.10.0/24

Дождитесь, пока все поды модуля не перейдут в статус Running:

d8 k get po -n d8-virtualization

Пример вывода...

NAME                                         READY   STATUS    RESTARTS      AGE
cdi-apiserver-858786896d-rsfjw               3/3     Running   0             10m
cdi-deployment-6d9b646b5b-8dgmj              3/3     Running   0             10m
cdi-operator-5fdc989d9f-zmk55                3/3     Running   0             10m
dvcr-74dc9c94b-pczhx                         2/2     Running   0             10m
virt-api-78d49dcbbf-qwggw                    3/3     Running   0             10m
virt-controller-6f8fff445f-w866w             3/3     Running   0             10m
virt-handler-g6l9h                           4/4     Running   0             10m
virt-handler-t5fgb                           4/4     Running   0             10m
virt-handler-ztj77                           4/4     Running   0             10m
virt-operator-58dc5459d5-hpps8               3/3     Running   0             10m
virtualization-api-5d69f55947-k6h9n          1/1     Running   0             10m
virtualization-controller-69647d98c6-9rkht   3/3     Running   0             10m
vm-route-forge-288z7                         1/1     Running   0             10m
vm-route-forge-829wm                         1/1     Running   0             10m
vm-route-forge-nq9xr                         1/1     Running   0             10m

Конфигурация модуля virtualization

Изменить конфигурацию модуля virtualization можно через веб-интерфейс администратора или через CLI.

Через веб-интерфейс администратора

  • Перейдите на вкладку «Система», далее в раздел «Deckhouse» → «Модули».
  • Из списка выберите модуль virtualization.
  • Во всплывающем окне выберите вкладку «Конфигурация».
  • Для отображения настроек нажмите переключатель «Дополнительные настройки».
  • Укажите необходимые параметры модуля.
  • Для применения настроек нажмите кнопку «Сохранить».

Через CLI

d8 k edit mc virtualization

Описание параметров

Ниже представлены описания параметров модуля виртуализации.

Версия конфигурации

Параметр .spec.version определяет версию схемы настроек. Структура параметров может меняться между версиями. Актуальные значения приведены в разделе настроек.

Параметры для настройки постоянного тома для хранения образов виртуальных машин (DVCR)

Блок .spec.settings.dvcr.storage настраивает постоянный том для хранения образов:

  • .spec.settings.dvcr.storage.persistentVolumeClaim.size — размер тома (например, 50G). Для расширения хранилища увеличьте значение параметра;
  • .spec.settings.dvcr.storage.persistentVolumeClaim.storageClassName — класс хранения (например, rv-thin-r1).

Перенос образов при изменении значения параметра .spec.settings.dvcr.storage.persistentVolumeClaim.storageClassName не поддерживается.

При смене StorageClass DVCR все образы, хранящиеся в DVCR, будут утеряны.

Для изменения StorageClass DVCR выполните следующие действия:

  1. Измените значение параметра .spec.settings.dvcr.storage.persistentVolumeClaim.storageClassName.

  2. Удалите старый PVC для DVCR с помощью следующей команды:

    d8 k -n d8-virtualization delete pvc -l app=dvcr
    
  3. Перезапустите DVCR, выполнив следующую команду:

    d8 k -n d8-virtualization rollout restart deployment dvcr
    

Хранилище, обслуживающее данный класс хранения .spec.settings.dvcr.storage.persistentVolumeClaim.storageClassName, должно быть доступно на узлах, где запускается DVCR (system-узлы, либо worker-узлы, при отсутствии system-узлов).

Настройки Ingress

Параметр .spec.settings.ingressClass определяет класс Ingress-контроллера, который будет использоваться для загрузки образов виртуальных машин через веб-интерфейс или CLI.

  • Если параметр не указан, используется глобальное значение из конфигурации DVP.
  • Параметр является опциональным и указывается только при необходимости использовать Ingress-контроллер, отличный от глобального.

Пример:

spec:
  settings:
    ingressClass: nginx

При загрузке больших образов виртуальных машин (особенно при слабых каналах связи) рекомендуется увеличить таймаут завершения работы воркеров Ingress-контроллера. Это предотвратит прерывание загрузки при перезапуске или обновлении Ingress-контроллера.

Пример:

apiVersion: deckhouse.io/v1
kind: IngressNginxController
metadata:
  name: nginx
spec:
  config:
    worker-shutdown-timeout: 1800s  # 30 минут или более при необходимости

Сетевые настройки

В блоке .spec.settings.virtualMachineCIDRs указываются подсети в формате CIDR (например, 10.66.10.0/24). IP-адреса для виртуальных машин распределяются из этих - диапазонов автоматически или по запросу.

Пример:

spec:
  settings:
    virtualMachineCIDRs:
      - 10.66.10.0/24
      - 10.66.20.0/24
      - 10.77.20.0/16

Для каждой подсети первый и последний IP-адреса зарезервированы системой и не могут быть назначены виртуальным машинам. Например, для подсети 10.66.10.0/24 адреса 10.66.10.0 и 10.66.10.255 недоступны для использования ВМ.

Подсети блока .spec.settings.virtualMachineCIDRs не должны пересекаться с подсетями узлов кластера, подсетью сервисов или подсетью подов (podCIDR).

Запрещено удалять подсети, если адреса из них уже выданы виртуальным машинам.

Настройки классов хранения для образов

Настройки классов хранения для образов определяются в параметре .spec.settings.virtualImages настроек модуля.

Пример:

spec:
  #...
  settings:
    virtualImages:
      allowedStorageClassNames:
      - sc-1
      - sc-2
      defaultStorageClassName: sc-1

Здесь:

  • allowedStorageClassNames (опционально) — это список допустимых StorageClass для создания VirtualImage, которые можно явно указать в спецификации ресурса;
  • defaultStorageClassName (опционально) — это StorageClass, используемый по умолчанию при создании VirtualImage, если параметр .spec.persistentVolumeClaim.storageClassName не задан.

Настройки классов хранения для дисков

Настройки классов хранения для дисков определяются в параметре .spec.settings.virtualDisks настроек модуля.

Пример:

spec:
  #...
  settings:
    virtualDisks:
      allowedStorageClassNames:
      - sc-1
      - sc-2
      defaultStorageClassName: sc-1

Здесь:

  • allowedStorageClassNames (опционально) — это список допустимых StorageClass для создания VirtualDisk, которые можно явно указать в спецификации ресурса;
  • defaultStorageClassName (опционально) — это StorageClass, используемый по умолчанию при создании VirtualDisk, если параметр .spec.persistentVolumeClaim.storageClassName не задан.

Настройка аудита событий безопасности

Недоступно в Community Edition.

Для активации аудита событий безопасности:

  1. Включите модули [log-shipper](/modules/log-shipper/) и [runtime-audit-engine](/modules/runtime-audit-engine/).
  2. Включите аудит Kubernetes API, установив .spec.settings.apiserver.auditPolicyEnabled: true в модуле control-plane-manager.
  3. Установите .spec.settings.audit.enabled: true в модуле virtualization:

    spec:
      settings:
        audit:
          enabled: true
    

Полный перечень параметров конфигурации приведён в разделе «Настройки».

События собираются подом virtualization-audit-* в неймспейсе d8-virtualization. Чтобы перенаправить события в систему логирования кластера (например, Loki), создайте ClusterLoggingConfig:

apiVersion: deckhouse.io/v1alpha1
kind: ClusterLoggingConfig
metadata:
  name: virtualization-audit-logs
spec:
  destinationRefs:
    - d8-loki
  kubernetesPods:
    namespaceSelector:
      matchNames:
        - d8-virtualization
    labelSelector:
      matchLabels:
        app: virtualization-audit
  type: KubernetesPods

Для просмотра событий в Grafana используйте запрос к Loki:

{namespace="d8-virtualization", pod=~"virtualization-audit-.*"}

Доступные поля в логах:

  • type — тип события (Access to VM, VM Management и т.д.);
  • name — описание события;
  • request_subject — username или ServiceAccount;
  • datetime — время события;
  • virtualmachine_name — имя ВМ;
  • source_ip — IP-адрес источника (для запрещённых операций).

События безопасности

Система аудита фиксирует следующие события:

  • Доступ к ВМ — подключение через console, VNC или port forward. Включает имя ВМ, ОС, версии, хранилище и адрес узла.
  • Управление ВМ — создание, обновление, изменение или удаление ресурсов VirtualMachine.
  • Управление ВМ через операции — Start, Stop, Restart, Migrate или Evict через ресурс VirtualMachineOperation.
  • Проверка целостности — проверка SHA256 конфигурации ВМ. Логируется при изменении контрольной суммы.
  • Управление модулем — создание, обновление или удаление ModuleConfig.
  • Запрещённые операции — операции, заблокированные платформой. Включает пользователя, операцию, ресурс, IP-адрес и причину отказа.

Дополнительные ресурсы