Red Hat OpenShiftまたはアップストリームKubernetesを使用したGatekeeper

Zusammenfassung: このKBでは、Red Hat GitHubのkubevirt-rawio-addonリポジトリーを使用して、PowerMax GatekeeperをRed Hat OpenShiftまたはアップストリームの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

PowerMaxゲートキーパー

PowerMax Gatekeeperは、PowerMaxのディスクから切り分けられた小型デバイス(通常は3 MB)であり、Solutions EnablerコマンドのSCSIターゲットとして機能します。構成とステータス情報は、デフォルトでsymapi_db.bin PowerMaxホスト データベース ファイルに保持されます。これは、PowerMax構成データベースと呼ばれます。これにより、ホストからストレージ アレイへの問い合わせの数が減ります。Gatekeeperは、OSが操作せずにSCSIコマンドを渡すだけになるように、rawデバイスである必要があります。物理ホストは常にGatekeeper(対応OSを使用)と連携しますが、仮想ホストは物理RAWデバイス マッピング(RDM)、WindowsまたはLinuxのゲスト内iSCSI、Linuxのゲスト内NVMe/TCP、パススルー デバイス(NICまたはHBA)を使用するVMwareに限定されます。ただし、実行可能なGatekeeperとして認識されている真のrawデバイスを提供できるのはVMwareのみです。他の仮想化ソリューションでは、ユーザーはデバイスを「raw」として表示できますが、それらのソリューションは一部のSCSIコマンドをブロックし、Gatekeeperとしての使用を妨げます。Solutions EnablerはこれらをGatekeeperとしてラベル付けしますが、次のようにエラーを報告します。

さらに、Gatekeeperを調べると、「CLS」または「クローズ」の状態が表示されます。

したがって、必要なSCSIコマンドを渡すことはできません。

このソリューションを利用するには、選択したオペレーティング システムでSolutions Enablerがサポートするプロトコルを使用する必要があります。製品マニュアルを参照してください。

Red Hat GitHubソリューション

Dellは、両社の一部のお客様を対象に、OpenShift環境でのGatekeeperの回避策を開発するためのRed Hatの支援を要請しました。そのために、実装にわずかなバリエーションを加えて、OpenShiftとアップストリームKubernetesの両方で機能するソリューションを作成しました。GitHub リポジトリーは kubevirt-rawio-addon と呼ばれています。 https://github.com/openshift-cnv/kubevirt-rawio-addon GitHub には readme https://github.com/openshift-cnv/kubevirt-rawio-addon/blob/main/README.md が含まれています。

このアドオンは、いくつかのコンポーネントをインストールします。

  • Webhookを変更してオブジェクトをその場で変更する
  • Webhook の検証 - OpenShift 固有の安全性チェック
  • 特権機能を許可するセキュリティ構成
  • サイドカーフック 

サイドカーは、VM ポッドと共に実行され、起動前に VM の低レベルの構成を変更する小さな追加コンテナーです。KubeVirtによって生成されたVM構成をインターセプトし、注釈付きディスクを見つけて、rawio=yesを設定します。その後、KubeVirtはXMLを取得します。libvirt/QEMU の基盤となるアーキテクチャはこれをサポートしていますが、公開していないため、この小さな調整が必要です。KubeVirtが将来これを公開する可能性があり、その時点で回避策は不要になります。


  

OpenShiftでの実装

リポジトリーには、このソリューションを実装するためのすべての手順が含まれています。Red Hatがソリューションを所有しているため、Dellでは、将来変更される可能性のある現在の手順に従うことをお勧めします。  Dellは、これらの変更を反映するためにKBを更新することはありません。礼儀として、以下の基本情報を提供しますが、このKBのユーザーはリポジトリと一緒にそれらを使用することをお勧めします。

前述のように、これはOpenShiftまたはアップストリームKubernetesに実装できます。OpenShiftの手順であるため、アップストリームKubernetesを実行する場合は注意点がいくつかあります。

  • バニラK8sに実装する場合は、cert-managerがインストールされている必要があります。PowerMax CSIドライバーがインストールされている場合は、このドライバーが存在します。
  • バニラK8sに実装する場合は、特権ネームスペースが必要です。ネームスペースは、スクリプトで使用することも、独自のネームスペースを作成してからスクリプトを変更することもできます。

実装に必要な 2 つのスクリプトは hack フォルダーにあります。rawio-setup.sh は最初のスクリプトであり、どちらのプラットフォームでも同じですが、OpenShiftにのみ存在するopenshift-cnvネームスペースに依存していることに注意してください。ネームスペースを追加するか、新しいネームスペースを作成して、Kubernetesのスクリプトを変更します。VM作成スクリプトはプラットフォームに固有ですが、ここでもopenshift-cnvネームスペースを使用します。OpenShiftの場合は rawio-create-vm-openshift.sh です。スクリプトはテスト環境を作成するように設計されており、本番環境のセットアップ用に変更する必要があります。特に、rawio-setup.sh スクリプトは仮想SCSIデバイスを作成します。代わりに、PowerMaxストレージ クラスを使用するようにスクリプトを変更します。さらに、このスクリプトでは、VM をスケジュールするための 1 つのノードを想定しています。任意のワーカー ノードで実行できるように変更します。このスクリプトは、構築前のFedoraOSを使用します。

