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
- Ansible >= 2.8
pip3 --user install ansible
- openshift-restclient-python >= 0.8.2
pip3 --user install openshift
Code Source
Tests
Il existe deux types de tests que vous pouvez trouver ici :
- tests de modules dans tests/playbooks
- tests de rôles dans tests/roles
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
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
(Facultatif) Configurez un environnement virtuel pour isoler les dépendances :
$ python3 -m venv env $ source env/bin/activate
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.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
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.
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é.
Pour utiliser
virtctl
:$ virtctl console <vmi_name>
Ou
$ virtctl vnc <vmi_name>
Utilisez le nom d'utilisateur
kubevirt
et le mot de passekubevirt
.
(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 :
Exposant le service
cdi-uploadproxy
depuis l'espace de nomscdi
, ouUtilisant
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.
ansible-galaxy install kubevirt.kubevirt-modules