Gatekeepers med Red Hat OpenShift eller överordnad Kubernetes

Zusammenfassung: I den här kunskapsbasartikeln beskrivs hur du använder Red Hat GitHub-lagringsplatsen kubevirt-rawio-addon för att presentera PowerMax-grindvakter för antingen en Red Hat OpenShift- eller uppströms Kubernetes-miljö. ...

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

PowerMax-gatekeepers

PowerMax Gatekeepers är små enheter (vanligtvis tre MB) som skärs ut från diskar i PowerMax och som fungerar som SCSI-mål för Solutions Enabler-kommandon. Information om konfiguration och status lagras i en PowerMax-värddatabasfil och symapi_db.bin som standard. Den kallas för PowerMax-konfigurationsdatabasen. Det minskar antalet förfrågningar från värden till lagringsdisksystemen. Gatekeepers måste vara råenheter så att operativsystemet helt enkelt skickar SCSI-kommandona utan manipulering. Fysiska värdar fungerar alltid med Gatekeepers (med ett operativsystem som stöds), men virtuella värdar är begränsade till VMware med hjälp av fysiska mappningar av råa enheter (RDM), iSCSI för gäst på Windows eller Linux, NVMe/TCP för gäst på Linux eller genomströmningsenheter (NIC eller HBA). Det är dock bara VMware som kan presentera en äkta rå enhet som är erkänd som en livskraftig Gatekeeper. Andra virtualiseringslösningar gör det möjligt för användaren att presentera enheter som "råa", men deras lösningar blockerar vissa SCSI-kommandon, vilket förhindrar att de används som gatekeepers. Solutions Enabler betecknar dem som gatekeepers men rapporterar ett fel enligt nedan.

Dessutom, om du undersöker grindvakterna visar de ett tillstånd av "CLS" eller stängt.

Därför kan du inte skicka de nödvändiga SCSI-kommandona.

Om du vill dra nytta av den här lösningen måste du använda ett protokoll som Solutions Enabler stöder på det valda operativsystemet. Se produktdokumentationen.

Red Hat GitHub-lösning

Dell bad Red Hat om hjälp med att utveckla en lösning för grindvakter i en OpenShift-miljö för några av våra gemensamma kunder. För detta ändamål skapade de en lösning som fungerar för både OpenShift och Upstream Kubernetes med små variationer i implementeringen. GitHub-lagringsplatsen kallas kubevirt-rawio-addon som finns här: https://github.com/openshift-cnv/kubevirt-rawio-addon GitHub innehåller en readme-https://github.com/openshift-cnv/kubevirt-rawio-addon/blob/main/README.md.

Tillägget installerar flera komponenter:

  • Mutera webhooks för att ändra objekt i farten
  • Validera webhook – en OpenShift-specifik säkerhetskontroll
  • Säkerhetskonfiguration för att tillåta privilegierade funktioner
  • Krok för sidovagn 

Sidovagnen är en liten extra container som körs tillsammans med VM-podden och ändrar den virtuella datorns lågnivåkonfiguration innan den startar. Den fångar upp den KubeVirt-genererade VM-konfigurationen, hittar de kommenterade diskarna och anger rawio=yes. KubeVirt får sedan tillbaka XML-filen. Den underliggande arkitekturen libvirt/QEMU stöder detta, men visar det inte, så denna mindre justering krävs. Det är möjligt att KubeVirt avslöjar detta i framtiden, då lösningen kommer att vara onödig.


  

Implementering på OpenShift

Lagringsplatsen innehåller alla instruktioner för att implementera den här lösningen. Eftersom Red Hat äger lösningen rekommenderar Dell att du följer de aktuella instruktionerna, som kan komma att ändras i framtiden.  Dell kommer inte att uppdatera kunskapsbasen för att återspegla dessa ändringar. Som en artighet tillhandahåller vi den grundläggande informationen nedan, men uppmuntrar användare av denna KB att använda dem tillsammans med arkivet.

Som nämnts kan du implementera detta på OpenShift eller Upstream Kubernetes. Som steg för OpenShift finns det några saker att tänka på om du gör överordnad Kubernetes.

  • Om du implementerar på vanliga K8s-system måste du ha cert-manager installerat. Om PowerMax CSI-drivrutinen är installerad så finns den.
  • Om du implementerar på vanliga K8s behöver du ett privilegierat namnområde. Du kan använda namnområdet i skripten eller skapa ett eget och sedan ändra skripten.

De två skript du behöver för implementering finns i hackmappen . rawio-setup.sh är det första skriptet och är detsamma för båda plattformarna, men tänk på att det förlitar sig på openshift-cnv namnområdet som bara finns på OpenShift. Lägg till namnområdet eller skapa ett nytt och ändra skriptet för K8s. Skriptet för att skapa virtuella datorer är unikt för plattformen, men använder återigen openshift-cnv namnområdet. För OpenShift är det rawio-create-vm-openshift.sh. Skripten är utformade för att skapa en testmiljö och måste ändras för en produktionsinställning. I synnerhet skapar rawio-setup.sh-skriptet en virtuell SCSI-enhet. Ändra i stället skriptet så att den använder din PowerMax-lagringsklass. Dessutom förutsätter skriptet en enda nod för schemaläggning av den virtuella datorn. Ändra den så att den kan köras på valfri arbetsnod. Skriptet använder ett Fedoraoperativsystem före buit.

Exempelskript finns i Tilläggsinnehåll.

Grundläggande steg

