documentation.suse.com / Documentación de SUSE Edge / Componentes / Edge Virtualization

21 Edge Virtualization

En esta sección se describe cómo se puede utilizar Edge Virtualization para ejecutar máquinas virtuales en los nodos periféricos. Edge Virtualization se hadiseñado para casos de uso de virtualización ligeros, en los que se espera que se utilice un flujo de trabajo común para el despliegue y la gestión tanto de aplicaciones virtualizadas como en contenedores.

SUSE Edge Virtualization admite dos métodos para ejecutar máquinas virtuales:

  1. Despliegue manual de las máquinas virtuales mediante libvirt+qemu-kvm a nivel del host (sin intervención de Kubernetes)

  2. Despliegue del operador KubeVirt para la gestión basada en Kubernetes de máquinas virtuales

Ambas opciones son válidas, pero solo la segunda se trata a continuación. Si desea utilizar los mecanismos de virtualización estándares listos para usar que proporciona SUSE Linux Micro, encontrará una guía completa en este documento. Aunque está escrita principalmente para SUSE Linux Enterprise Server, los conceptos son prácticamente idénticos.

Esta guía explica inicialmente cómo desplegar los componentes de virtualización adicionales en un sistema que ya ha sido predesplegado, pero incluye una sección que describe cómo integrar esta configuración en el despliegue inicial a través de Edge Image Builder. Si no desea repasar los conceptos básicos y configurarlo todo manualmente, pase directamente a esa sección.

21.1 Descripción general de KubeVirt

KubeVirt permite gestionar máquinas virtuales con Kubernetes junto con el resto de sus cargas de trabajo en contenedores. Para ello, ejecuta la parte del espacio de usuario de la pila de virtualización de Linux en un contenedor. Esto minimiza los requisitos del sistema host, lo que facilita la configuración y la gestión.

Encontrará los detalles sobre la arquitectura de KubeVirt en la documentación original.

21.2 Requisitos previos

Si está siguiendo esta guía, se da por hecho que ya dispone de lo siguiente:

  • Al menos un host físico con SUSE Linux Micro 6.1 instalado y con las extensiones de virtualización habilitadas en el BIOS (consulte este documento para obtener más detalles).

  • Un clúster Kubernetes de K3s/RKE2 ya desplegado en todos sus nodos y con una kubeconfig adecuada que permita el acceso de superusuario al clúster.

  • Acceso al usuario root: estas instrucciones dan por sentado que usted es el usuario root y que no está derivando sus privilegios mediante sudo.

  • Debe tener Helm disponible localmente con una conexión de red adecuada para poder enviar configuraciones a su clúster de Kubernetes y descargar las imágenes necesarias.

21.3 Instalación manual de Edge Virtualization

Esta guía no explica el despliegue de Kubernetes, pero da por sentado que ha instalado la versión de K3s o RKE2 adecuada para SUSE Edge y que tiene su kubeconfig configurada adecuadamente para que los comandos estándar kubectl se puedan ejecutar como superusuario. También se presupone que su nodo forma un clúster de un solo nodo, aunque no se esperan diferencias significativas para los despliegues de varios nodos.

SUSE Edge Virtualization se despliega mediante tres charts de Helm distintos, en concreto:

  • KubeVirt: los componentes básicos de virtualización, es decir, las CRD de Kubernetes, los operadores y otros componentes necesarios para que Kubernetes pueda desplegar y gestionar máquinas virtuales.

  • Extensión de panel de control KubeVirt: una extensión opcional de la interfaz de usuario de Rancher que permite la gestión básica de máquinas virtuales; por ejemplo, iniciar/detener máquinas virtuales, así como acceder al panel de control.

  • Containerized Data Importer (CDI): un componente adicional que permite la integración del almacenamiento persistente para KubeVirt, proporcionando capacidades para que las máquinas virtuales puedan usar sistemas secundarios de almacenamiento existentes de Kubernetes para los datos, pero también permitiendo a los usuarios importar o clonar volúmenes de datos para máquinas virtuales.

