Provisionamento di Fedora CoreOS su KubeVirt

Questa guida mostra come fornire nuovi nodi Fedora CoreOS (FCOS) su qualsiasi cluster Kubernetes abilitato per KubeVirt.

Prerequisiti

Prima di configurare una macchina FCOS, è necessario avere un file di configurazione Ignition con le proprie personalizzazioni. Se non ne hai uno, consulta Produzione di un File Ignition.

È inoltre necessario avere accesso a un ambiente Kubernetes con [KubeVirt](https://kubevirt.io/user-guide/operations/installation/) installato.

Riferimento all’immagine KubeVirt

Fedora CoreOS è progettato per essere aggiornato automaticamente, con pianificazioni diverse per ciascun flusso.

L’immagine di ogni stream può essere riferita direttamente dal registro ufficiale:

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

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

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

Creazione di un segreto di configurazione Ignition

Ci sono diversi modi per esporre i dati utente (userdata) alle VM KubeVirt, i quali sono trattati nella guida utente di KubeVirt alla sezione KubeVirt user guide. In questo esempio useremo la configurazione Ignition memorizzata nel file locale example.ign per creare un secret chiamato`ignition-payload`. Utilizzeremo poi questo secret durante la definizione della nostra macchina virtuale negli esempi seguenti.

Creazione del secret
kubectl create secret generic ignition-payload --from-file=userdata=example.ign
Se l’utente preferisce, può utilizzare oc al posto di kubectl nei comandi presenti in tutta questa guida.

Avvio di una macchina virtuale

Date le immagini quay.io/fedora/fedora-coreos-kubevirt, è possibile creare una definizione di VM e combinarla con il riferimento al secret di Ignition per avviare una macchina virtuale.

Avvio di un’istanza VM che fa riferimento al secret
STREAM="stable" # or "testing" or "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

Ora dovresti essere in grado di accedere all’istanza tramite SSH. Se non hai modificato le impostazioni predefinite, il nome utente è core.

Accesso all’istanza VM tramite SSH utilizzando virtctl
virtctl ssh core@my-fcos

Avvio di una macchina virtuale con archiviazione persistente

L’esempio sopra descritto fornirà una VM che perderà qualsiasi modifica apportata se viene arrestata e riavviata. È possibile istruire il cluster affinché importi un containerdisk in un Volume Fisico (Physical Volume) durante il provisioning, in modo che la macchina virtuale mantenga la persistenza del disco del sistema operativo tra le operazioni di arresto e avvio.

Il vantaggio di questo approccio è che la macchina si comporta in modo molto più simile a una macchina virtuale tradizionale. Lo svantaggio è che il cluster deve offrire uno storage di tipo Block PV (Persistent Volume in modalità Blocco), cosa che potrebbe non essere disponibile in tutti i cluster.

Potrebbe essere necessario specificare il parametro storageClassName nella sezione spec.dataVolumeTemplates.spec.storage della configurazione, qualora il cluster non ne offra uno predefinito. Per maggiori dettagli, consulta la documentazione delle API.
Avvio di FCOS con QEMU (storage persistente)
STREAM="stable" # or "testing" or "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
          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
L’importazione del volume dati nella PVC dal registro dei container potrebbe richiedere del tempo. È possibile monitorare il processo osservando i log del pod importer-fcos-os-disk-volume.

Una volta che la macchina è attiva, puoi connetterti ad essa utilizzando virtctl come mostrato nell’esempio precedente.

Duplicazione dell’immagine (mirroring) per l’uso in registri privati

Se in un’installazione air-gapped (isolata dalla rete) viene utilizzato un registro privato, è possibile duplicare (mirroring) l’immagine in tale registro utilizzando skopeo.

Duplicazione di un’immagine FCOS di un canale stable
skopeo copy docker://quay.io/fedora/fedora-coreos-kubevirt:stable docker://myregistry.io/myorg/fedora-coreos-kubevirt:stable