サンプル スクリプトは 、補足コンテンツにあります。

基本手順

従来の3 MBのGatekeeperを要求した場合でも、PowerMax CSIでは50 MB未満のデバイスを作成できないことに注意してください。問題は発生しません。

その他の仮想化ソリューション

以下のソリューションはいずれも、このRed Hatリポジトリーでは機能しません。

  • SUSE HarvesterなどのK8sベースのソリューション - SUSEは独自のソリューションを開発する必要がある
  • ProxmoxやOracle KVM(oVirt)などのKVMソリューション - これらはKubeVirtベースではないため、使用できません



 

Weitere Informationen

rawio-setup.sh

 

#!/bin/bash

 

「EUO PipeFail」を設定します

 

if [ -z "${KUBEVIRT_NAMESPACE:-}" ];そうしたら
  kubectl が 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の作成
echo "名前空間 $PVC_NAMESPACE に PVC $PVC_NAME を作成しています..."

 

kubectl apply -f - <<EOF
apiVersion:v1
種類:PersistentVolumeClaim(永続ボリュームクレーム)
メタデータ:
  name:$PVC名
  名前 空間:$PVC_ネームスペース
仕様:
  storageClassName: $SC名
  volumeMode: ブロック
  accessModes:
    - ReadWriteOnce (読み取り書き込みワンス)
  リソース:
    要求:
      ストレージ:8Mi
Eof

 

エコー""
echo "=== セットアップ完了 ==="
echo "StorageClass:   $SC_NAME」
エコー"PVC:            $PVC_NAMESPACE/$PVC_NAME」
エコー""
 

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

rawio-create-vm-openshift.sh

 

#!/bin/bash

 

「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 "名前空間 $PVC_NAMESPACE に ServiceAccount $VM_SA を作成しています"

 

kubectl apply -f - <<EOF
apiVersion:v1
種類:サービス アカウント
メタデータ:
  name:$VM_SA
  名前 空間:$PVC_ネームスペース
Eof

 

echo "サービス アカウント $VM_SA の SCC $SCC_NAME を作成しています"

 

kubectl apply -f - <<EOF
apiVersion:security.openshift.io/v1
種類:SecurityContextConstraints (SecurityContext制約)
メタデータ:
  name:$SCC名
優先 順位:11
allowPrivilegedContainer:false
allowHostDirVolumePlugin:true
allowHostNetwork:false
allowHostPorts:false
allowHostPID:false
allowHostIPC:false
allowedCapabilities です。
  - NET_BIND_SERVICE
  - SYS_NICE
  - SYS_RAWIO
  - セトフキャップ
defaultAddCapabilities を使用します。[]
seccompプロファイル:
  - ランタイム/デフォルト
  -一軸
  - localhost/kubevirt/kubevirt.json
ボリューム:
  - "*"
readOnlyRootFilesystem:false
runAsUserを使用します。
  タイプ: RunAsAnyを実行します
seLinuxContext:
  タイプ: RunAsAnyを実行します
fsGroup:
  タイプ: RunAsAnyを実行します
supplementalGroupsに追加します。
  タイプ: RunAsAnyを実行します
ユーザー:
  - system:serviceaccount:${PVC_NAMESPACE}:${VM_SA}
groups:[]
Eof

 

echo "名前空間 $PVC_NAMESPACE に VM $VM_NAME を作成しています"
エコー"PVC:               $PVC_NAME」
echo "ServiceAccount:    $VM_SA」
echo "コンテナディスク:    $CONTAINER_DISK」

 

kubectl apply -f - <<EOF
apiVersion:kubevirt.io/v1
種類:仮想マシン
メタデータ:
  name:$VM名
  名前 空間:$PVC_ネームスペース
  注釈:
    kubevirt.io/rawioSupport: 「lun0」
仕様:
  実行中:true
  テンプレート:
    メタデータ:
      注釈:
        kubevirt.io/rawioSupport: 「lun0」
    仕様:
      ドメイン:
        Cpu:
          コア:2
        リソース:
          要求:
            メモリ:2Gi
        デバイス:
          Rng:{}
          ディスク:
            - 名前:disk0
              ディスク:
                バス:Virtio
            - 名前:lun0
              Lun:
                バス:SCSI
            -名前:$VM_SA
              ディスク:
                バス:Virtio
      ボリューム:
        - 名前:disk0
          containerDisk:
            イメージ:$CONTAINER_ディスク
        - 名前:lun0
          persistentVolumeClaim:
            claimName: $PVC名
        -名前:$VM_SA
          serviceAccount:
            serviceAccountName: $VM_SA
Eof

 

エコー""
echo "VM $VM_NAME が作成されました。開始を待っています...」
echo "kubectl get vmi -n $PVC_NAMESPACE $VM_NAME -w" で見る
エコー"コンソール:    virtctl console -n $PVC_NAMESPACE $VM_NAME"
エコー""
echo "クリーンアップ:"
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.