Cada uno de estos charts de Helm tiene versiones distintas según la versión de SUSE Edge que esté utilizando actualmente. Para usarlos en entornos de producción o con asistencia, utilice los artefactos que se pueden encontrar en el registro de SUSE.

En primer lugar, asegúrese de que puede acceder correctamente a kubectl:

$ kubectl get nodes

Esto debería mostrar algo similar a lo siguiente:

NAME                   STATUS   ROLES                       AGE     VERSION
node1.edge.rdo.wales   Ready    control-plane,etcd,master   4h20m   v1.30.5+rke2r1
node2.edge.rdo.wales   Ready    control-plane,etcd,master   4h15m   v1.30.5+rke2r1
node3.edge.rdo.wales   Ready    control-plane,etcd,master   4h15m   v1.30.5+rke2r1

Ahora, puede instalar los charts de Helm de KubeVirt y Containerized Data Importer (CDI):

$ helm install kubevirt oci://registry.suse.com/edge/charts/kubevirt --namespace kubevirt-system --create-namespace
$ helm install cdi oci://registry.suse.com/edge/charts/cdi --namespace cdi-system --create-namespace

En unos minutos, debería tener todos los componentes de KubeVirt y CDI desplegados. Puede comprobar que todos los recursos se han desplegado en los espacios de nombres kubevirt-system y cdi-system.

Verifique los recursos de KubeVirt:

$ kubectl get all -n kubevirt-system

Esto debería mostrar algo similar a lo siguiente:

NAME                                   READY   STATUS    RESTARTS      AGE
pod/virt-operator-5fbcf48d58-p7xpm     1/1     Running   0             2m24s
pod/virt-operator-5fbcf48d58-wnf6s     1/1     Running   0             2m24s
pod/virt-handler-t594x                 1/1     Running   0             93s
pod/virt-controller-5f84c69884-cwjvd   1/1     Running   1 (64s ago)   93s
pod/virt-controller-5f84c69884-xxw6q   1/1     Running   1 (64s ago)   93s
pod/virt-api-7dfc54cf95-v8kcl          1/1     Running   1 (59s ago)   118s

NAME                                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/kubevirt-prometheus-metrics   ClusterIP   None            <none>        443/TCP   2m1s
service/virt-api                      ClusterIP   10.43.56.140    <none>        443/TCP   2m1s
service/kubevirt-operator-webhook     ClusterIP   10.43.201.121   <none>        443/TCP   2m1s
service/virt-exportproxy              ClusterIP   10.43.83.23     <none>        443/TCP   2m1s

NAME                          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
daemonset.apps/virt-handler   1         1         1       1            1           kubernetes.io/os=linux   93s

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/virt-operator     2/2     2            2           2m24s
deployment.apps/virt-controller   2/2     2            2           93s
deployment.apps/virt-api          1/1     1            1           118s

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/virt-operator-5fbcf48d58     2         2         2       2m24s
replicaset.apps/virt-controller-5f84c69884   2         2         2       93s
replicaset.apps/virt-api-7dfc54cf95          1         1         1       118s

NAME                            AGE     PHASE
kubevirt.kubevirt.io/kubevirt   2m24s   Deployed

Verifique los recursos de CDI:

$ kubectl get all -n cdi-system

Esto debería mostrar algo similar a lo siguiente:

NAME                                   READY   STATUS    RESTARTS   AGE
pod/cdi-operator-55c74f4b86-692xb      1/1     Running   0          2m24s
pod/cdi-apiserver-db465b888-62lvr      1/1     Running   0          2m21s
pod/cdi-deployment-56c7d74995-mgkfn    1/1     Running   0          2m21s
pod/cdi-uploadproxy-7d7b94b968-6kxc2   1/1     Running   0          2m22s

