Gatekeepers con Red Hat OpenShift o Kubernetes ascendentes

Zusammenfassung: En este artículo de la base de conocimientos, se explica cómo utilizar el repositorio de Red Hat GitHub kubevirt-rawio-addon para presentar PowerMax Gatekeepers a un entorno Red Hat OpenShift o 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

PowerMax Gatekeepers

Los gatekeepers de PowerMax son dispositivos pequeños (por lo general, tres MB) extraídos de discos en PowerMax que actúan como destinos SCSI para comandos de Solutions Enabler. La información de configuración y estado se mantiene en un archivo de base de datos del host de PowerMax symapi_db.bin de manera predeterminada. Se conoce como la base de datos de configuración de PowerMax. Reduce la cantidad de consultas desde el host hasta los arreglos de almacenamiento. Los gatekeepers deben ser dispositivos crudos, de modo que el sistema operativo simplemente pase los comandos de SCSI sin manipulación. Si bien los hosts físicos siempre funcionan con gatekeepers (con un sistema operativo compatible), los hosts virtuales se limitan a VMware mediante mapeos de dispositivos crudos físicos (RDM), iSCSI en el huésped en Windows o Linux, NVMe/TCP en el huésped en Linux o dispositivos de paso (NIC o HBA). Sin embargo, solo VMware puede presentar un verdadero dispositivo crudo que se reconozca como un gatekeeper viable. Otras soluciones de virtualización permiten que el usuario presente los dispositivos como "crudos", pero sus soluciones bloquean algunos comandos SCSI, lo que impide su uso como gatekeepers. Solutions Enabler los etiqueta como gatekeepers, pero informa un error como el que se muestra a continuación.

Además, si examina los gatekeepers, muestran un estado de "CLS" o cerrado.

Por lo tanto, no puede pasar los comandos de SCSI necesarios.

Para aprovechar esta solución, debe usar un protocolo que Solutions Enabler admita en el sistema operativo elegido. Consulte la documentación del producto.

Solución Red Hat GitHub

Dell solicitó la ayuda de Red Hat con el desarrollo de una solución alternativa para gatekeepers en un entorno OpenShift para algunos de nuestros clientes mutuos. Con ese fin, crearon una solución que funciona tanto para OpenShift como para Kubernetes ascendente con ligeras variaciones en la implementación. El repositorio de GitHub se llama kubevirt-rawio-addon como se encuentra aquí: https://github.com/openshift-cnv/kubevirt-rawio-addon El GitHub incluye un https://github.com/openshift-cnv/kubevirt-rawio-addon/blob/main/README.md léame.

El complemento instala varios componentes:

  • Mutación de webhooks para modificar objetos sobre la marcha
  • Validando webhook: una comprobación de seguridad específica de OpenShift
  • Configuración de seguridad para permitir funcionalidades privilegiadas
  • Gancho de sidecar 

El sidecar es un pequeño contenedor adicional que se ejecuta junto con el pod de VM y modifica la configuración de bajo nivel de la VM antes de que se inicie. Intercepta la configuración de la máquina virtual generada por KubeVirt, encuentra los discos anotados y establece rawio=yes. A continuación, KubeVirt recupera el XML. La arquitectura subyacente de libvirt/QEMU admite esto, pero no lo expone, por lo que se requiere este ajuste menor. Es posible que KubeVirt exponga esto en el futuro, momento en el que la solución alternativa será innecesaria.


  

Implementación en OpenShift

El repositorio contiene todas las instrucciones para implementar esta solución. Dado que Red Hat es el propietario de la solución, Dell recomienda seguir las instrucciones actuales, que están sujetas a cambios en el futuro.  Dell no actualizará la base de conocimientos para reflejar esos cambios. Como cortesía, proporcionamos la información básica a continuación, pero recomendamos a los usuarios de esta base de conocimientos que la utilicen junto con el repositorio.

Como se indicó, puede implementar esto en OpenShift o en Kubernetes ascendente. Como son los pasos para OpenShift, hay un par de elementos que se deben tener en cuenta si realiza Kubernetes ascendentes.

  • Si implementa en K8s estándar, debe tener instalado cert-manager. Si el controlador de CSI de PowerMax está instalado, entonces esto está presente.
  • Si implementa en vanilla K8s, necesita un espacio de nombres con privilegios. Puede usar el espacio de nombres en los scripts o crear uno propio y, a continuación, modificar los scripts.

Los dos scripts que necesita para la implementación están en la carpeta de hacks . El rawio-setup.sh es el primer script y es el mismo para cualquiera de las plataformas, pero tenga en cuenta que depende del espacio de nombres openshift-cnv que solo está presente en OpenShift. Agregue el espacio de nombres o cree uno nuevo y modifique el script para K8s. El script de creación de VM es exclusivo de la plataforma, pero nuevamente utiliza el espacio de nombres openshift-cnnv. Para OpenShift, es rawio-create-vm-openshift.sh. Los scripts están diseñados para crear un entorno de prueba y necesitarán modificaciones para una configuración de producción. En particular, el script de rawio-setup.sh crea un dispositivo SCSI virtual. En su lugar, modifique el script para usar la clase de almacenamiento de PowerMax. Además, el script supone un nodo único para programar la VM. Modifíquelo para permitir que se ejecute en cualquier nodo trabajador. El script utiliza un sistema operativo Fedora pre-construido.

Los scripts de muestra se encuentran en Supplemental Content.

Pasos básicos

