Gatekeepers z Red Hat OpenShift lub Upstream Kubernetes

Zusammenfassung: W tym artykule bazy wiedzy wyjaśniono, w jaki sposób korzystać z repozytorium Red Hat GitHub kubevirt-rawio-addon w celu prezentowania strażników PowerMax w środowisku Red Hat OpenShift lub Upstream Kubernetes. ...

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

Strażnicy PowerMax

Gatekeeperzy PowerMax to małe urządzenia (zazwyczaj trzy MB) wycięte z dysków w PowerMax, które działają jako obiekty docelowe SCSI dla poleceń narzędzia Solutions Enabler. Informacje o konfiguracji i stanie są przechowywane w pliku bazy danych hosta PowerMax symapi_db.bin domyślnie. Jest ona znana jako baza danych konfiguracji PowerMax. Zmniejsza to liczbę zapytań wysyłanych z hosta do macierzy pamięci masowej. Gatekeeperzy muszą być surowymi urządzeniami, aby system operacyjny po prostu przekazywał polecenia SCSI bez manipulacji. Podczas gdy hosty fizyczne zawsze współpracują ze strażnikami (z obsługiwanym systemem operacyjnym), hosty wirtualne są ograniczone do VMware korzystającego z fizycznych mapowań urządzeń surowych (RDM), iSCSI gościa w systemie Windows lub Linux, NVMe/TCP w gościu w systemie Linux lub urządzeń przekazywanych (karta sieciowa lub HBA). Jednak tylko VMware może przedstawić prawdziwe surowe urządzenie, które jest uznawane za realnego strażnika. Inne rozwiązania wirtualizacyjne pozwalają użytkownikowi prezentować urządzenia jako "surowe", ale ich rozwiązania blokują niektóre polecenia SCSI, uniemożliwiając ich użycie jako Gatekeeperów. Narzędzie Solutions Enabler oznacza je jako strażników, ale zgłasza błąd jak poniżej.

Co więcej, jeśli przyjrzysz się strażnikom dostępu, pokazują oni stan "CLS" lub zamknięty.

W związku z tym nie można przekazać niezbędnych poleceń SCSI.

Aby skorzystać z tego rozwiązania, należy użyć protokołu obsługiwanego przez narzędzie Solutions Enabler w wybranym systemie operacyjnym. Zapoznaj się z dokumentacją produktu.

Rozwiązanie Red Hat GitHub

Firma Dell zwróciła się do firmy Red Hat z prośbą o pomoc w opracowaniu obejścia problemu dla strażników dostępu w środowisku OpenShift dla niektórych naszych wspólnych klientów. W tym celu stworzyli rozwiązanie, które działa zarówno dla OpenShift, jak i Upstream Kubernetes z niewielkimi różnicami w implementacji. Repozytorium GitHub nazywa się kubevirt-rawio-addon, ponieważ znajduje się tutaj: https://github.com/openshift-cnv/kubevirt-rawio-addon GitHub zawiera https://github.com/openshift-cnv/kubevirt-rawio-addon/blob/main/README.md readme.

Dodatek instaluje kilka elementów:

  • Mutowanie elementów webhook w celu modyfikowania obiektów w locie
  • Walidacja elementu webhook — kontrola bezpieczeństwa specyficzna dla OpenShift
  • Konfiguracja zabezpieczeń umożliwiająca korzystanie z funkcji uprzywilejowanych
  • Hak wózka bocznego 

Przyczepka to mały dodatkowy kontener, który działa obok zasobnika maszyny wirtualnej i modyfikuje konfigurację niskiego poziomu maszyny wirtualnej przed jej uruchomieniem. Przechwytuje konfigurację maszyny wirtualnej wygenerowaną przez KubeVirt, znajduje dyski z adnotacjami i ustawia rawio=yes. Następnie KubeVirt pobiera z powrotem XML. Podstawowa architektura libvirt/QEMU obsługuje to, ale nie udostępnia tego, więc ta drobna korekta jest wymagana. Możliwe, że KubeVirt ujawni to w przyszłości, w którym to momencie obejście będzie niepotrzebne.


  

Wdrożenie na platformie OpenShift