NAME                             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
service/cdi-uploadproxy          ClusterIP   10.43.117.7    <none>        443/TCP    2m22s
service/cdi-api                  ClusterIP   10.43.20.101   <none>        443/TCP    2m22s
service/cdi-prometheus-metrics   ClusterIP   10.43.39.153   <none>        8080/TCP   2m21s

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cdi-operator      1/1     1            1           2m24s
deployment.apps/cdi-apiserver     1/1     1            1           2m22s
deployment.apps/cdi-deployment    1/1     1            1           2m21s
deployment.apps/cdi-uploadproxy   1/1     1            1           2m22s

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/cdi-operator-55c74f4b86      1         1         1       2m24s
replicaset.apps/cdi-apiserver-db465b888      1         1         1       2m21s
replicaset.apps/cdi-deployment-56c7d74995    1         1         1       2m21s
replicaset.apps/cdi-uploadproxy-7d7b94b968   1         1         1       2m22s

Para verificar que las definiciones de recursos personalizados (CRD) de VirtualMachine están desplegadas, puede usar:

$ kubectl explain virtualmachine

Esto debería dar como resultado la definición del objeto VirtualMachine, que debería tener este aspecto:

GROUP:      kubevirt.io
KIND:       VirtualMachine
VERSION:    v1

DESCRIPTION:
    VirtualMachine handles the VirtualMachines that are not running or are in a
    stopped state The VirtualMachine contains the template to create the
    VirtualMachineInstance. It also mirrors the running state of the created
    VirtualMachineInstance in its status.
(snip)

21.4 Despliegue de máquinas virtuales

Ahora que KubeVirt y CDI se han desplegado, vamos a definir una máquina virtual sencilla basada en openSUSE Tumbleweed. La configuración de esta máquina virtual es muy sencilla: usa una "conexión de red de pod" idéntica a la de cualquier otro pod. También emplea almacenamiento no persistente, lo que garantiza que el almacenamiento sea efímero, al igual que en cualquier contenedor que no tenga un PVC.

$ kubectl apply -f - <<EOF
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: tumbleweed
  namespace: default
spec:
  runStrategy: Always
  template:
    spec:
      domain:
        devices: {}
        machine:
          type: q35
        memory:
          guest: 2Gi
        resources: {}
      volumes:
      - containerDisk:
          image: registry.opensuse.org/home/roxenham/tumbleweed-container-disk/containerfile/cloud-image:latest
        name: tumbleweed-containerdisk-0
      - cloudInitNoCloud:
          userDataBase64: I2Nsb3VkLWNvbmZpZwpkaXNhYmxlX3Jvb3Q6IGZhbHNlCnNzaF9wd2F1dGg6IFRydWUKdXNlcnM6CiAgLSBkZWZhdWx0CiAgLSBuYW1lOiBzdXNlCiAgICBncm91cHM6IHN1ZG8KICAgIHNoZWxsOiAvYmluL2Jhc2gKICAgIHN1ZG86ICBBTEw9KEFMTCkgTk9QQVNTV0Q6QUxMCiAgICBsb2NrX3Bhc3N3ZDogRmFsc2UKICAgIHBsYWluX3RleHRfcGFzc3dkOiAnc3VzZScK
        name: cloudinitdisk
EOF

El resultado debe ser que se ha creado una VirtualMachine:

virtualmachine.kubevirt.io/tumbleweed created

Esta definición de VirtualMachine es mínima y especifica muy poco sobre la configuración. Solo indica que se trata de una máquina de tipo q35 con 2 GB de memoria que usa una imagen de disco basada en un containerDisk efímero (es decir, una imagen de disco que se almacena en una imagen de contenedor desde un repositorio de imágenes remoto), y especifica un disco cloudInit con cifrado base64, que solo utilizamos para la creación de usuarios y la obligación de usar contraseña en el momento del arranque (utilice base64 -d para descifrarlo).

Nota
Nota

Esta imagen de máquina virtual sirve solo para realizar pruebas. La imagen no cuenta con asistencia oficial y solo se ofrece como ejemplo para fines de documentación.

Esta máquina tarda unos minutos en arrancar, ya que necesita descargar la imagen de disco de openSUSE Tumbleweed, pero una vez que lo haya hecho, podrá ver más detalles sobre ella:

$ kubectl get vmi

Esto debería dar como resultado el nodo en el que se inició la máquina virtual y la dirección IP de la máquina virtual. Recuerde que, dado que utiliza conexión de red de pod, la dirección IP indicada será igual que la de cualquier otro pod y, por lo tanto, enrutable:

