使用 Red Hat OpenShift 或上游 Kubernetes 的閘道管理員

Zusammenfassung: 本 KB 說明如何使用 Red Hat GitHub kubevirt-rawio-addon 儲存庫,為 Red Hat OpenShift 或上游 Kubernetes 環境提供 PowerMax 閘道管理員。

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 閘道管理員

PowerMax 閘道管理員是從 PowerMax 中的磁碟分割而成的小型裝置 (通常為 3 MB),作為 Solutions Enabler 命令的 SCSI 目標。組態和狀態資訊會保留在 PowerMax 主機資料庫檔案中,預設symapi_db.bin。這就是所謂的 PowerMax 組態資料庫。它減少了從主機到存儲陣列的查詢次數。閘道管理員必須是原始裝置,以便作業系統直接傳送 SCSI 命令而不需操作。雖然實體主機一律會搭配閘道管理員 (使用支援的作業系統),但虛擬主機僅限於使用實體原始裝置對應 (RDM)、Windows 或 Linux 上的客體內部 iSCSI、Linux 上的客體內 NVMe/TCP,或是傳遞裝置 (NIC 或 HBA) 的 VMware。然而,只有 VMware 才能提供被公認為可行的閘道管理員的真正原始裝置。其他虛擬化解決方案可讓使用者將裝置顯示為「原始」,但他們的解決方案會封鎖某些 SCSI 命令,導致無法將其作為閘道管理員使用。Solutions Enabler 會將其標記為閘道管理員,但報告錯誤如下所示。

此外,如果您檢查閘道管理員,它們會顯示「CLS」或已關閉狀態。

因此,您無法傳遞必要的 SCSI 命令。

若要善用此解決方案,您必須使用 Solutions Enabler 在所選作業系統上支援的通訊協定。請參閱產品說明文件。

Red Hat GitHub 解決方案

Dell 要求 Red Hat 協助為我們共同的部分客戶開發 OpenShift 環境中閘道管理員的因應措施。為此,他們創建了一個適用於 OpenShift 和上游 Kubernetes 的解決方案,但在實施上略有不同。GitHub 儲存庫稱為 kubevirt-rawio-addon,位於此處: https://github.com/openshift-cnv/kubevirt-rawio-addon GitHub 包含一個自述 https://github.com/openshift-cnv/kubevirt-rawio-addon/blob/main/README.md

該載入項安裝多個元件:

  • 變更 webhook 以動態修改物件
  • 驗證 webhook - OpenShift 專屬安全檢查
  • 允許特權功能的安全設定
  • 挎斗掛鉤 

挎斗是一個額外的小型容器,它與虛擬機容器一起運行,並在虛擬機啟動之前修改虛擬機的低級別配置。它會攔截 KubeVirt 生成的 VM 組態,找到已註解的磁碟,並設定 rawio=yes。KubeVirt 隨後會取回 XML。libvirt/QEMU 底層架構支援這一點,但不會公開它,因此需要進行這種細微的調整。將來 KubeVirt 可能會公開此問題,此時將不需要解決方法。


  

OpenShift 實作

存儲庫包含實現此解決方案的所有說明。由於 Red Hat 擁有解決方案,因此 Dell 建議您遵循目前的指示,未來可能會變更。  Dell 不會更新 KB 來反映這些變更。出於禮貌,我們在下方提供基本資訊,但我們鼓勵本 KB 的使用者將其與儲存庫一起使用。

如前所述,您可以在 OpenShift 或上游 Kubernetes 上實作。由於步驟是 OpenShift,如果您執行上游 Kubernetes,有幾個注意事項。

  • 如果在 vanilla K8s 上實現,則必須安裝證書管理員。如果已安裝 PowerMax CSI 驅動程式,則會存在此問題。
  • 如果在 vanilla K8s 上實現,則需要特權命名空間。可以在腳本中使用命名空間,也可以創建自己的命名空間,然後修改腳本。

實施所需的兩個腳本位於 hack 資料夾中。rawio-setup.sh 是第一個指令檔,任一平台都是相同的,但請注意,它依賴於僅存在於 OpenShift 上的 openshift-cnv 命名空間。新增命名空間或建立新的命名空間,然後修改 K8s 的指令檔。VM 建立指令檔為平台專屬,但同樣使用 openshift-cnv 命名空間。對於 OpenShift,它是 rawio-create-vm-openshift.sh。這些指令檔旨在建立測試環境,需要修改才能進行生產設定。具體而言,rawio-setup.sh 指令檔會建立虛擬 SCSI 裝置。請改為修改指令檔以使用 PowerMax 儲存類別。此外,該腳本假定單個節點用於計劃 VM。修改它以允許它在任何工作器節點上運行。該腳本使用預運行的Fedora OS。

範例指令檔位於 補充內容中。

基本步驟

請注意,即使您要求傳統的 3 MB 閘道管理員,PowerMax CSI 也無法建立小於 50 MB 的裝置。它不會導致問題。

其他虛擬化解決方案

