kubevirt.kubevirt-modules
Módulos de Ansible KubeVirt
Los módulos de Ansible KubeVirt permiten automatizar la gestión de los siguientes tipos de objetos de clúster de Kubernetes:
- Máquinas Virtuales (también plantillas y configuraciones de VM),
- Conjuntos de Réplicas de VM,
- y Reclamaciones de Volumen Persistente (incluyendo la funcionalidad de Extractor de Datos en Contenedores).
Desde el lanzamiento de Ansible 2.8, los módulos, el plugin de inventario y las pruebas unitarias relevantes son parte del repositorio git de Ansible upstream, mientras que este repositorio contiene solo las pruebas de integración y ejemplos de playbooks.
Contenido
Introducción rápida
Para una rápida introducción, consulte las siguientes publicaciones del blog en kubevirt.io:
Requisitos
- Ansible >= 2.8
pip3 --user install ansible
- openshift-restclient-python >= 0.8.2
pip3 --user install openshift
Código fuente
Pruebas
Hay dos tipos de pruebas que se pueden encontrar aquí:
- pruebas de módulos en tests/playbooks
- pruebas de roles en tests/roles
Para ejecutar un conjunto completo de pruebas para un objetivo determinado, utilice el playbook all.yml
correspondiente.
Pruebas automáticas
Pruebas unitarias
El repositorio upstream de Ansible contiene pruebas unitarias que cubren los módulos de kubevirt.
Pruebas de integración
Las pruebas de módulos (tests/playbooks/all.yml) se ejecutan contra clústeres reales con KubeVirt y CDI desplegados, sobre:
- TravisCI (VMs de ubuntu que solo admiten minikube; sin aceleración kvm para VMs KubeVirt)
- oVirt Jenkins (servidores físicos que ejecutan cualquier clúster que admita kubevirtci)
Las pruebas de módulos se ejecutan usando:
- la última versión de Ansible lanzada (cualquier versión que se obtenga con
pip install ansible
) - ramas estables de Ansible
- rama de desarrollo de Ansible
Las pruebas de roles (tests/roles/all.yml) solo se ejecutan en TravisCI utilizando la rama de desarrollo.
Para detectar regresiones rápidamente, Travis ejecuta todas las pruebas cada 24 horas contra una nueva clonación de ansible.git y envía correos electrónicos a los desarrolladores del módulo kubevirt si las pruebas fallan.
Pruebas manuales
Clona este repositorio en una máquina donde puedas hacer
oc login
en tu clúster:$ git clone https://github.com/kubevirt/ansible-kubevirt-modules.git $ cd ./ansible-kubevirt-modules
(Opcional) Configura un entorno virtual para aislar dependencias:
$ python3 -m venv env $ source env/bin/activate
Instala las dependencias:
$ pip install openshift
Si omitiste el paso anterior, es posible que debas anteponer el comando con
sudo
.Instala Ansible (de una de las muchas maneras):
Instalar la última versión lanzada:
$ pip install ansible
Nuevamente, aquí puede ser necesario
sudo
.Compilar RPM desde la rama de desarrollo:
$ git clone https://github.com/ansible/ansible.git $ cd ./ansible $ make rpm $ sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm
Ejecuta las pruebas:
$ ansible-playbook tests/playbooks/all.yml
Nota: Los ejemplos de playbook incluyen configuración de cloud-init para poder acceder a las VMI creadas.
Para usar SSH, haz lo siguiente:
$ 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]
Puede tomar un tiempo para que la VM se inicie antes de que se pueda usar SSH.
Para usar
virtctl
:$ virtctl console <vmi_name>
O
$ virtctl vnc <vmi_name>
Usa el nombre de usuario
kubevirt
y la contraseñakubevirt
.
(Opcional) Sal del entorno virtual y elimínalo:
$ deactivate $ rm -rf env/
Notas sobre el módulo kubevirt_cdi_upload
Para subir una imagen desde localhost usando el módulo kubevirt_cdi_upload
, tu sistema necesita poder conectarse al pod proxy de carga de cdi. Esto se puede lograr ya sea:
Exponiendo el Servicio
cdi-uploadproxy
del namespacecdi
, oUsando
kubectl port-forward
para establecer un reenvío de puerto temporal a través del servidor API de Kubernetes:kubectl port-forward -n cdi service/cdi-uploadproxy 9443:443
Notas sobre el módulo k8s_facts
El siguiente comando recopilará hechos sobre la(s) VM(s) existentes, si las hay, y imprimirá un documento JSON basado en la especificación de VM de KubeVirt:
$ ansible-playbook examples/playbooks/k8s_facts_vm.yml
Notas sobre el plugin de inventario KubeVirt
Los plugins de inventario permiten a los usuarios apuntar a fuentes de datos para compilar el inventario de hosts que Ansible utiliza para dirigir tareas, ya sea a través de los parámetros de línea de comandos -i /path/to/file
y/o -i 'host1, host2'
o de otras fuentes de configuración.
Habilitar el plugin de inventario KubeVirt
Para habilitar el plugin KubeVirt, agrega la siguiente sección en el archivo tests/ansible.cfg
:
[inventory]
enable_plugins = kubevirt
Configurar el plugin de inventario KubeVirt
Define la configuración del plugin en tests/playbooks/plugin/kubevirt.yaml
de la siguiente manera:
plugin: kubevirt
connections:
- namespaces:
- default
interface_name: default
En este ejemplo, el plugin KubeVirt enumerará todas las VMI del namespace default
y utilizará el nombre de interfaz default
.
Usar el plugin de inventario KubeVirt
Para usar el plugin en un playbook, ejecuta:
$ ansible-playbook -i kubevirt.yaml <playbook>
Nota: El plugin de inventario KubeVirt está diseñado para trabajar con Multus. Solo se puede usar para VMI, que están conectadas al puente y muestran la dirección IP en el campo Estado. Para VMI expuestas por servicios de Kubernetes, utiliza el módulo k8s de Ansible.
ansible-galaxy install kubevirt.kubevirt-modules