Gatekeeper con Red Hat OpenShift o Kubernetes upstream

Zusammenfassung: Questo articolo della KB spiega come utilizzare il repository kubevirt-rawio-addon di Red Hat GitHub per presentare i gatekeeper PowerMax in un'ambiente Red Hat OpenShift o Kubernetes upstream. ...

Dieser Artikel gilt für Dieser Artikel gilt nicht für Dieser Artikel ist nicht an ein bestimmtes Produkt gebunden. In diesem Artikel werden nicht alle Produktversionen aufgeführt.

Weisungen

Gatekeeper PowerMax

I gatekeeper PowerMax sono dispositivi di piccole dimensioni (in genere tre MB) ricavati dai dischi in PowerMax che fungono da destinazioni SCSI per i comandi di Solutions Enabler. Per impostazione predefinita, symapi_db.bin le informazioni sulla configurazione e sullo stato vengono mantenute in un file di database host PowerMax. È noto come database di configurazione di PowerMax. Riduce il numero di richieste dall host agli array di storage. I gatekeeper devono essere dispositivi raw in modo che il sistema operativo passi semplicemente i comandi SCSI senza manipolazioni. Mentre gli host fisici funzionano sempre con gatekeeper (con un sistema operativo supportato), gli host virtuali sono limitati a VMware utilizzando RDM (Raw Device Mapping) fisici, iSCSI in-guest su Windows o Linux, NVMe/TCP in-guest su Linux o dispositivi pass-through (NIC o HBA). Tuttavia, solo VMware è in grado di presentare un dispositivo raw autentico riconosciuto come gatekeeper valido. Altre soluzioni di virtualizzazione consentono all'utente di presentare i dispositivi come "raw", ma bloccano alcuni comandi SCSI, impedendone l'utilizzo come gatekeeper. Solutions Enabler li etichetta come gatekeeper, ma segnala un errore come indicato di seguito.

Inoltre, se si esaminano i gatekeeper, mostrano uno stato "CLS" o chiuso.

Pertanto, non è possibile passare i comandi SCSI necessari.

Per usufruire dei vantaggi di questa soluzione, è necessario utilizzare un protocollo supportato da Solutions Enabler sul sistema operativo scelto. Consultare la documentazione del prodotto.

Soluzione Red Hat GitHub

Dell ha richiesto l'assistenza di Red Hat nello sviluppo di una soluzione alternativa per i gatekeeper in un'ambiente OpenShift per alcuni dei nostri clienti comuni. A tal fine, hanno creato una soluzione che funziona sia per OpenShift che per Kubernetes upstream, con lievi variazioni nell'implementazione. Il repository GitHub si chiama kubevirt-rawio-addon come si trova qui: https://github.com/openshift-cnv/kubevirt-rawio-addon GitHub include un https://github.com/openshift-cnv/kubevirt-rawio-addon/blob/main/README.md readme.

L'add-on installa diversi componenti:

  • Mutare i webhook per modificare gli oggetti all'istante
  • Convalida del webhook: un controllo di sicurezza specifico per OpenShift
  • Configurazione di sicurezza per consentire funzionalità privilegiate
  • Gancio sidecar 

Il sidecar è un piccolo container aggiuntivo che viene eseguito insieme al pod della VM e modifica la configurazione di basso livello della VM prima dell'avvio. Intercetta la configurazione della VM generata da KubeVirt, trova i dischi annotati e imposta rawio=yes. KubeVirt recupera quindi il codice XML. L'architettura sottostante libvirt/QEMU supporta questo, ma non lo espone, quindi è necessaria questa piccola modifica. È possibile che KubeVirt esponga questo in futuro, a quel punto la soluzione alternativa non sarà necessaria.


  

Implementazione su OpenShift

Il repository contiene tutte le istruzioni per implementare questa soluzione. Poiché Red Hat possiede la soluzione, Dell consiglia di seguire le istruzioni correnti, soggette a modifiche in futuro.  Dell non aggiornerà l'articolo della KB per riflettere tali modifiche. A titolo di cortesia, forniamo le informazioni di base riportate di seguito, ma consigliamo agli utenti di questo articolo della Knowledge Base di utilizzarle insieme al repository.

