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

Código fuente

Pruebas

Hay dos tipos de pruebas que se pueden encontrar aquí:

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

  1. 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
    
  2. (Opcional) Configura un entorno virtual para aislar dependencias:

    $ python3 -m venv env
    $ source env/bin/activate
    
  3. Instala las dependencias:

    $ pip install openshift
    

    Si omitiste el paso anterior, es posible que debas anteponer el comando con sudo.

  4. 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
      
    • Revisar PRs localmente

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

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

    2. Para usar virtctl:

      $ virtctl console <vmi_name>
      

      O

      $ virtctl vnc <vmi_name>
      

      Usa el nombre de usuario kubevirt y la contraseña kubevirt.

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

  1. Exponiendo el Servicio cdi-uploadproxy del namespace cdi, o

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

Instalar
ansible-galaxy install kubevirt.kubevirt-modules
Licencia
apache-2.0
Descargas
86
Propietario
Managing virtualization workloads on Kubernetes