下列解決方案均不適用於此 Red Hat 儲存庫。

  • 基於 K8s 的解決方案,如 SUSE 收割機 - SUSE 必須開發自己的解決方案
  • 像 Proxmox 或 Oracle KVM (oVirt) 這樣的 KVM 解決方案 - 這些不是基於 KubeVirt 的,不能使用



 

Weitere Informationen

rawio-setup.sh

 

#!/bin/bash

 

set -euo pipefail

 

如果 [ -z “${KUBEVIRT_NAMESPACE:-}” ];然後
  如果 kubectl get ns openshift-cnv &>/dev/null;則
    NAMESPACE=“openshift-cnv”
  否則
    NAMESPACE=“kubevirt”
  fi
否則
  NAMESPACE=“$KUBEVIRT_NAMESPACE”
fi

 

PVC_NAMESPACE=“${PVC_NAMESPACE:-default}”
SC_NAME=「powermax-2164-default」
PVC_NAME=“scsi-rawio-pvc”

 

# 如果不存在,則建立命名空間
kubectl get ns “$PVC_NAMESPACE” >/dev/null 2>&1 || kubectl create ns “$PVC_NAMESPACE”

 

# 建立 PVC
回應「在命名空間中建立 PVC $PVC_NAME $PVC_NAMESPACE...」

 

kubectl apply -f - <<EOF
api版本:v1
種類:PersistentVolumeClaim
中繼資料:
  name: $PVC名稱
  命名空間:$PVC_命名空間
規格:
  儲存裝置類別名稱:$SC名稱
  音量模式:封鎖
  存取模式:
    - 只讀一次
  資源:
    要求:
      儲存裝置:8英里
EOF

 

回顯“”
echo “=== 設置完成 ===”
回應「StorageClass:   $SC_NAME》
回應「PVC:            $PVC_NAMESPACE/$PVC_NAME」
回顯“”
 

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

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=“openshift-cnv”

 

呼應「在命名空間 $PVC_NAMESPACE 中建立 ServiceAccount $VM_SA」

 

kubectl apply -f - <<EOF
api版本:v1
種類:服務帳戶
中繼資料:
  name: $VM_SA
  命名空間:$PVC_命名空間
EOF

 

回應「為服務帳戶 $VM_SA 建立 SCC $SCC_NAME」

 

kubectl apply -f - <<EOF
api版本: security.openshift.io/v1
種類:SecurityContextConstraint(安全內容約束)
中繼資料:
  name: $SCC名稱
優先順序:11
allowPrivilegedContainer:false
allowHostDirVolumePlugin:true
allowHostNetwork:false
allowHostPorts:false
allowHostPID:false
allowHostIPC:false
允許的功能:
  - NET_BIND_SERVICE
  - SYS_NICE
  - SYS_RAWIO
  - 塞特夫卡普
defaultAddCapabilities:[]
seccompProfiles:
  - 執行時/預設值
  - 無限制
  - 本地主機/庫貝維爾特/kubevirt.json
磁碟區:
  - "*"
readOnlyRootFilesystem:false
以使用者身分執行:
  請輸入:RunAsAny
seLinuxContext:
  請輸入:RunAsAny
fsgroup:
  請輸入:RunAsAny
補充群組:
  請輸入:RunAsAny
使用者:
  - 系統:服務帳戶:${PVC_NAMESPACE}:${VM_SA}
groups: []
EOF

 

呼應「在命名空間 $PVC_NAMESPACE 中建立 VM $VM_NAME」
回應「PVC:               $PVC_NAME》
echo “ServiceAccount:    $VM_SA」
回應「容器磁碟:    $CONTAINER_磁碟」

 

kubectl apply -f - <<EOF
api版本: kubevirt.io/v1
種類:虛擬機器
中繼資料:
  name: $VM名稱
  命名空間:$PVC_命名空間
  註解:
    kubevirt.io/rawioSupport:「lun0」
規格:
  執行:真
  範本:
    中繼資料:
      註解:
        kubevirt.io/rawioSupport:「lun0」
    規格:
      網域:
        中央處理器:
          核心:2
        資源:
          要求:
            記憶體:2吉
        裝置:
          RNG:{}
          磁碟:
            - 名稱:磁碟0
              磁碟:
                巴士:維蒂奧
            - 名稱:LUN0
              LUN:
                匯流排:SCSI
            - 名稱:$VM_SA
              磁碟:
                巴士:維蒂奧
      磁碟區:
        - 名稱:磁碟0
          containerDisk:
            圖:$CONTAINER_磁碟
        - 名稱:LUN0
          persistentVolumeClaim:
            請領名稱:$PVC名稱
        - 名稱:$VM_SA
          serviceAccount:
            serviceAccountName:$VM_SA
EOF

 

回顯“”
回應「VM $VM_NAME created.等它開始...”
echo “watch with: kubectl get vmi -n $PVC_NAMESPACE $VM_NAME -w”
echo “主控台:    virtctl 主控台 -n $PVC_NAMESPACE $VM_NAME」
回顯“”
回顯「清理:」
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.