kubevirt-modules
Модули Ansible KubeVirt
Модули Ansible KubeVirt позволяют автоматизировать управление следующими типами объектов кластера Kubernetes:
- Виртуальные машины (также шаблоны ВМ и параметры ВМ),
- Реплики ВМ,
- И Запросы на постоянные объемы (включая функциональность Containerized Data Importer).
С момента выпуска Ansible 2.8, модули, плагин инвентаря и соответствующие юнит-тесты являются частью основного репозитория git Ansible, тогда как этот репозиторий содержит только интеграционные тесты и примерные плейбуки.
Оглавление
Быстрый старт
Для быстрого введения, пожалуйста, ознакомьтесь со следующими записями в блоге kubevirt.io:
Требования
- Ansible >= 2.8
pip3 --user install ansible
- openshift-restclient-python >= 0.8.2
pip3 --user install openshift
Исходный код
Тестирование
Существуют две группы тестов, которые можно найти здесь:
- тесты модулей в tests/playbooks
- тесты ролей в tests/roles
Чтобы выполнить полный набор тестов для указанной цели, пожалуйста, используйте соответствующий плейбук 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 в случае неудачи тестов.
Ручное тестирование
Склонируйте этот репозиторий на машину, где вы можете выполнить
oc login
в ваш кластер:$ git clone https://github.com/kubevirt/ansible-kubevirt-modules.git $ cd ./ansible-kubevirt-modules
(По желанию) Настройте виртуальную среду для изоляции зависимостей:
$ python3 -m venv env $ source env/bin/activate
Установите зависимости:
$ pip install openshift
Если вы пропустили предыдущий шаг, возможно, вам потребуется добавить
sudo
перед этой командой.Установите ansible (одним из многочисленных способов):
Установите последнюю выпущенную версию:
$ pip install ansible
Опять же, здесь может потребоваться
sudo
.Соберите RPM из ветки разработки:
$ git clone https://github.com/ansible/ansible.git $ cd ./ansible $ make rpm $ sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm
Запустите тесты:
$ ansible-playbook tests/playbooks/all.yml
Примечание: Примеры плейбуков включают настройку cloud-init для доступа к созданным VMI.
Для использования 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 станет доступным.
Для использования
virtctl
:$ virtctl console <vmi_name>
Или
$ virtctl vnc <vmi_name>
Используйте имя пользователя
kubevirt
и парольkubevirt
.
(По желанию) Выйдите из виртуальной среды и удалите её:
$ deactivate $ rm -rf env/
Примечания по модулю kubevirt_cdi_upload
Чтобы загрузить изображение с локального компьютера с помощью модуля kubevirt_cdi_upload
, ваша система должна иметь возможность подключаться к cdi upload proxy pod. Это можно сделать, либо:
Открыть
cdi-uploadproxy
Service из пространства именcdi
, илиИспользовать
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