NAME         AGE     PHASE     IP           NODENAME               READY
tumbleweed   4m24s   Running   10.42.2.98   node3.edge.rdo.wales   True

Al ejecutar estos comandos en los propios nodos del clúster de Kubernetes, con una CNI que enruta el tráfico directamente a los pods (por ejemplo, Cilium), debería poder conectarse directamente por ssh a la máquina. Sustituya la siguiente dirección IP por la que se le haya asignado a su máquina virtual:

$ ssh suse@10.42.2.98
(password is "suse")

Cuando se encuentre en esta máquina virtual, puede practicar un poco, pero recuerde que tiene recursos limitados y solo cuenta con 1 GB de espacio en disco. Cuando termine, pulse Ctrl+D o exit para desconectarse de la sesión SSH.

El proceso de la máquina virtual sigue estando envuelto en un pod estándar de Kubernetes. La CRD VirtualMachine es una representación de la máquina virtual deseada, pero el proceso en el que se inicia realmente la máquina virtual es a través del pod virt-launcher, un pod estándar de Kubernetes, igual que cualquier otra aplicación. Por cada máquina virtual iniciada, se puede ver que hay un pod virt-launcher:

$ kubectl get pods

Esto debería mostrar el único pod virt-launcher para la máquina Tumbleweed que hemos definido:

NAME                             READY   STATUS    RESTARTS   AGE
virt-launcher-tumbleweed-8gcn4   3/3     Running   0          10m

Si echamos un vistazo a este pod virt-launcher, veremos que está ejecutando los procesos libvirt y qemu-kvm. Podemos entrar en el propio pod y echar un vistazo, pero tenga en cuenta que es necesario adaptar el siguiente comando al nombre de su pod:

$ kubectl exec -it virt-launcher-tumbleweed-8gcn4 -- bash

Una vez en el pod, pruebe a ejecutar comandos virsh y observe los procesos. Comprobará que se está ejecutando el binario qemu-system-x86_64, junto con ciertos procesos para supervisar la máquina virtual. También verá la ubicación de la imagen de disco y cómo está conectada la red (como un dispositivo tap):

qemu@tumbleweed:/> ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ssl    0:00 /usr/bin/virt-launcher-monitor --qemu-timeout 269s --name tumbleweed --uid b9655c11-38f7-4fa8-8f5d-bfe987dab42c --namespace default --kubevirt-share-dir /var/run/kubevirt --ephemeral-disk-dir /var/run/kubevirt-ephemeral-disks --container-disk-dir /var/run/kube
   12 ?        Sl     0:01 /usr/bin/virt-launcher --qemu-timeout 269s --name tumbleweed --uid b9655c11-38f7-4fa8-8f5d-bfe987dab42c --namespace default --kubevirt-share-dir /var/run/kubevirt --ephemeral-disk-dir /var/run/kubevirt-ephemeral-disks --container-disk-dir /var/run/kubevirt/con
   24 ?        Sl     0:00 /usr/sbin/virtlogd -f /etc/libvirt/virtlogd.conf
   25 ?        Sl     0:01 /usr/sbin/virtqemud -f /var/run/libvirt/virtqemud.conf
   83 ?        Sl     0:31 /usr/bin/qemu-system-x86_64 -name guest=default_tumbleweed,debug-threads=on -S -object {"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/run/kubevirt-private/libvirt/qemu/lib/domain-1-default_tumbleweed/master-key.aes"} -machine pc-q35-7.1,usb
  286 pts/0    Ss     0:00 bash
  320 pts/0    R+     0:00 ps ax

qemu@tumbleweed:/> virsh list --all
 Id   Name                 State
------------------------------------
 1    default_tumbleweed   running

qemu@tumbleweed:/> virsh domblklist 1
 Target   Source
---------------------------------------------------------------------------------------------
 sda      /var/run/kubevirt-ephemeral-disks/disk-data/tumbleweed-containerdisk-0/disk.qcow2
 sdb      /var/run/kubevirt-ephemeral-disks/cloud-init-data/default/tumbleweed/noCloud.iso

qemu@tumbleweed:/> virsh domiflist 1
 Interface   Type       Source   Model                     MAC