Repozytorium zawiera wszystkie instrukcje dotyczące implementacji tego rozwiązania. Ponieważ firma Red Hat jest właścicielem rozwiązania, firma Dell zaleca przestrzeganie bieżących instrukcji, które mogą ulec zmianie w przyszłości.  Firma Dell nie zaktualizuje bazy wiedzy w celu odzwierciedlenia tych zmian. Z grzeczności poniżej podajemy podstawowe informacje, ale zachęcamy użytkowników tego artykułu bazy wiedzy do korzystania z nich razem z repozytorium.

Jak wspomniano, można to zaimplementować na platformie OpenShift lub Upstream Kubernetes. Ponieważ kroki są dla OpenShift, istnieje kilka elementów na uwagę, jeśli wykonujesz nadrzędną platformę Kubernetes.

  • Jeśli implementujesz na waniliowych K8s, musisz mieć zainstalowany cert-manager. Jeśli sterownik PowerMax CSI jest zainstalowany, oznacza to, że jest on obecny.
  • Jeśli implementujesz na waniliowych K8s, potrzebujesz uprzywilejowanej przestrzeni nazw. Możesz użyć przestrzeni nazw w skryptach lub utworzyć własną, a następnie zmodyfikować skrypty.

Dwa skrypty potrzebne do implementacji znajdują się w folderze hack . rawio-setup.sh jest pierwszym skryptem i jest taki sam dla obu platform, ale należy pamiętać, że opiera się na przestrzeni nazw openshift-cnv, która jest obecna tylko w OpenShift. Dodaj przestrzeń nazw lub utwórz nową i zmodyfikuj skrypt dla K8s. Skrypt tworzenia maszyny wirtualnej jest unikatowy dla platformy, ale ponownie używa openshift-cnv przestrzeni nazw. W przypadku OpenShift jest to rawio-create-vm-openshift.sh. Skrypty są przeznaczone do tworzenia środowiska testowego i będą wymagały modyfikacji w celu skonfigurowania produkcyjnego. W szczególności skrypt rawio-setup.sh tworzy wirtualne urządzenie SCSI. Zamiast tego zmodyfikuj skrypt w celu użycia klasy pamięci masowej PowerMax. Ponadto w skrypcie założono, że jeden węzeł służy do planowania maszyny wirtualnej. Zmodyfikuj go, aby umożliwić jego uruchamianie w dowolnym węźle roboczym. Skrypt używa systemu operacyjnego Fedora pre-buit.

Przykładowe skrypty znajdują się w sekcji Zawartość uzupełniająca.

Podstawowe kroki

Należy pamiętać, że interfejs CSI PowerMax nie może utworzyć urządzenia mniejszego niż 50 MB, nawet jeśli zażądasz tradycyjnego strażnika 3 MB. Nie powoduje to problemu.

Inne rozwiązania wirtualizacji

Żadne z poniższych rozwiązań nie działa z tym repozytorium Red Hat.

  • Rozwiązania oparte na K8s, takie jak SUSE Harvester - SUSE musi opracować własne rozwiązanie
  • Rozwiązania KVM, takie jak Proxmox lub Oracle KVM (oVirt) - nie są one oparte na KubeVirt i nie mogą być używane



 

Weitere Informationen

rawio-setup.sh

 

#!/bin/bash

 

set -euo pipefail

 

if [ -z "${KUBEVIRT_NAMESPACE:-}" ]; Następnie
  if kubectl get ns openshift-cnv &>/dev/null; to
    NAMESPACE="openshift-cnv"
  Innego
    NAMESPACE="kubevirt"
  fi
Innego
  NAMESPACE="$KUBEVIRT_NAMESPACE"
fi

 

PVC_NAMESPACE="${PVC_NAMESPACE:-domyślnie}"
SC_NAME="PowerMax-2164-domyślnie"
PVC_NAME="scsi-rawio-pvc"

 

# Utwórz przestrzeń nazw, jeśli nie istnieje
kubectl get ns "$PVC_NAMESPACE" >/dev/null 2>&1 || kubectl create ns "$PVC_NAMESPACE"

 

# Utwórz PVC
echo "Tworzenie PVC $PVC_NAZWA_w przestrzeni nazw $PVC_NAMESPACE..."

 

kubectl apply -f - <<EOF
Wersja api: v1
Rodzaju: Roszczenie PersistentVolumeClaim
Metadanych:
  name: $PVC_NAZWA_
  Obszaru nazw: $PVC_NAMESPACE
