community.general.kubevirt_vm – Управление виртуальными машинами KubeVirt
Примечание
Этот плагин входит в сборник community.general (версия 1.3.2).
Для его установки используйте: ansible-galaxy collection install community.general.
Чтобы использовать его в книге задач, укажите: community.general.kubevirt_vm.
Описание
- Используйте Openshift Python SDK для управления состоянием виртуальных машин KubeVirt.
Требования
Ниже перечислены требования к хосту, на котором будет выполняться этот модуль.
- openshift >= 0.8.2
- python >= 2.7
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| affinity словарь | Описывает правила планирования размещения узла для виртуальной машины. | ||
| hard словарь | Если требования по родству, указанные в этом поле, не выполнены во время планирования, виртуальная машина не будет размещена на узле. Если требования по родству, указанные в этом поле, перестанут выполняться в какой-либо момент во время выполнения виртуальной машины (например, из-за обновления метки виртуальной машины), система может или не может попытаться в конечном итоге изгнать виртуальную машину с её узла. При наличии нескольких элементов списки узлов, соответствующие каждому term, пересекаются, т.е. все условия должны быть выполнены. | ||
| soft словарь | Планировщик предпочтительно будет размещать виртуальные машины на узлах, удовлетворяющих выражениям родства, указанным в этом поле, но он может выбрать узел, нарушающий одно или несколько выражений. Узел, который предпочтительнее всего, — это узел с наибольшей суммой весов, т.е. для каждого узла, который удовлетворяет всем требованиям планирования (запрос ресурсов, выражения родства requiredDuringScheduling и т.д.), вычислить сумму, перебирая элементы этого поля и добавляя weight к сумме, если узел имеет виртуальные машины, которые соответствуют соответствующему term; узлы с наибольшей суммой являются наиболее предпочтительными. | ||
| anti_affinity словарь | Описывает правила планирования антиродства виртуальных машин, например, избегать размещения этой виртуальной машины на одном узле, в одной зоне и т.д. с другими виртуальными машинами. | ||
| hard словарь | Если требования по антиродству, указанные в этом поле, не выполнены во время планирования, виртуальная машина не будет размещена на узле. Если требования по антиродству, указанные в этом поле, перестанут выполняться в какой-либо момент во время выполнения виртуальной машины (например, из-за обновления метки виртуальной машины), система может или не может попытаться в конечном итоге изгнать виртуальную машину с её узла. При наличии нескольких элементов списки узлов, соответствующие каждому term, пересекаются, т.е. все условия должны быть выполнены. | ||
| soft словарь | Планировщик предпочтительно будет размещать виртуальные машины на узлах, удовлетворяющих выражениям антиродства, указанным в этом поле, но он может выбрать узел, нарушающий одно или несколько выражений. Узел, который предпочтительнее всего, — это узел с наибольшей суммой весов, т.е. для каждого узла, который удовлетворяет всем требованиям планирования (запрос ресурсов, выражения антиродства requiredDuringScheduling и т.д.), вычислить сумму, перебирая элементы этого поля и добавляя weight к сумме, если узел имеет виртуальные машины, которые соответствуют соответствующему term; узлы с наибольшей суммой являются наиболее предпочтительными. | ||
| api_key строка | Токен, используемый для аутентификации с API. Также можно указать через переменную окружения K8S_AUTH_API_KEY. | ||
| bootloader строка | Укажите загрузчик виртуальной машины. По умолчанию все виртуальные машины используют BIOS для загрузки. | ||
| ca_cert путь | Путь к сертификату CA, используемому для аутентификации с API. Для предотвращения ошибок проверки сертификатов необходимо предоставить полную цепочку сертификатов. Также можно указать через переменную окружения K8S_AUTH_SSL_CA_CERT. псевдонимы: ssl_ca_cert | ||
| client_cert путь | Путь к сертификату, используемому для аутентификации с API. Также можно указать через переменную окружения K8S_AUTH_CERT_FILE. псевдонимы: cert_file | ||
| client_key путь | Путь к файлу ключа, используемому для аутентификации с API. Также можно указать через переменную окружения K8S_AUTH_KEY_FILE. псевдонимы: key_file | ||
| cloud_init_nocloud словарь | Представляет источник данных пользователя NoCloud cloud-init. Данные NoCloud будут добавлены в качестве диска к виртуальной машине. Требуется надлежащая установка cloud-init внутри гостевой системы. Дополнительная информация https://kubevirt.io/api-reference/master/definitions.html#_v1_cloudinitnocloudsource
| ||
| context строка | Имя контекста, найденного в файле конфигурации. Также можно указать через переменную окружения K8S_AUTH_CONTEXT. | ||
| cpu_cores целое число | Количество ядер процессора. | ||
| cpu_features список / элементы=строка | Список словарей для настройки функций, предоставляемых выбранной моделью процессора.
Примечание: Атрибут политики можно либо опустить, либо задать одно из следующих значений: force, require, optional, disable, forbid.
Примечание: Если политика не указана для функции, она по умолчанию устанавливается как require. Дополнительная информация о политиках: https://libvirt.org/formatdomain.html#elementsCPU
| ||
| cpu_limit целое число | Преобразуется в значение миллиядер и умножается на 100. Результирующее значение — это общее количество времени использования процессора, которое может использовать контейнер каждые 100 мс. Виртуальная машина не может использовать больше времени процессора, чем её доля, в течение этого интервала. | ||
| cpu_model строка | Модель процессора. Список доступных моделей можно посмотреть здесь: https://github.com/libvirt/libvirt/blob/master/src/cpu_map/index.xml.
Примечание: Пользователь может определить модель процессора по умолчанию как default-cpu-model в kubevirt-config ConfigMap, если не задана, используется host-model.
Примечание: Убедитесь, что модель процессора узла, на котором вы запускаете виртуальную машину, имеет такой же или более высокий семейство процессоров.
Примечание: Если модель процессора не задана, у виртуальной машины будет модель процессора, наиболее близкая к той, что используется на узле, на котором запускается виртуальная машина. | ||
| cpu_shares целое число | Укажите долю процессора. | ||
| datavolumes список / элементы=строка | DataVolumes — это способ автоматизации импорта дисков виртуальных машин в pvcs во время потока запуска виртуальной машины. Без использования DataVolume пользователям необходимо подготовить pvc с образом диска перед назначением его виртуальной машине или манифесту VMI. С помощью DataVolume как создание pvc, так и импорт выполняются автоматически от имени пользователя. | ||
| disks список / элементы=строка | Список словарей, которые описывают диски виртуальной машины. Диск может быть доступен через четыре различных типа: disk, lun, cdrom, floppy. Все возможные параметры конфигурации доступны по адресу https://kubevirt.io/api-reference/master/definitions.html#_v1_disk
Каждый диск должен иметь указанный volume, который объявляет тип тома диска Все возможные параметры конфигурации тома доступны по адресу https://kubevirt.io/api-reference/master/definitions.html#_v1_volume. | ||
| ephemeral логическое значение |
| Если (истина), создаётся виртуальная машина с временными ресурсами. После уничтожения она больше не будет доступна. Работает только с state present и absent. | |
| force логическое значение |
| Если установлено no, и состояние равно present, существующий объект будет заменён. | |
| headless строка | Укажите, должна ли виртуальная машина иметь минимальную конфигурацию устройства видео и графики. По умолчанию для VirtualMachineInstance будет применена минимальная конфигурация устройства видео и графики. Устройство видео совместимо с vga и имеет размер памяти 16 МБ. | ||
| host строка | Укажите URL для доступа к API. Также можно указать через переменную окружения K8S_AUTH_HOST. | ||
| hostname строка | Указывает имя хоста виртуальной машины. Имя хоста будет установлено либо DHCP, либо cloud-init (если настроен), либо будет использовано имя виртуальной машины. | ||
| hugepage_size строка | Укажите размер больших страниц. | ||
| interfaces список / элементы=строка | Интерфейс определяет виртуальный сетевой интерфейс виртуальной машины (также называется фронтенд). Все возможные параметры конфигурации интерфейсов доступны по адресу https://kubevirt.io/api-reference/master/definitions.html#_v1_interface
Каждый интерфейс должен иметь указанный network, который объявляет, с каким логическим или физическим устройством он подключён (также называется бэкенд). Все возможные параметры конфигурации сети доступны по адресу https://kubevirt.io/api-reference/master/definitions.html#_v1_network. | ||
| kubeconfig путь | Путь к существующему файлу конфигурации Kubernetes. Если не указан, и другие параметры подключения не указаны, клиент openshift попытается загрузить файл конфигурации по умолчанию из ~/.kube/config.json. Также можно указать через переменную окружения K8S_AUTH_KUBECONFIG. | ||
| метки словарь | Метки — пары «ключ/значение», которые прикрепляются к виртуальным машинам. Метки предназначены для указания идентификационных атрибутов виртуальных машин, имеющих смысл и значение для пользователей, но не несут прямого семантического значения для основной системы. Метки могут использоваться для организации и выбора подмножеств виртуальных машин. Метки могут быть прикреплены к виртуальным машинам при их создании, а затем добавлены и изменены в любое время. Подробнее о метках, используемых для внутренней реализации https://kubevirt.io/user-guide/#/misc/annotations_and_labels
| ||
| тип_машины строка | Тип машины QEMU — фактическая микросхема виртуальной машины. | ||
| память строка | Объем памяти, запрашиваемый виртуальной машиной. Например, 1024Mi. | ||
| предел_памяти строка | Максимальный объем памяти, используемый виртуальной машиной. Например, 1024Mi. | ||
| тип_слияния список / элементы=строка |
| Определяет, следует ли переопределить стандартный подход к слиянию исправлений на определенный тип. Если указано более одного типа слияния, типы слияния будут пробоваться в указанном порядке. По умолчанию ['strategic-merge', 'merge'], что идеально подходит для использования одних и тех же параметров для типов ресурсов, которые объединяют пользовательские ресурсы и встроенные ресурсы, поскольку определения пользовательских ресурсов обычно не могут обновляться с помощью обычного стратегического слияния. | |
| имя строка / обязательно | Имя виртуальной машины. | ||
| пространство_имен строка / обязательно | Пространство имен, в котором существует виртуальная машина. | ||
| согласованность_узла словарь | Описывает правила планирования согласованности ВМ, например, размещение этой ВМ на том же узле, зоне и т. д., что и других ВМ. | ||
| жесткий словарь | Если требования согласованности, указанные в этом поле, не выполняются во время планирования, ВМ не будет запланирована на узел. Если требования согласованности, указанные в этом поле, перестают выполняться в какой-то момент во время выполнения ВМ (например, из-за обновления), система может или не может попытаться в конечном итоге исключить ВМ из узла. | ||
| мягкий словарь | Планировщик предпочтет планировать ВМ на узлах, которые удовлетворяют выражениям согласованности, указанным в этом поле, но может выбрать узел, нарушающий одно или несколько выражений. Предпочтительный узел — тот, у которого наибольшая сумма весов, т. е. для каждого узла, удовлетворяющего всем требованиям планирования (запрос ресурсов, выражения согласованности requiredDuringScheduling и т. д.), вычислите сумму, проходя по элементам этого поля и добавляя weight к сумме, если узел соответствует соответствующим match_expressions; узлы с наибольшей суммой являются наиболее предпочтительными. | ||
| пароль строка | Укажите пароль для аутентификации с API. Также можно указать через переменную среды K8S_AUTH_PASSWORD. Пожалуйста, ознакомьтесь с описанием параметра username для обсуждения случаев, когда этот параметр применим. | ||
| сохранить_конфигурацию логическое |
| Определяет, следует ли сохранять токены обновления конфигурации kube. Также можно указать через переменную среды K8S_AUTH_PERSIST_CONFIG. Когда контекст k8s использует учетные данные пользователя с токенами обновления (например, oidc или gke/gcloud auth), токен обновляется библиотекой Python-клиента k8s, но по умолчанию не сохраняется. В результате старый токен обновления может истечь, и следующая аутентификация может завершиться сбоем. Установка этого флага в значение true сообщит библиотеке Python-клиента k8s сохранить новый токен обновления в файл конфигурации kube. По умолчанию значение false. Обратите внимание, что текущая версия библиотеки Python-клиента k8s пока не поддерживает установку этого флага в значение True. Исправление для этой библиотеки Python-клиента k8s находится здесь: https://github.com/kubernetes-client/python-base/pull/169 | |
| прокси строка | URL HTTP-прокси, который необходимо использовать для подключения. Также можно указать через переменную среды K8S_AUTH_PROXY. Обратите внимание, что этот модуль не подхватывает типичные настройки прокси из среды (например, HTTP_PROXY). | ||
| определение_ресурса словарь | Частичное YAML-определение создаваемого/обновляемого объекта. Здесь можно определить параметры ресурса Kubernetes, которые не покрываются параметрами этого модуля. ПРИМЕЧАНИЕ: определение_ресурса имеет более низкий приоритет, чем параметры модуля. Если вы попытаетесь определить, например, metadata.namespace здесь, это значение будет проигнорировано, и вместо этого будет использовано пространство_имен. Псевдонимы: определение, встроенный | ||
| smbios_uuid строка | Для обеспечения согласованного представления виртуализированного оборудования для гостевой ОС можно установить SMBIOS UUID. | ||
| состояние строка |
| Установите виртуальную машину в присутствует, отсутствует, работает или остановлен.
присутствует — Создать или обновить виртуальную машину. (И запустить её, если она временная.)
отсутствует — Удалить виртуальную машину.
работает — Создать или обновить виртуальную машину и запустить её.
остановлен — Остановить виртуальную машину. (Это удаляет временные ВМ.) | |
| поддомен строка | Если указан, полное доменное имя виртуальной машины будет hostname.subdomain.namespace.svc.cluster_domain. Если не указан, у виртуальной машины не будет доменного имени вообще. Запись DNS будет разрешать виртуальную машину, независимо от того, может ли сама виртуальная машина получить имя хоста. | ||
| таблетки список / элементы=строка | Укажите таблетки, которые будут использоваться в качестве устройств ввода | ||
| шаблон строка | Имя шаблона, используемого при создании виртуальной машины. | ||
| параметры_шаблона словарь | Новые значения параметров из шаблона. | ||
| имя_пользователя строка | Укажите имя пользователя для аутентификации с API. Также можно указать через переменную среды K8S_AUTH_USERNAME. Обратите внимание, что это работает только с кластерами, настроенными на использование аутентификации HTTP Basic. Если ваш кластер имеет другой тип аутентификации (например, OAuth2 в OpenShift), этот параметр не будет работать должным образом, и вам следует изучить модуль k8s_auth, поскольку он может сделать то, что вам нужно. | ||
| проверять_сертификаты логическое |
| Определяет, следует ли проверять SSL-сертификаты сервера API. Также можно указать через переменную среды K8S_AUTH_VERIFY_SSL. Псевдонимы: проверять_ssl | |
| ждать логическое |
|
True, если модуль должен ждать, пока ресурс не перейдет в желаемое состояние. | |
| ждать_пауза строка добавлен в 0.2.0 community.general | По умолчанию: 5 | Количество секунд ожидания между проверками. | |
| ждать_таймаут целое | По умолчанию: 120 | Количество секунд, в течение которого модуль должен ожидать, пока ресурс не перейдет в желаемое состояние. | |
Примечания
Примечание
- Клиент Python OpenShift оборачивает клиент Python K8s, предоставляя полный доступ ко всем API и моделям, доступным на обеих платформах. Сведения о версиях API и дополнительную информацию см. на https://github.com/openshift/openshift-restclient-python
- Чтобы избежать ошибок проверки SSL-сертификатов, когда
validate_certsимеет значение True, полная цепочка сертификатов для сервера API должна быть предоставлена черезca_certили в файле kubeconfig. - Для использования этого модуля необходимо установить OpenShift Python SDK. Чтобы убедиться, что он установлен с правильной версией, можно создать следующую задачу: pip: name=openshift>=0.8.2
Примеры
- name: Start virtual machine 'myvm'
community.general.kubevirt_vm:
state: running
name: myvm
namespace: vms
- name: Create virtual machine 'myvm' and start it
community.general.kubevirt_vm:
state: running
name: myvm
namespace: vms
memory: 64Mi
cpu_cores: 1
bootloader: efi
smbios_uuid: 5d307ca9-b3ef-428c-8861-06e72d69f223
cpu_model: Conroe
headless: true
hugepage_size: 2Mi
tablets:
- bus: virtio
name: tablet1
cpu_limit: 3
cpu_shares: 2
disks:
- name: containerdisk
volume:
containerDisk:
image: kubevirt/cirros-container-disk-demo:latest
path: /custom-disk/cirros.img
disk:
bus: virtio
- name: Create virtual machine 'myvm' with multus network interface
community.general.kubevirt_vm:
name: myvm
namespace: vms
memory: 512M
interfaces:
- name: default
bridge: {}
network:
pod: {}
- name: mynet
bridge: {}
network:
multus:
networkName: mynetconf
- name: Combine inline definition with Ansible parameters
community.general.kubevirt_vm:
# Kubernetes specification:
definition:
metadata:
labels:
app: galaxy
service: web
origin: vmware
# Ansible parameters:
state: running
name: myvm
namespace: vms
memory: 64M
disks:
- name: containerdisk
volume:
containerDisk:
image: kubevirt/cirros-container-disk-demo:latest
path: /custom-disk/cirros.img
disk:
bus: virtio
- name: Start ephemeral virtual machine 'myvm' and wait to be running
community.general.kubevirt_vm:
ephemeral: true
state: running
wait: true
wait_timeout: 180
name: myvm
namespace: vms
memory: 64M
labels:
kubevirt.io/vm: myvm
disks:
- name: containerdisk
volume:
containerDisk:
image: kubevirt/cirros-container-disk-demo:latest
path: /custom-disk/cirros.img
disk:
bus: virtio
- name: Start fedora vm with cloud init
community.general.kubevirt_vm:
state: running
wait: true
name: myvm
namespace: vms
memory: 1024M
cloud_init_nocloud:
userData: |-
#cloud-config
password: fedora
chpasswd: { expire: False }
disks:
- name: containerdisk
volume:
containerDisk:
image: kubevirt/fedora-cloud-container-disk-demo:latest
path: /disk/fedora.qcow2
disk:
bus: virtio
node_affinity:
soft:
- weight: 1
term:
match_expressions:
- key: security
operator: In
values:
- S2
- name: Create virtual machine with datavolume and specify node affinity
community.general.kubevirt_vm:
name: myvm
namespace: default
memory: 1024Mi
datavolumes:
- name: mydv
source:
http:
url: https://url/disk.qcow2
pvc:
accessModes:
- ReadWriteOnce
storage: 5Gi
node_affinity:
hard:
- term:
match_expressions:
- key: security
operator: In
values:
- S1
- name: Remove virtual machine 'myvm'
community.general.kubevirt_vm:
state: absent
name: myvm
namespace: vms
Значения возврата
Общие значения возврата документированы здесь, следующие поля уникальны для этого модуля:
| Ключ | Возвращенное | Описание |
|---|---|---|
| kubevirt_vm сложный | успех | Спецификация словаря виртуальной машины, возвращенная API. Этот словарь содержит все значения, возвращаемые API KubeVirt, все параметры описаны здесь https://kubevirt.io/api-reference/master/definitions.html#_v1_virtualmachine
|
Авторы
- Команда KubeVirt (@kubevirt)
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/collections/community/general/kubevirt_vm_module.html