------------------------------------------------------------------------------
 tap0        ethernet   -        virtio-non-transitional   e6:e9:1a:05:c0:92

qemu@tumbleweed:/> exit
exit

Por último, eliminemos esta máquina virtual:

$ kubectl delete vm/tumbleweed
virtualmachine.kubevirt.io "tumbleweed" deleted

21.5 Uso de virtctl

Además de la estándar de Kubernetes (kubectl), KubeVirt incluye una interfaz de línea de comandos adicional que permite interactuar con el clúster de una forma que obvia ciertas diferencias entre los entornos de virtualización y los usos para los que se diseñó Kubernetes. Por ejemplo, la herramienta virtctl permite gestionar el ciclo de vida de las máquinas virtuales (iniciar, detener, reiniciar, etc.), proporciona acceso a los paneles de control virtuales, permite cargar imágenes de máquinas virtuales e interactuar con construcciones de Kubernetes como servicios, sin utilizar directamente la API o las CRD.

Vamos a descargar la última versión estable de la herramienta virtctl:

$ export VERSION=v1.4.0
$ wget https://github.com/kubevirt/kubevirt/releases/download/$VERSION/virtctl-$VERSION-linux-amd64

Si utiliza una arquitectura diferente o una máquina que no sea Linux, encontrará otras versiones aquí. Debe hacer que este archivo sea ejecutable antes de continuar, y puede ser útil moverlo a una ubicación dentro de $PATH:

$ mv virtctl-$VERSION-linux-amd64 /usr/local/bin/virtctl
$ chmod a+x /usr/local/bin/virtctl

A continuación, puede utilizar la herramienta de línea de comandos virtctl para crear máquinas virtuales. Vamos a replicar nuestra máquina virtual anterior, teniendo en cuenta que estamos canalizando la salida directamente a kubectl apply:

$ virtctl create vm --name virtctl-example --memory=1Gi \
    --volume-containerdisk=src:registry.opensuse.org/home/roxenham/tumbleweed-container-disk/containerfile/cloud-image:latest \
    --cloud-init-user-data "I2Nsb3VkLWNvbmZpZwpkaXNhYmxlX3Jvb3Q6IGZhbHNlCnNzaF9wd2F1dGg6IFRydWUKdXNlcnM6CiAgLSBkZWZhdWx0CiAgLSBuYW1lOiBzdXNlCiAgICBncm91cHM6IHN1ZG8KICAgIHNoZWxsOiAvYmluL2Jhc2gKICAgIHN1ZG86ICBBTEw9KEFMTCkgTk9QQVNTV0Q6QUxMCiAgICBsb2NrX3Bhc3N3ZDogRmFsc2UKICAgIHBsYWluX3RleHRfcGFzc3dkOiAnc3VzZScK" | kubectl apply -f -

Esto debería mostrar la máquina virtual en ejecución (esta vez debería iniciarse mucho más rápido, ya que la imagen del contenedor estará almacenada en caché):

$ kubectl get vmi
NAME              AGE   PHASE     IP           NODENAME               READY
virtctl-example   52s   Running   10.42.2.29   node3.edge.rdo.wales   True

Ahora, podemos usar virtctl para conectarnos directamente a la máquina virtual:

$ virtctl ssh suse@virtctl-example
(password is "suse" - Ctrl-D to exit)

Se pueden utilizar muchos otros comandos con virtctl. Por ejemplo, virtctl console permite acceder al panel de control serie si la red no funciona, y puede utilizar virtctl guestosinfo para obtener información completa sobre el sistema operativo, siempre que el invitado tenga instalado y en ejecución qemu-guest-agent.

Por último, hagamos una pausa y reiniciemos la máquina virtual:

$ virtctl pause vm virtctl-example
VMI virtctl-example was scheduled to pause

Verá que el objeto VirtualMachine aparece como Paused (En pausa) y el objeto VirtualMachineInstance aparece como Running (En ejecución), pero como READY=False:

$ kubectl get vm
NAME              AGE     STATUS   READY
virtctl-example   8m14s   Paused   False