Tenga en cuenta que la CSI de PowerMax no puede crear un dispositivo de menos de 50 MB, incluso si solicita un gatekeeper tradicional de 3 MB. No causa ningún problema.

Otras soluciones de virtualización

Ninguna de las siguientes soluciones funciona con este repositorio de Red Hat.

  • Soluciones basadas en K8s, como SUSE Harvester : SUSE debe desarrollar su propia solución
  • Soluciones KVM como Proxmox u Oracle KVM (oVirt): no están basadas en KubeVirt y no se pueden utilizar



 

Weitere Informationen

rawio-setup.sh

 

#!/bin/bash

 

set -euo pipefail

 

if [ -z "${KUBEVIRT_NAMESPACE:-}" ]; entonces
  if kubectl get ns openshift-cnv &>/dev/null; then
    NAMESPACE="openshift-cnv"
  De lo contrario,
    NAMESPACE="kubevirt"
  fi
De lo contrario,
  ESPACIO DE NOMBRES="$KUBEVIRT_ESPACIO DE NOMBRES"
fi

 

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

 

# Crear espacio de nombres si no existe
kubectl get ns "$PVC_NAMESPACE" >/dev/null 2>&1 || kubectl create ns "$PVC_NAMESPACE"

 

# Crear PVC
echo "Creando PVC $PVC_NAME en el espacio de nombres $PVC_NAMESPACE..."

 

kubectl apply -f - <<EOF
apiVersion: v1
Tipo: Reclamación de volumen persistente
Metadatos:
  nombre: $PVC_NOMBRE
  Espacio de nombres: $PVC_ESPACIO DE NOMBRES
Especificación:
  storageClassName: $SC_NOMBRE
  volumeMode: Bloquear
  accessModes:
    - Leer WriteOnce (en inglés)
  Recursos:
    Solicitudes:
      Almacenamiento: 8Mi
EOF

 

echo ""
echo "=== Configuración completa ==="
echo "StorageClass:   $SC_NOMBRE"
echo "PVC:            $PVC_ESPACIO DE NOMBRES/$PVC_NOMBRE"
echo ""
 

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

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"

 

echo "Creando ServiceAccount $VM_SA en el espacio de nombres $PVC_NAMESPACE"

 

kubectl apply -f - <<EOF
apiVersion: v1
Tipo: Cuenta de servicio
Metadatos:
  nombre: $VM_SA
  Espacio de nombres: $PVC_ESPACIO DE NOMBRES
EOF

 

echo "Creando SCC $SCC_NAME para la cuenta de servicio $VM_SA"

 

kubectl apply -f - <<EOF
apiVersion: security.openshift.io/v1
Tipo: Restricciones de contexto de seguridad
Metadatos:
  nombre: $SCC_NOMBRE
Prioridad: 11
allowPrivilegedContainer: false
allowHostDirVolumePlugin: true
allowHostNetwork: falso
allowHostPorts: false
allowHostPID: falso
allowHostIPC: falso
allowedCapabilities:
  - NET_BIND_SERVICE
  - SYS_NICE
  - SYS_RAWIO
  - SETFCAP (en inglés)
defaultAddCapabilities: []
seccompProfiles:
  - Tiempo de ejecución/predeterminado
  - No confinado
  - localhost/kubevirt/kubevirt.json
Volúmenes:
  - "*"
readOnlyRootFilesystem: false
runAsUser:
  type: Ejecutar como cualquiera
seLinuxContext:
  type: Ejecutar como cualquiera
fsGroup:
  type: Ejecutar como cualquiera
Grupos complementarios:
  type: Ejecutar como cualquiera
Usuarios:
  - sistema:cuentaservicio:${PVC_NAMESPACE}:${VM_SA}
grupos: []
EOF

 

echo "Creando VM $VM_NAME en el espacio de nombres $PVC_NAMESPACE"
echo "PVC:               $PVC_NOMBRE"
echo "ServiceAccount:    $VM_SA"
echo "Disco contenedor:    $CONTAINER_DISCO"

 

kubectl apply -f - <<EOF
apiVersion: kubevirt.io/v1
Tipo: Máquina virtual
Metadatos:
  nombre: $VM_NOMBRE
  Espacio de nombres: $PVC_ESPACIO DE NOMBRES
  Notas de anotación:
    kubevirt.io/rawioSupport: "lun0"
Especificación:
  En ejecución: true
  Plantilla:
    Metadatos:
      Notas de anotación:
        kubevirt.io/rawioSupport: "lun0"
    Especificación:
      Dominio:
        CPU:
          Núcleos: 2
        Recursos:
          Solicitudes:
            Memoria: 2Gi
        Dispositivos:
          RNG: {}
          Discos:
            - Nombre: disk0
              Disco:
                Autobús: Virtio
            - Nombre: LUN0
              LUN:
                Autobús: SCSI
            - Nombre: $VM_SA
              Disco:
                Autobús: Virtio
      Volúmenes:
        - Nombre: disk0
          containerDisk:
            Imagen: $CONTAINER_DISCO
        - Nombre: LUN0
          persistentVolumeClaim:
            claimName: $PVC_NOMBRE
        - Nombre: $VM_SA
          serviceAccount:
            serviceAccountName: $VM_SA
EOF

 

echo ""
echo "VM $VM_NAME creada. Esperando a que comience..."
echo "Ver con: kubectl get vmi -n $PVC_NAMESPACE $VM_NAME -w"
echo "Consola:    virtctl console -n $PVC_NAMESPACE $VM_NAME"
echo ""
echo "Limpieza:"
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.