kubevirt.kubevirt-modules
Ansible KubeVirt Module
Die Ansible KubeVirt-Module ermöglichen die Automatisierung der Verwaltung folgender Kubernetes-Cluster-Objektarten:
- Virtuelle Maschinen (auch VM-Vorlagen und VM-Einstellungen),
- VM-Replikatsätze,
- und Persistente Volumenansprüche (einschließlich der Funktionalität des Containerisierten Datenimporters).
Seit der Veröffentlichung von Ansible 2.8 sind die Module, das Inventar-Plugin und relevante Unit-Tests Teil des upstream Ansible Git-Repositories, während dieses Repository nur die Integrationstests und Beispiel-Playbooks enthält.
Inhaltsverzeichnis
Schnellstart
Für eine schnelle Einführung siehe die folgenden kubevirt.io Blog-Beiträge:
Anforderungen
- Ansible >= 2.8
pip3 --user install ansible
- openshift-restclient-python >= 0.8.2
pip3 --user install openshift
Quellcode
Testing
Es gibt zwei Testziele, die hier gefunden werden können:
- Modultests in tests/playbooks
- Rollentests in tests/roles
Um eine vollständige Testreihe für ein bestimmtes Ziel auszuführen, verwenden Sie bitte das entsprechende all.yml
-Playbook.
Automatisierte Tests
Unit-Tests
Das Upstream Ansible-Repository enthält Unit-Tests, die die KubeVirt-Module abdecken.
Integrationstests
Modultests (tests/playbooks/all.yml) werden gegen tatsächliche Cluster mit sowohl KubeVirt als auch CDI durchgeführt, auf:
- TravisCI (Ubuntu VMs, die nur Minikube unterstützen; keine KVM-Beschleunigung für KubeVirt-VMs)
- oVirt Jenkins (physische Server, die jeden Cluster unterstützen, den kubevirtci unterstützt)
Modultests werden unter Verwendung von:
- der neuesten veröffentlichten Ansible-Version (was auch immer mit
pip install ansible
installiert wird) - den stabilen Ansible-Zweig(en)
- dem Ansible-Entwicklungszweig
Rollentests (tests/roles/all.yml) werden nur auf TravisCI unter Verwendung des Entwicklungszweigs ausgeführt.
Um Regressionen frühzeitig zu erkennen, führt Travis alle 24 Stunden alle Tests gegen einen frischen Klon von ansible.git aus und sendet eine E-Mail an die Entwickler der KubeVirt-Module, falls Tests fehlschlagen.
Manuelle Tests
Klonen Sie dieses Repository auf eine Maschine, auf der Sie sich mit
oc login
zu Ihrem Cluster anmelden können:$ git clone https://github.com/kubevirt/ansible-kubevirt-modules.git $ cd ./ansible-kubevirt-modules
(Optional) Konfigurieren Sie eine virtuelle Umgebung, um Abhängigkeiten zu isolieren:
$ python3 -m venv env $ source env/bin/activate
Installieren Sie die Abhängigkeiten:
$ pip install openshift
Wenn Sie den vorherigen Schritt übersprungen haben, müssen Sie möglicherweise diesen Befehl mit
sudo
voranstellen.Installieren Sie Ansible (auf eine der vielen Weisen):
Installieren Sie die aktuellste veröffentlichte Version:
$ pip install ansible
Auch hier könnte
sudo
erforderlich sein.Erstellen Sie ein RPM aus dem Entwicklungszweig:
$ git clone https://github.com/ansible/ansible.git $ cd ./ansible $ make rpm $ sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm
Führen Sie die Tests aus:
$ ansible-playbook tests/playbooks/all.yml
Hinweis: Die Beispiele im Playbook enthalten die cloud-init Konfiguration, um auf die erstellten VMIs zugreifen zu können.
Für die Verwendung von SSH verfahren Sie wie folgt:
$ 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]
Es kann einige Zeit dauern, bis die VM hochgefahren ist, bevor SSH verwendet werden kann.
Für die Verwendung von
virtctl
:$ virtctl console <vmi_name>
Oder
$ virtctl vnc <vmi_name>
Verwenden Sie den Benutzernamen
kubevirt
und das Passwortkubevirt
.
(Optional) Verlassen Sie die virtuelle Umgebung und entfernen Sie sie:
$ deactivate $ rm -rf env/
Hinweise zum kubevirt_cdi_upload
Modul
Um ein Bild vom localhost mit dem kubevirt_cdi_upload
Modul hochzuladen, muss Ihr System in der Lage sein, eine Verbindung zum CDI-Upload-Proxy-Pod herzustellen. Dies kann erreicht werden durch:
Exponieren des
cdi-uploadproxy
Dienstes aus demcdi
Namespace, oderVerwenden von
kubectl port-forward
, um eine temporäre Portweiterleitung über den Kubernetes API-Server einzurichten:kubectl port-forward -n cdi service/cdi-uploadproxy 9443:443
Hinweise zum k8s_facts
Modul
Der folgende Befehl sammelt Informationen über die vorhandenen VMs, falls vorhanden, und gibt ein JSON-Dokument basierend auf der KubeVirt VM-Spezifikation aus:
$ ansible-playbook examples/playbooks/k8s_facts_vm.yml
Hinweise zum KubeVirt Inventar-Plugin
Inventar-Plugins ermöglichen es Benutzern, auf Datenquellen zuzugreifen, um das Inventar der Hosts zu erstellen, die Ansible zur Zielverfolgung von Aufgaben verwendet, entweder über die -i /pfad/zum/datei
und/oder -i 'host1, host2'
Kommandozeilenparameter oder aus anderen Konfigurationsquellen.
Aktivierung des KubeVirt Inventar-Plugins
Um das KubeVirt-Plugin zu aktivieren, fügen Sie den folgenden Abschnitt in die Datei tests/ansible.cfg
ein:
[inventory]
enable_plugins = kubevirt
Konfiguration des KubeVirt Inventar-Plugins
Definieren Sie die Plugin-Konfiguration in tests/playbooks/plugin/kubevirt.yaml
wie folgt:
plugin: kubevirt
connections:
- namespaces:
- default
interface_name: default
In diesem Beispiel listet das KubeVirt-Plugin alle VMIs aus dem default
Namespace auf und verwendet den Namen default
für die Schnittstelle.
Verwendung des KubeVirt Inventar-Plugins
Um das Plugin in einem Playbook zu verwenden, führen Sie Folgendes aus:
$ ansible-playbook -i kubevirt.yaml <playbook>
Hinweis: Das KubeVirt-Inventar-Plugin ist dafür ausgelegt, mit Multus zu arbeiten. Es kann nur für VMIs verwendet werden, die mit dem Bridge verbunden sind und die IP-Adresse im Statusfeld anzeigen. Für VMIs, die von Kubernetes-Diensten exponiert werden, verwenden Sie bitte das k8s Ansible-Modul.
ansible-galaxy install kubevirt.kubevirt-modules