$ kubectl get vmi
NAME              AGE     PHASE     IP           NODENAME               READY
virtctl-example   8m15s   Running   10.42.2.29   node3.edge.rdo.wales   False

También comprobará que ya no puede conectarse a la máquina virtual:

$ virtctl ssh suse@virtctl-example
can't access VMI virtctl-example: Operation cannot be fulfilled on virtualmachineinstance.kubevirt.io "virtctl-example": VMI is paused

Reiniciemos la máquina virtual y volvamos a intentarlo:

$ virtctl unpause vm virtctl-example
VMI virtctl-example was scheduled to unpause

Ahora deberíamos poder restablecer la conexión:

$ virtctl ssh suse@virtctl-example
suse@vmi/virtctl-example.default's password:
suse@virtctl-example:~> exit
logout

Por último, eliminemos la máquina virtual:

$ kubectl delete vm/virtctl-example
virtualmachine.kubevirt.io "virtctl-example" deleted

21.6 Conexión de redes sencilla con Ingress

En esta sección, se explica cómo exponer máquinas virtuales como servicios estándar de Kubernetes y cómo hacerlas disponibles mediante el servicio Ingress de Kubernetes; por ejemplo, NGINX con RKE2 o Traefik con K3s. En este documento se entiende que estos componentes ya están configurados adecuadamente y que dispone de un puntero DNS adecuado (por ejemplo, un comodín) que dirija a los nodos de su servidor de Kubernetes o a su IP virtual de Ingress para que Ingress se resuelva adecuadamente.

Nota
Nota

En SUSE Edge 3.1 y versiones posteriores, si utiliza K3s en una configuración de nodos con varios servidores, es posible que haya tenido que configurar una IP virtual basada en MetalLB para Ingress. Esto no es necesario para RKE2.

En el entorno de ejemplo, se despliega otra máquina virtual Tumbleweed de openSUSE, se usa cloud-init para instalar NGINX como servidor Web sencillo en el momento del arranque y se configura un mensaje sencillo, que se envía para verificar que funciona según lo esperado cuando se realiza una llamada. Para ver cómo se hace, use el comando base64 -d en la sección cloud-init del siguiente ejemplo.

Vamos a crear esta máquina virtual:

$ kubectl apply -f - <<EOF
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: ingress-example
  namespace: default
spec:
  runStrategy: Always
  template:
    metadata:
      labels:
        app: nginx
    spec:
      domain:
        devices: {}
        machine:
          type: q35
        memory:
          guest: 2Gi
        resources: {}
      volumes:
      - containerDisk:
          image: registry.opensuse.org/home/roxenham/tumbleweed-container-disk/containerfile/cloud-image:latest
        name: tumbleweed-containerdisk-0
      - cloudInitNoCloud:
          userDataBase64: I2Nsb3VkLWNvbmZpZwpkaXNhYmxlX3Jvb3Q6IGZhbHNlCnNzaF9wd2F1dGg6IFRydWUKdXNlcnM6CiAgLSBkZWZhdWx0CiAgLSBuYW1lOiBzdXNlCiAgICBncm91cHM6IHN1ZG8KICAgIHNoZWxsOiAvYmluL2Jhc2gKICAgIHN1ZG86ICBBTEw9KEFMTCkgTk9QQVNTV0Q6QUxMCiAgICBsb2NrX3Bhc3N3ZDogRmFsc2UKICAgIHBsYWluX3RleHRfcGFzc3dkOiAnc3VzZScKcnVuY21kOgogIC0genlwcGVyIGluIC15IG5naW54CiAgLSBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93IG5naW54CiAgLSBlY2hvICJJdCB3b3JrcyEiID4gL3Nydi93d3cvaHRkb2NzL2luZGV4Lmh0bQo=
        name: cloudinitdisk
EOF

Cuando esta máquina virtual se haya iniciado correctamente, se podrá usar el comando virtctl para exponer la instancia VirtualMachineInstance con el puerto externo 8080 y el puerto de destino 80 (en el que NGINX escucha por defecto). Aquí, utilizamos el comando virtctl, ya que entiende la asignación entre el objeto de máquina virtual y el pod. Esto crea un nuevo servicio:

