Aprovisionando Fedora CoreOS sobre KubeVirt

Esta guía muestra como aprovisionar nodos nuevos de Fedora CoreOS (FCOS) en cualquier clúster de Kubernetes habilitado para KubeVirt.

Prerrequisitos

Antes de aprovisionar una máquina FCOS, debes tener un archivo de configuración Ignition que contenga sus personalizaciones. Si no tienes uno consulta Producción de un Archivo Ignition.

También necesita tener acceso a un entorno de Kubernetes con KubeVirt instalado.

Referencia a la imagen de KubeVirt

Fedora CoreOS está diseñado para ser subido automáticamente, con diferentes planificaciones por flujo.

La imagen para cada flujo puede ser referenciada directamente desde el registro oficial:

  • quay.io/fedora/fedora-coreos-kubevirt:stable

  • quay.io/fedora/fedora-coreos-kubevirt:testing

  • quay.io/fedora/fedora-coreos-kubevirt:next

Crear una configuración Ignition secreta

Existen varias maneras de exponer datos de usuario a las máquinas virtuales de Kubevirt, que se describen en guía del usuario de KubeVirt. En este ejemplo, usaremos la configuración de Ignition almacenada en el archivo local example.ign para crear un secreto llamado ignition-payload. Posteriormente, usaremos este secreto al definir nuestra máquina virtual en los ejemplos siguientes.

Crear el secreto
kubectl create secret generic ignition-payload --from-file=userdata=example.ign
Si el usuario prefiere, pueden utilizar oc en vez de kubectl en los comandos a través de esta guía.

Lanzar una máquina virtual (MV)

Dadas las imágenes quay.io/fedora/fedora-coreos-kubevirt puedes crear una definición de MV y combinar eso con la referencia secreta de Ignition para lanzar una máquina virtual.

Lanzar una instancia de MV referenciando el secreto
STREAM="stable" # o el "testing" o el "next"
cat <<END > vm.yaml
---
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: my-fcos
spec:
  runStrategy: Always
  template:
    spec:
      domain:
        devices:
          disks:
          - name: containerdisk
            disk:
              bus: virtio
          - name: cloudinitdisk
            disk:
              bus: virtio
          rng: {}
        resources:
          requests:
            memory: 2048M
      volumes:
      - name: containerdisk
        containerDisk:
          image: quay.io/fedora/fedora-coreos-kubevirt:${STREAM}
          imagePullPolicy: Always
      - name: cloudinitdisk
        cloudInitConfigDrive:
          secretRef:
            name: ignition-payload
END
kubectl create -f vm.yaml

Ahora serías capaz de entrar por SSH la instancia. Si no cambiaste lo predeterminado, el nombre de usuario es core.

Acceder a la instancia de MV utilizando virtctl por medio de ssh
virtctl ssh core@mi-fcos

Lanzar una máquina virtual con almacén persistente

El ejemplo anterior le proporcionará una máquina virtual que perderá los cambios realizados si se detiene y se reinicia. Puede indicar al clúster que importe un disco contenedor a un volumen físico durante el aprovisionamiento para que la máquina virtual conserve el disco del sistema operativo durante las operaciones de detención e inicio.

Lo positivo para esta aproximación es que la máquina se comporta mucho mejor que una máquina virtual tradicional. El inconveniente es que el clúster debe ofrecer almacenamiento fotovoltaico en bloque y no todos los clústeres pueden hacerlo.

Es posible que deba especificar un parámetro storageClassName en la sección spec.dataVolumeTemplates.spec.storage de la configuración si su clúster no ofrece un valor predeterminado. Consulte la documentación de la API.
Lanzar una MV con almacén persistente
STREAM="stable" # o "testing" o "next"
DISK=10
cat <<END > vm.yaml
---
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: my-fcos
spec:
  runStrategy: Always
  dataVolumeTemplates:
  - metadata:
      name: fcos-os-disk-volume
    spec:
      source:
        registry:
          url:
           docker://quay.io/fedora/fedora-coreos-kubevirt:${STREAM}
      storage:
        volumeMode: Block
        resources:
          requests:
            storage: ${DISK}Gi
        accessModes:
          - ReadWriteOnce
  template:
    spec:
      domain:
        devices:
          disks:
          - name: fcos-os-disk
            disk:
              bus: virtio
          - name: cloudinitdisk
            disk:
              bus: virtio
            name: cloudinitdisk
          rng: {}
        resources:
          requests:
            memory: 2048M
      volumes:
      - name: fcos-os-disk
        dataVolume:
          name: fcos-os-disk-volume
      - name: cloudinitdisk
        cloudInitConfigDrive:
          secretRef:
            name: ignition-payload
END
kubectl create -f vm.yaml
La importación del volumen de datos al PVC desde el registro del contenedor puede tardar un tiempo. Puede supervisar la importación consultando los registros del pod importer-fcos-os-disk-volume.

Una vez que la máquina esté en funcionamiento, puede conectarse a ella usando virtctl como se muestra en el ejemplo anterior.

Duplicación de la imagen para su uso en registros privados

Si se utiliza un registro privado en instalaciones con espacio de aire, la imagen se puede reflejar en ese registro usando skopeo.

Duplicación de una imagen FCOS de flujo estable
skopeo copy docker://quay.io/fedora/fedora-coreos-kubevirt:stable docker://myregistry.io/myorg/fedora-coreos-kubevirt:stable