kubevirt.kubevirt-modules

Modules KubeVirt d'Ansible

Les modules KubeVirt d'Ansible permettent d'automatiser la gestion des types d'objets suivants dans un cluster Kubernetes :

  • Machines Virtuelles (y compris les modèles de VM et les presets de VM),
  • Ensembles de Réplica de VM,
  • et Requêtes de Volume Persistant (y compris la fonctionnalité de Containerized Data Importer).

Depuis la sortie d'Ansible 2.8, les modules, le plugin d'inventaire et les tests unitaires pertinents font partie du répertoire git upstream d'Ansible, tandis que ce dépôt contient uniquement les tests d'intégration et des exemples de playbooks.

Table des Matières

Démarrage Rapide

Pour une introduction rapide, veuillez consulter les articles de blog sur kubevirt.io :

Pré-requis

Code Source

Tests

Il existe deux types de tests que vous pouvez trouver ici :

Pour exécuter la totalité des tests pour un cible donné, veuillez utiliser le playbook all.yml approprié.

Tests Automatiques

Tests Unitaires

Le dépôt ansible upstream contient des tests unitaires couvrant les modules kubevirt.

Tests d'Intégration

Les tests de module (tests/playbooks/all.yml) sont exécutés contre des clusters réels avec KubeVirt et CDI déployés, sur :

  • TravisCI (VMs Ubuntu ne supportant que minikube ; pas d'accélération kvm pour les VMs KubeVirt)
  • Jenkins oVirt (serveurs physiques prenant en charge tout cluster que kubevirtci supporte)

Les tests de module sont exécutés en utilisant :

  • la dernière version d’Ansible publiée (ce que l'on obtient avec pip install ansible)
  • des branches stables d’Ansible
  • une branche de développement d’Ansible

Les tests de rôle (tests/roles/all.yml) ne sont exécutés que sur TravisCI en utilisant la branche de développement.

Pour détecter les régressions rapidement, Travis exécute tous les tests tous les 24 heures contre un clone frais d'ansible.git et envoie un email aux développeurs de modules kubevirt si des tests échouent.

Tests Manuels

  1. Clonez ce dépôt sur une machine où vous pouvez vous connecter à votre cluster avec oc login :

    $ git clone https://github.com/kubevirt/ansible-kubevirt-modules.git
    $ cd ./ansible-kubevirt-modules
    
  2. (Facultatif) Configurez un environnement virtuel pour isoler les dépendances :

    $ python3 -m venv env
    $ source env/bin/activate
    
  3. Installez les dépendances :

    $ pip install openshift
    

    Si vous avez sauté l'étape précédente, il se peut que vous deviez ajouter sudo à cette commande.

  4. Installez ansible (de plusieurs manières) :

    • Installez la dernière version publiée :

      $ pip install ansible
      

      Encore une fois, sudo pourrait être nécessaire ici.

    • Construisez un RPM à partir de la branche de développement :

      $ git clone https://github.com/ansible/ansible.git
      $ cd ./ansible
      $ make rpm
      $ sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm
      
    • Consultez les PR localement

  5. Exécutez les tests :

    $ ansible-playbook tests/playbooks/all.yml
    

    Remarque : Les exemples de playbooks incluent la configuration de cloud-init pour pouvoir accéder aux VMIs créés.

    1. Pour utiliser SSH, procédez comme suit :

      $ 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]
      

      Il peut falloir un certain temps pour que la VM démarre avant que SSH puisse être utilisé.

    2. Pour utiliser virtctl :

      $ virtctl console <vmi_name>
      

      Ou

      $ virtctl vnc <vmi_name>
      

      Utilisez le nom d'utilisateur kubevirt et le mot de passe kubevirt.

  6. (Facultatif) Quittez l'environnement virtuel et supprimez-le :

    $ deactivate
    $ rm -rf env/
    

Remarques sur le module kubevirt_cdi_upload

Pour télécharger une image depuis localhost en utilisant le module kubevirt_cdi_upload, votre système doit être capable de se connecter au pod de proxy de téléchargement cdi. Cela peut être réalisé en :

  1. Exposant le service cdi-uploadproxy depuis l'espace de noms cdi, ou

  2. Utilisant kubectl port-forward pour établir un transfert de port temporaire via le serveur API Kubernetes : kubectl port-forward -n cdi service/cdi-uploadproxy 9443:443

Remarques sur le module k8s_facts

La commande suivante collectera des informations sur les VM existantes, s'il y en a, et imprimera un document JSON basé sur la spec de VM KubeVirt:

$ ansible-playbook examples/playbooks/k8s_facts_vm.yml

Remarques sur le plugin d'inventaire KubeVirt

Les plugins d'inventaire permettent aux utilisateurs de pointer vers des sources de données pour compiler l'inventaire des hôtes que Ansible utilise pour cibler des tâches, soit via les paramètres de ligne de commande -i /path/to/file et/ou -i 'host1, host2', soit à partir d'autres sources de configuration.

Activation du plugin d'inventaire KubeVirt

Pour activer le plugin KubeVirt, ajoutez la section suivante dans le fichier tests/ansible.cfg :

[inventory]
enable_plugins = kubevirt

Configuration du plugin d'inventaire KubeVirt

Définissez la configuration du plugin dans tests/playbooks/plugin/kubevirt.yaml comme suit :

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

Dans cet exemple, le plugin KubeVirt listera tous les VMI depuis l'espace de noms default et utilisera le nom d'interface default.

Utilisation du plugin d'inventaire KubeVirt

Pour utiliser le plugin dans un playbook, exécutez :

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

Remarque : Le plugin d'inventaire KubeVirt est conçu pour fonctionner avec Multus. Il ne peut être utilisé que pour les VMI, qui sont connectés au pont et affichent l'adresse IP dans le champ Statut. Pour les VMI exposés par des services Kubernetes, veuillez utiliser le module Ansible k8s.

Installer
ansible-galaxy install kubevirt.kubevirt-modules
Licence
apache-2.0
Téléchargements
86
Propriétaire
Managing virtualization workloads on Kubernetes