$ virtctl expose vmi ingress-example --port=8080 --target-port=80 --name=ingress-example
Service ingress-example successfully exposed for vmi ingress-example

A continuación, se crea automáticamente el servicio adecuado:

$ kubectl get svc/ingress-example
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)                         AGE
ingress-example   ClusterIP      10.43.217.19    <none>            8080/TCP                        9s

Ahora, si utiliza kubectl create ingress, puede crear un objeto Ingress que apunte a este servicio. Adapte la URL (conocida como "host" en el objeto ingress) aquí para que coincida con su configuración de DNS y asegúrese de que apunta al puerto 8080:

$ kubectl create ingress ingress-example --rule=ingress-example.suse.local/=ingress-example:8080

Con el servidor DNS configurado correctamente, debería poder ejecutar el comando curl en la URL de inmediato:

$ curl ingress-example.suse.local
It works!

Para limpiar, eliminaremos esta máquina virtual y sus recursos de servicio y de Ingress:

$ kubectl delete vm/ingress-example svc/ingress-example ingress/ingress-example
virtualmachine.kubevirt.io "ingress-example" deleted
service "ingress-example" deleted
ingress.networking.k8s.io "ingress-example" deleted

21.7 Uso de la extensión de interfaz de usuario de Rancher

SUSE Edge Virtualization proporciona una extensión de interfaz de usuario para Rancher Manager, lo que permite la gestión básica de máquinas virtuales mediante la interfaz de usuario del panel de control de Rancher.

21.7.1 Instalación

Consulte la sección sobre extensiones de panel de control de Rancher (Capítulo 6, Extensiones de panel de control de Rancher) para obtener instrucciones de instalación.

21.7.2 Uso de la extensión de panel de control KubeVirt de Rancher

La extensión introduce una nueva sección KubeVirt en Cluster Explorer. Esta sección se añade a cualquier clúster gestionado que tenga instalado KubeVirt.

La extensión permite interactuar directamente con los recursos de la máquina virtual de KubeVirt para gestionar el ciclo de vida de las máquinas virtuales.

21.7.2.1 Creación de una máquina virtual

  1. En el panel de navegación izquierdo, diríjase a Cluster Explorer (Explorador de clústeres) haciendo clic en el clúster gestionado habilitado para KubeVirt.

  2. Diríjase a la página KubeVirt > Virtual Machines (KubeVirt > Máquinas virtuales) y haga clic en Create from YAML (Crear desde YAML) en la parte superior derecha de la pantalla.

  3. Rellene o pegue una definición de máquina virtual y pulse Create (Crear). Use la definición de máquina virtual de la sección Despliegue de máquinas virtuales como referencia.

página de máquinas virtuales

21.7.2.2 Acciones de la máquina virtual

Puede utilizar el menú de acciones al que se accede desde la lista desplegable situada a la derecha de cada máquina virtual para iniciar, detener, pausar o hacer un reinicio suave. También puede usar las acciones de grupo de la parte superior de la lista seleccionando las máquinas virtuales en las que desea realizar la acción.

Estas acciones pueden afectar a la estrategia de ejecución de la máquina virtual. Consulte la tabla en la documentación de KubeVirt para obtener más detalles.

21.7.2.3 Acceso al panel de control de la máquina virtual

La lista "Virtual Machines" (Máquinas virtuales) proporciona una lista desplegable Console (Panel de control) que permite conectarse a la máquina mediante VNC o un panel de control serie. Esta acción solo está disponible para máquinas en ejecución.

En algunos casos, para poder acceder al panel de control en una máquina virtual recién iniciada se debe esperar un poco.

interfaz del panel de control de vnc

21.8 Instalación con Edge Image Builder

SUSE Edge usa Capítulo 11, Edge Image Builder para personalizar las imágenes del sistema operativo SUSE Linux Micro base. Siga las instrucciones de la Sección 27.9, “Instalación de KubeVirt y CDI” para realizar una instalación en un entorno aislado tanto de KubeVirt como de CDI sobre clústeres de Kubernetes aprovisionados por EIB.

Documentation survey