Spec:
  storageClassName: $SC_NAZWA
  Tryb głośności: Blokuj
  accessModes:
    - ReadWriteOnce
  Zasobów:
    Żądania:
      Magazynu: 8Mi
EOF

 

echo ""
echo "=== Konfiguracja zakończona ==="
echo "StorageClass:   $SC_NAZWA"
echo "PVC:            $PVC_PRZESTRZEŃ NAZW/$PVC_NAZWA"
echo ""
 

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

rawio-create-vm-openshift.sh

 

#!/bin/bash

 

set -euo pipefail

 

PVC_NAMESPACE="${PVC_NAMESPACE:-domyślnie}"
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 "Tworzenie ServiceAccount $VM_SA w przestrzeni nazw $PVC_NAMESPACE"

 

kubectl apply -f - <<EOF
Wersja api: v1
Rodzaju: Serviceaccount
Metadanych:
  name: $VM_SA
  Obszaru nazw: $PVC_NAMESPACE
EOF

 

echo "Tworzenie SCC $SCC_NAME dla konta usługi $VM_SA"

 

kubectl apply -f - <<EOF
apiVersion: security.openshift.io/v1
Rodzaju: SecurityContextConstraints
Metadanych:
  name: $SCC_NAZWA_
Priorytet: 11
allowPrivilegedContainer: false
allowHostDirVolumePlugin: true
allowHostNetwork: false
allowHostPorts: wartość false
allowHostPID: false
allowHostIPC: false
allowedCapabilities:
  - NET_BIND_SERVICE
  - SYS_NICE
  - SYS_RAWIO
  - SETFCAP
defaultAddCapabilities: []
seccompProfiles:
  - Środowisko uruchomieniowe/domyślne
  - bez ograniczeń
  - localhost/kubevirt/kubevirt.json
Woluminów:
  - "*"
readOnlyRootFilesystem: false
runAsUser:
  type: RunAsAny
seLinuxKontekst:
  type: RunAsAny
fsGroup:
  type: RunAsAny
SupplementalGroups:
  type: RunAsAny
Użytkowników:
  - System:ServiceAccount:${PVC_NAMESPACE}:${VM_SA}
groups: []
EOF

 

echo "Tworzenie $VM_NAZWA_MASZYNY w przestrzeni nazw $PVC_NAMESPACE"
echo "PVC:               $PVC_NAZWA"
echo "konto_usługi:    $VM_SA"
echo "Dysk kontenera:    $CONTAINER_DYSK"

 

kubectl apply -f - <<EOF
apiVersion: kubevirt.io/v1
Rodzaju: Maszyna wirtualna
Metadanych:
  name: $VM_NAZWA
  Obszaru nazw: $PVC_NAMESPACE
  Adnotacje:
    kubevirt.io/rawioSupport: "lun0"
Spec:
  Bieganie: prawda
  Szablonu:
    Metadanych:
      Adnotacje:
        kubevirt.io/rawioSupport: "lun0"
    Spec:
      Domeny:
        Procesora:
          Rdzenie: 2
        Zasobów:
          Żądania:
            Pamięci: 2Gi
        Urządzeń:
          Rng: {}
          Dysków:
            - Nazwa: disk0
              Dysku:
                Autobus: Virtio
            - Nazwa: LUN0
              Jednostki lun:
                Magistrala: SCSI
            -Nazwa: $VM_SA
              Dysku:
                Autobus: Virtio
      Woluminów:
        - Nazwa: disk0
          containerDisk:
            Obrazu: $CONTAINER_DYSK
        - Nazwa: LUN0
          persistentVolumeClaim:
            claimName: $PVC_NAZWA_
        -Nazwa: $VM_SA
          Serviceaccount:
            serviceAccountName: $VM_SA
EOF

 

echo ""
echo "Utworzono $VM_NAZWĘ maszyny wirtualnej. Czekam, aż się zacznie..."
echo "Oglądaj z: kubectl get vmi -n $PVC_NAMESPACE $VM_NAME -w"
echo "Konsola:    virtctl console -n $PVC_NAMESPACE $VM_NAME"
echo ""
echo "Oczyszczanie:"
echo " kubectl delete vm -n $PVC_NAMESPACE $VM_NAME"
echo " kubectl usuń scc $SCC_NAZWA"

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.