Tänk på att PowerMax CSI inte kan skapa en enhet som är mindre än 50 MB även om du ber om en traditionell 3 MB Gatekeeper. Det orsakar inga problem.

Andra virtualiseringslösningar

Ingen av lösningarna nedan fungerar med den här Red Hat-lagringsplatsen.

  • K8s-baserade lösningar som SUSE Harvester – SUSE måste utveckla sin egen lösning
  • KVM-lösningar som Proxmox eller Oracle KVM (oVirt) - dessa är inte KubeVirt-baserade och kan inte användas



 

Weitere Informationen

rawio-setup.sh

 

#!/bin/bash

 

Ställ in -EUO PipeFail

 

if [ -z "${KUBEVIRT_NAMESPACE:-}" ]; Sedan
  Om kubectl get ns openshift-cnv &>/dev/null; då
    NAMESPACE="openshift-cnv"
  Annat
    NAMESPACE="kubevirt"
  Fi
Annat
  NAMESPACE="$KUBEVIRT_NAMNRYMD"
Fi

 

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

 

# Skapa namnrymd om den inte finns
kubectl get ns "$PVC_NAMESPACE" >/dev/null 2>&1 || kubectl create ns "$PVC_NAMESPACE"

 

# Skapa PVC
echo "Skapa PVC $PVC_NAME i namnrymden $PVC_NAMESPACE..."

 

kubectl apply -f - <<EOF
apiVersion: v1
Typ: PersistentVolumeClaim (Beständighet)
Metadata:
  Namn: $PVC_NAMN
  Namnområde: $PVC_NAMNRYMD
Spec:
  storageClassName: $SC_NAMN
  volumeMode: Blockera
  accessModes:
    - ReadWriteOnce (på engelska)
  Resurser:
    Begäranden:
      Lagring: 8Mi
EOF

 

echo ""
echo "=== Installationen är klar ==="
echo "StorageClass:   $SC_NAMN"
echo "PVC:            $PVC_NAMNRYMD/$PVC_NAMN"
echo ""
 

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

rawio-create-vm-openshift.sh

 

#!/bin/bash

 

Ställ in -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="OpenShift-CNV"

 

echo "Skapar ServiceAccount $VM_SA i namnrymden $PVC_NAMESPACE"

 

kubectl apply -f - <<EOF
apiVersion: v1
Typ: ServiceKonto
Metadata:
  Namn: $VM_SA
  Namnområde: $PVC_NAMNRYMD
EOF

 

echo "Skapar SCC $SCC_NAME för tjänstkonto $VM_SA"

 

kubectl apply -f - <<EOF
apiVersion: security.openshift.io/v1
Typ: SecurityContextConstraints (på engelska)
Metadata:
  Namn: $SCC_NAMN
Prioritet: 11
allowPrivilegedContainer: false
allowHostDirVolumePlugin: true
allowHostNetwork: falskt
allowHostPorts: falskt
allowHostPID: falskt
allowHostIPC: falskt
allowedCapabilities:
  - NET_BIND_SERVICE
  - SYS_NICE
  - SYS_RAWIO
  - SETFCAP (på engelska)
defaultAddCapabilities: []
seccompProfiles:
  - Körtid/standard
  -Unconfined
  - localhost/kubevirt/kubevirt.json
Volymer:
  - "*"
readOnlyRootFilesystem: falskt
runAsUser:
  typ: RunAsAny
seLinuxKontext:
  typ: RunAsAny
fsGroup:
  typ: RunAsAny
supplementalGroups:
  typ: RunAsAny
Användare:
  - System:ServiceAccount:${PVC_NAMESPACE}:${VM_SA}
Grupper: []
EOF

 

echo "Skapar VM $VM_NAME i namnrymden $PVC_NAMESPACE"
echo "PVC:               $PVC_NAMN"
echo "ServiceAccount:    $VM_SA"
echo "Behållardisk:    $CONTAINER_DISK"

 

kubectl apply -f - <<EOF
apiVersion: kubevirt.io/v1
Typ: Virtuell maskin
Metadata:
  Namn: $VM_NAMN
  Namnområde: $PVC_NAMNRYMD
  Anteckningar:
    kubevirt.io/rawioSupport: "lun0"
Spec:
  Löpning: Sant
  Mall:
    Metadata:
      Anteckningar:
        kubevirt.io/rawioSupport: "lun0"
    Spec:
      Domän:
        Cpu:
          Kärnor: 2
        Resurser:
          Begäranden:
            Minne: 2Gi
        Enheter:
          Rng: {}
          Diskar:
            - Namn: disk0
              Disk:
                Buss: Virtio
            - Namn: LUN0
              Lun:
                Buss: SCSI
            -Namn: $VM_SA
              Disk:
                Buss: Virtio
      Volymer:
        - Namn: disk0
          containerDisk:
            Bild: $CONTAINER_DISK
        - Namn: LUN0
          persistentVolumeClaim:
            claimName: $PVC_NAMN
        -Namn: $VM_SA
          serviceAccount:
            serviceAccountName: $VM_SA
EOF

 

echo ""
echo "VM $VM_NAME skapad. Väntar på att det ska börja..."
echo "Titta med: kubectl get vmi -n $PVC_NAMESPACE $VM_NAME -w"
echo "Konsol:    virtctl console -n $PVC_NAMESPACE $VM_NAME"
echo ""
echo "Städa:"
echo " kubectl delete vm -n $PVC_NAMESPACE $VM_NAME"
echo " kubectl ta bort 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.