Come indicato, è possibile implementarlo su OpenShift o Kubernetes upstream. Poiché i passaggi sono per OpenShift, ci sono un paio di elementi da tenere in considerazione se si esegue Kubernetes upstream.

  • Se si esegue l'implementazione su Vanilla K8s, è necessario aver installato cert-manager. Se il driver CSI PowerMax è installato, questo è presente.
  • Se si implementa su K8s vanilla, è necessario un namespace privilegiato. È possibile utilizzare lo spazio dei nomi negli script o crearne uno personalizzato e quindi modificare gli script.

I due script necessari per l'implementazione si trovano nella cartella hack . Il rawio-setup.sh è il primo script ed è lo stesso per entrambe le piattaforme, ma tieni presente che si basa sul namespace openshift-cnv che è presente solo su OpenShift. Aggiungere il namespace o crearne uno nuovo e modificare lo script per K8s. Lo script di creazione della VM è univoco per la piattaforma, ma utilizza nuovamente il namespace openshift-cnv. Per OpenShift, è rawio-create-vm-openshift.sh. Gli script sono progettati per creare un ambiente di test e dovranno essere modificati per una configurazione di produzione. In particolare, lo script rawio-setup.sh crea un dispositivo SCSI virtuale. Modificare invece lo script per utilizzare la classe di storage PowerMax. Inoltre, lo script presuppone un singolo nodo per la pianificazione della VM. Modificarlo per consentirne l'esecuzione su qualsiasi nodo worker. Lo script utilizza un sistema operativo Fedora pre-buit.

Gli script di esempio sono disponibili in Contenuto supplementare.

Passaggi di base

Tenere presente che PowerMax CSI non può creare un dispositivo di dimensioni inferiori a 50 MB anche se si richiede un gatekeeper tradizionale da 3 MB. Non causa problemi.

Altre soluzioni di virtualizzazione

Nessuna delle soluzioni riportate di seguito funziona con questo repository Red Hat.

  • Soluzioni basate su K8s come SUSE Harvester : SUSE deve sviluppare la propria soluzione
  • Soluzioni KVM come Proxmox o Oracle KVM (oVirt): non sono basate su KubeVirt e non possono essere utilizzate



 

Weitere Informationen

rawio-setup.sh

 

#!/bin/bash

 

set -euo pipefail

 

if [ -z "${KUBEVIRT_NAMESPACE:-}" ]; Poi
  se kubectl ottiene ns openshift-cnv &>/dev/null; allora
    NAMESPACE="openshift-cnv"
  Altro
    NAMESPACE="kubevirt"
  fi
Altro
  NAMESPACE="$KUBEVIRT_NAMESPACE"
fi

 

PVC_NAMESPACE="${PVC_NAMESPACE:-default}"
SC_NAME="powermax-2164-default"
PVC_NAME="scsi-rawio-pvc"

 

# Crea namespace se non esiste
kubectl get ns "$PVC_NAMESPACE" >/dev/null 2>&1 || kubectl create ns "$PVC_NAMESPACE"

 

# Creare PVC
echo "Creazione di $PVC_NAME in PVC nello spazio dei nomi $PVC_NAMESPACE..."

 

kubectl apply -f - <<EOF
apiVersion: v1
gentile: PersistentVolumeClaim
Metadati:
  name: $PVC_NOME
  Namespace: $PVC_NAMESPACE
Spec:
  storageClassName: $SC_NOME
  volumeMode: Blocco
  accessModes:
    - ReadWriteOnce
  Risorse:
    Richieste:
      Archiviazione: 8Mi
EOF

 

eco ""
echo "=== Setup completo ==="
echo "StorageClass:   $SC_NOME"
echo "PVC:            $PVC_NAMESPACE/$PVC_NAME"
eco ""
 

*******************************************

rawio-create-vm-openshift.sh

 

#!/bin/bash

 

set -euo pipefail

 

