kubevirt-modules

Модули Ansible KubeVirt

Модули Ansible KubeVirt позволяют автоматизировать управление следующими типами объектов кластера Kubernetes:

  • Виртуальные машины (также шаблоны ВМ и параметры ВМ),
  • Реплики ВМ,
  • И Запросы на постоянные объемы (включая функциональность Containerized Data Importer).

С момента выпуска Ansible 2.8, модули, плагин инвентаря и соответствующие юнит-тесты являются частью основного репозитория git Ansible, тогда как этот репозиторий содержит только интеграционные тесты и примерные плейбуки.

Оглавление

Быстрый старт

Для быстрого введения, пожалуйста, ознакомьтесь со следующими записями в блоге kubevirt.io:

Требования

Исходный код

Тестирование

Существуют две группы тестов, которые можно найти здесь:

Чтобы выполнить полный набор тестов для указанной цели, пожалуйста, используйте соответствующий плейбук all.yml.

Автоматическое тестирование

Юнит-тесты

Основной репозиторий ansible содержит юнит-тесты для модулей kubevirt.

Интеграционные тесты

Тесты модулей (tests/playbooks/all.yml) выполняются против действительных кластеров с установленными KubeVirt и CDI, на базе:

  • TravisCI (ubuntu vms, поддерживающие только minikube; без поддержки ускорения kvm для VMs KubeVirt)
  • Jenkins oVirt (физические серверы, на которых работает любой кластер, поддерживаемый kubevirtci)

Тесты модулей выполняются с использованием:

  • последней вышедшей версии ansible (любую версию можно получить с помощью pip install ansible)
  • стабильных веток ansible
  • ветки разработки ansible

Тесты ролей (tests/roles/all.yml) выполняются только на TravisCI, используя ветку разработки.

Чтобы выявить регрессии на ранней стадии, Travis запускает все тесты каждые 24 часа против свежего клона ansible.git и отправляет электронное письмо разработчикам модуля kubevirt в случае неудачи тестов.

Ручное тестирование

  1. Склонируйте этот репозиторий на машину, где вы можете выполнить oc login в ваш кластер:

    $ git clone https://github.com/kubevirt/ansible-kubevirt-modules.git
    $ cd ./ansible-kubevirt-modules
    
  2. (По желанию) Настройте виртуальную среду для изоляции зависимостей:

    $ python3 -m venv env
    $ source env/bin/activate
    
  3. Установите зависимости:

    $ pip install openshift
    

    Если вы пропустили предыдущий шаг, возможно, вам потребуется добавить sudo перед этой командой.

  4. Установите ansible (одним из многочисленных способов):

  5. Запустите тесты:

    $ ansible-playbook tests/playbooks/all.yml
    

    Примечание: Примеры плейбуков включают настройку cloud-init для доступа к созданным VMI.

    1. Для использования SSH выполните следующие шаги:

      $ kubectl get all
      NAME                             READY     STATUS    RESTARTS   AGE
      po/virt-launcher-bbecker-jw5kk   1/1       Running   0          22m
      
      $ kubectl expose pod virt-launcher-bbecker-jw5kk --port=27017 --target-port=22 --name=vmservice
      $ kubectl get svc vmservice
      NAME        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
      vmservice   ClusterIP   172.30.133.9   <none>        27017/TCP   19m
      
      $ ssh -i tests/test_rsa -p 27017 [email protected]
      

      VM может занять некоторое время для загрузки перед тем, как SSH станет доступным.

    2. Для использования virtctl:

      $ virtctl console <vmi_name>
      

      Или

      $ virtctl vnc <vmi_name>
      

      Используйте имя пользователя kubevirt и пароль kubevirt.

  6. (По желанию) Выйдите из виртуальной среды и удалите её:

    $ deactivate
    $ rm -rf env/
    

Примечания по модулю kubevirt_cdi_upload

Чтобы загрузить изображение с локального компьютера с помощью модуля kubevirt_cdi_upload, ваша система должна иметь возможность подключаться к cdi upload proxy pod. Это можно сделать, либо:

  1. Открыть cdi-uploadproxy Service из пространства имен cdi, или

  2. Использовать kubectl port-forward, чтобы настроить временное переадресацию портов через API-сервер Kubernetes: kubectl port-forward -n cdi service/cdi-uploadproxy 9443:443

Примечания по модулю k8s_facts

Следующая команда соберет факты о существующих ВМ (если они есть) и выведет JSON-документ на основе KubeVirt VM spec:

$ ansible-playbook examples/playbooks/k8s_facts_vm.yml

Примечания по инвентарному плагину KubeVirt

Инвентарные плагины позволяют пользователям указывать источники данных для компиляции инвентаря хостов, которые Ansible использует для целевых задач, либо через параметры командной строки -i /path/to/file и/или -i 'host1, host2', либо из других конфигурационных источников.

Включение инвентарного плагина KubeVirt

Чтобы включить плагин KubeVirt, добавьте следующий раздел в файл tests/ansible.cfg:

[inventory]
enable_plugins = kubevirt

Настройка инвентарного плагина KubeVirt

Определите конфигурацию плагина в tests/playbooks/plugin/kubevirt.yaml следующим образом:

plugin: kubevirt
connections:
  - namespaces:
      - default
    interface_name: default

В этом примере плагин KubeVirt будет перечислять все VMI из пространства имен default и использовать имя интерфейса default.

Использование инвентарного плагина KubeVirt

Чтобы использовать плагин в плейбуке, выполните:

$ ansible-playbook -i kubevirt.yaml <playbook>

Примечание: Инвентарный плагин KubeVirt предназначен для работы с Multus. Его можно использовать только для VMI, которые подключены к мосту и отображают IP-адрес в поле Статус. Для VMI, доступных через сервисы Kubernetes, используйте модуль ansible для k8s.

Установить
ansible-galaxy install kubevirt/ansible-kubevirt-modules
Лицензия
apache-2.0
Загрузки
75
Владелец
Managing virtualization workloads on Kubernetes