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

Quellcode

Testing

Es gibt zwei Testziele, die hier gefunden werden können:

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

  1. 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
    
  2. (Optional) Konfigurieren Sie eine virtuelle Umgebung, um Abhängigkeiten zu isolieren:

    $ python3 -m venv env
    $ source env/bin/activate
    
  3. 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.

  4. 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
      
    • Überprüfen Sie PRs lokal

  5. 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.

    1. 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.

    2. Für die Verwendung von virtctl:

      $ virtctl console <vmi_name>
      

      Oder

      $ virtctl vnc <vmi_name>
      

      Verwenden Sie den Benutzernamen kubevirt und das Passwort kubevirt.

  6. (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:

  1. Exponieren des cdi-uploadproxy Dienstes aus dem cdi Namespace, oder

  2. Verwenden 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.

Installieren
ansible-galaxy install kubevirt.kubevirt-modules
Lizenz
apache-2.0
Downloads
86
Besitzer
Managing virtualization workloads on Kubernetes