PVC_NAMESPACE="${PVC_NAMESPACE:-default}"
PVC_NAME="${PVC_NAME:-scsi-rawio-pvc}"
VM_NAME="${VM_NAME:-rawio-test-vm}"
VM_SA="${VM_SA:-rawio-vm}"
CONTAINER_DISK="${CONTAINER_DISK:-quay.io/kubevirt/fedora-with-testtooling:v20240717-a087e7e}"
SCC_NAME="${SCC_NAME:-rawio-vm}"
KUBEVIRT_NAMESPACE="APRI-SHIFT-CNV"

 

echo "Creazione di ServiceAccount $VM_SA nel namespace $PVC_NAMESPACE"

 

kubectl apply -f - <<EOF
apiVersion: v1
gentile: Serviceaccount
Metadati:
  name: $VM_SA
  Namespace: $PVC_NAMESPACE
EOF

 

echo "Creazione SCC $SCC_NAME per l'account di servizio $VM_SA"

 

kubectl apply -f - <<EOF
apiVersion: security.openshift.io/v1
gentile: SecurityContextConstraints
Metadati:
  name: $SCC_NOME
Priorità: 11
allowPrivilegedContainer: false
allowHostDirVolumePlugin: vero
allowHostNetwork: false
allowHostPorts: false
allowHostPID: false
allowHostIPC: false
allowedCapabilities:
  - NET_BIND_SERVICE
  - SYS_NICE
  - SYS_RAWIO
  - SETFCAP
defaultAddCapabilities: []
seccompProfili:
  - runtime/predefinito
  - non confinato
  - localhost/kubevirt/kubevirt.json
Volumi:
  - "*"
readOnlyRootFilesystem: false
runAsUser:
  type: RunAsAny
seLinuxContext:
  type: RunAsAny
fsGroup:
  type: RunAsAny
supplementalGroups:
  type: RunAsAny
Gli utenti:
  - sistema:accountservizio:${PVC_NAMESPACE}:${VM_SA}
groups: []
EOF

 

echo "Creazione di VM $VM_NAME nel namespace $PVC_NAMESPACE"
echo "PVC:               $PVC_NOME"
echo "ServiceAccount:    $VM_SA"
echo "Disco contenitore:    $CONTAINER_DISCO"

 

kubectl apply -f - <<EOF
apiVersion: kubevirt.io/v1
gentile: Macchina virtuale
Metadati:
  name: $VM_NOME
  Namespace: $PVC_NAMESPACE
  Annotazioni:
    kubevirt.io/rawioSupport: "lun0"
Spec:
  In esecuzione: true
  Modello:
    Metadati:
      Annotazioni:
        kubevirt.io/rawioSupport: "lun0"
    Spec:
      Dominio:
        Cpu:
          Core: 2
        Risorse:
          Richieste:
            Memoria: 2Gi
        Dispositivi:
          Rng: {}
          Dischi:
            - nome: disk0
              Disco:
                Autobus: Virtio
            - Nome: LUN0
              LUN:
                Autobus: SCSI
            -Nome: $VM_SA
              Disco:
                Autobus: Virtio
      Volumi:
        - nome: disk0
          containerDisk:
            Immagine: $CONTAINER_DISCO
        - Nome: LUN0
          persistentVolumeClaim:
            claimName: $PVC_NOME
        -Nome: $VM_SA
          Serviceaccount:
            serviceAccountName: $VM_SA
EOF

 

eco ""
echo "VM $VM_NAME creata. In attesa che si avvii..."
echo "Guarda con: kubectl get vmi -n $PVC_NAMESPACE $VM_NAME -w"
echo "Console:    virtctl console -n $PVC_NAMESPACE $VM_NAME"
eco ""
echo "Pulizia:"
echo " kubectl delete vm -n $PVC_NAMESPACE $VM_NAME"
echo " kubectl delete scc $SCC_NAME"

Betroffene Produkte

PowerMax, PowerMax, PowerMax 2000, PowerMax 2500, PowerMax 8000, PowerMax 8500, PowerMaxOS 10
Artikeleigenschaften
Artikelnummer: 000472526
Artikeltyp: How To
Zuletzt geändert: 03 Juni 2026
Version:  1
Antworten auf Ihre Fragen erhalten Sie von anderen Dell NutzerInnen
Support Services
Prüfen Sie, ob Ihr Gerät durch Support Services abgedeckt ist.