Instalación de Portworx en el clúster

Suministre una instancia de servicio de Portworx desde el catálogo de IBM Cloud. Después de crear la instancia de servicio, se instala en el clúster la edición de empresa más reciente de Portworx (px-enterprise) mediante Helm. Además, Stork también está instalado en su clúster Red Hat OpenShift on IBM Cloud. Stork es el planificador de almacenamiento de Portworx. Con Stork, puedes ubicar los pods junto a sus datos, así como crear y restaurar instantáneas de los volúmenes de « Portworx ».

¿Está buscando instrucciones sobre cómo actualizar o eliminar Portworx? Consulte Actualización de Portworx y Eliminación de Portworx.

El método de instalación predeterminado para Portworx Enterprise y Portworx La copia de seguridad aún no es compatible con clústeres privados en la región de Montreal. Póngase en contacto con el servicio de asistencia de Portworx si necesita instalar Portworx Enterprise o Portworx Backup en un clúster privado en Montreal. Para obtener más información, consulta la sección de asistencia de Portworx.

Antes de empezar:

Para instalar Portworx:

  1. Abre el servicio « Portworx » del catálogo « IBM Cloud » y rellena los campos de la siguiente manera:

    1. Seleccione la región en la que se encuentra el clúster de Red Hat OpenShift on IBM Cloud.

    2. Revise la información sobre precios de Portworx.

    3. Especifique el nombre de la instancia de servicio de Portworx.

    4. Seleccione el grupo de recursos en el que se encuentre el clúster.

    5. En el campo Etiqueta, escriba el nombre del clúster en el que desea instalar Portworx. Después de crear la instancia de servicio de Portworx, no puede ver el clúster en el que ha instalado Portworx. Para localizar el clúster fácilmente más adelante, asegúrese de especificar el nombre del clúster y la información adicional como etiquetas.

    6. Escriba una clave de API de IBM Cloud para recuperar la lista de clústeres a los que tiene acceso. Si no tiene ninguna clave de API, consulte Gestión de claves de API de usuario. Después de especificar la clave de API, aparece el campo Nombre de clúster de Kubernetes o de OpenShift.

    7. Especifique un Nombre de clúster de Portworx exclusivo.

    8. En el menú Unidades de nube:

      1. Seleccione Utilizar unidades de nube (sólo clústeres de VPC) para suministrar dinámicamente Block Storage for VPC para Portworx. Después de seleccionar Utilizar unidades de nube, seleccione el Nombre de clase de almacenamiento y el Tamaño de las unidades de almacenamiento en bloque que desee suministrar.
      2. Seleccione Utilizar unidades ya conectadas (Clásico, VPC o Satellite) para utilizar el almacenamiento en bloque que ya está conectado a los nodos de trabajador.
    9. En el menú desplegable Almacén de claves y valores de metadatos de Portworx, elija el tipo de almacén de claves y valores que desea utilizar para guardar los metadatos de Portworx. Seleccione KVDB de Portworx para crear automáticamente un almacén de claves y valores durante la instalación de Portworx o seleccione Databases for etcd si desea utilizar una instancia existente de Databases for etcd. Si elige Databases for etcd, aparecen los campos Puntos finales de API de etcd y Nombre de secreto de etcd.

    10. Espacio de nombres: especifique el espacio de nombres en el que desea desplegar los recursos de Portworx.

    11. Obligatorio dolo para Databases for etcd: escriba la información de la instancia de servicio de Databases for etcd.

      1. Recupere el punto final etcd y el nombre del secreto de Kubernetes que ha creado para la instancia de servicio de Databases for etcd.
      2. En el campo Puntos finales de API de etcd, escriba el punto final de API de la instancia de servicio de Databases for etcd que ha recuperado antes. Indique el punto final con el formato etcd:<etcd_endpoint1>;etcd:<etcd_endpoint2>. Si tiene más de un punto final, incluya todos los puntos finales y sepárelos con un signo de dos puntos (;).
      3. En el campo Nombre de secreto de etcd, escriba el nombre del secreto de Kubernetes que ha creado en el clúster para guardar las credenciales de servicio de Databases for etcd.
    12. En la lista desplegable Nombre de clúster de Kubernetes o de OpenShift, seleccione el clúster en el que desea instalar Portworx. Si el clúster no aparece en la lista, asegúrese de seleccionar la región de IBM Cloud correcta. Si la región es correcta, compruebe que tiene los permisos adecuados para ver y para trabajar con el clúster. Asegúrate de seleccionar un clúster que cumpla los requisitos mínimos de hardware para Portworx.

    13. Opcional: en la lista desplegable de tipo de almacén de secretos de Portworx, elija el tipo de almacén de secretos que desea utilizar para almacenar la clave de cifrado de volumen.

      • Secreto de Kubernetes: elija esta opción si desea almacenar su propia clave personalizada para cifrar los volúmenes en un secreto de Kubernetes en el clúster. El secreto no debe estar presente antes de instalar Portworx. Puede crear el secreto después de instalar Portworx. Para obtener más información, consulta la documentación de « Portworx ».
      • IBM Key Protect: elija esta opción si desea utilizar claves raíz en IBM Key Protect para cifrar los volúmenes. Asegúrese de seguir las instrucciones para crear su instancia de servicio de IBM Key Protect y para almacenar las credenciales relacionadas con cómo acceder a la instancia de servicio en un secreto de Kubernetes en el proyecto portworx antes de instalar Portworx.
    14. Opcional: si desea configurar un dispositivo de diario o dispositivos KVDB, especifique los detalles del dispositivo en el campo Opciones avanzadas. Puede elegir las opciones siguientes para los dispositivos de diario.

      • Especifique j;auto para permitir que Portworx cree automáticamente una partición de 3 GB en uno de los dispositivos de almacenamiento en bloque que se van a utilizarán para el diario.
      • Especifique j;</device/path> para utilizar un dispositivo específico para el diario. Por ejemplo, especifique j;/dev/vde para utilizar el disco ubicado en /dev/vde. Para encontrar la vía de acceso del dispositivo que desea utilizar para el diario, inicie sesión en un nodo de trabajador y ejecute lsblk.
      • Escriba kvdb_dev;<device path> para especificar el dispositivo en el que desea almacenar los datos de la KVDB interna. Por ejemplo, kvdb_dev;/dev/vdd. Para encontrar la vía de acceso del dispositivo que desea utilizar, inicie sesión en un nodo de trabajador y ejecute lsblk. Para utilizar un dispositivo específico para los datos de KVDB, debe tener un dispositivo de almacenamiento disponible de 3 GB o en al menos 3 nodos de trabajador. Además, los dispositivos deben encontrarse en la misma ruta en cada nodo de trabajo. Por ejemplo: /dev/vdd.
  2. Pulse Crear para comenzar la instalación de Portworx en el clúster. El proceso puede tardar varios minutos en completarse. Se abre la página de detalles del servicio con instrucciones sobre cómo verificar la instalación de Portworx, cómo crear una reclamación de volumen persistentes (PVC) y cómo montar la PVC en una app.

  3. En la lista de recursos de « IBM Cloud », busca el servicio « Portworx » que has creado.

  4. Revise la columna de Estado para ver si la instalación se ha ejecutado correctamente o no. El estado puede tardar unos minutos en actualizarse.

  5. Si la columna Status contiene Provision failure, siga las instrucciones para resolver el motivo por el que la instalación ha fallado.

  6. Si Status muestra Provisioned, verifique que la instalación de Portworx se ha realizado correctamente y que todos los discos locales se han reconocido y se han añadido a la capa de almacenamiento de Portworx.

    1. Obtenga una lista de los pods de Portworx del proyecto kube-system. La instalación se ha realizado correctamente cuando se ven uno o varios pods portworx, stork y stork-scheduler. El número de pods equivale al número de nodos de trabajador que hay en el clúster de Portworx. Todos los pods deben estar en un estado Running.
        oc get pods -n kube-system | grep 'portworx\|stork'
        ```
        Salida de ejemplo
        ```sh {: screen}
        portworx-594rw                          1/1       Running     0          20h
        portworx-rn6wk                          1/1       Running     0          20h
        portworx-rx9vf                          1/1       Running     0          20h
        stork-6b99cf5579-5q6x4                  1/1       Running     0          20h
        stork-6b99cf5579-slqlr                  1/1       Running     0          20h
        stork-6b99cf5579-vz9j4                  1/1       Running     0          20h
        stork-scheduler-7dd8799cc-bl75b         1/1       Running     0          20h
        stork-scheduler-7dd8799cc-j4rc9         1/1       Running     0          20h
        stork-scheduler-7dd8799cc-knjwt         1/1       Running     0          20h
        ```
    2. Inicie una sesión en uno de los pods de `portworx` y obtenga una lista del estado del clúster de Portworx.
    ```sh {: pre}
        oc exec <portworx_pod> -it -n kube-system -- /opt/pwx/bin/pxctl status
        ```
        Salida de ejemplo
        ```sh {: screen}
        Status: PX is operational
        License: Trial (expires in 30 days)
        Node ID: 10.176.48.67
        IP: 10.176.48.67
        Local Storage Pool: 1 pool
        POOL    IO_PRIORITY    RAID_LEVEL    USABLE    USED    STATUS    ZONE    REGION
          0    LOW        raid0        20 GiB    3.0 GiB    Online    dal10    us-south
        Local Storage Devices: 1 device
        Device    Path                        Media Type        Size        Last-Scan
            0:1    /dev/mapper/3600a09803830445455244c4a38754c66    STORAGE_MEDIUM_MAGNETIC    20 GiB        17 Sep 18 20:36 UTC
                total                            -            20 GiB
        Cluster Summary
        Cluster ID: mycluster
            Cluster UUID: a0d287ba-be82-4aac-b81c-7e22ac49faf5
        Scheduler: kubernetes
        Nodes: 2 node(s) with storage (2 online), 1 node(s) without storage (1 online)
          IP        ID        StorageNode    Used    Capacity    Status    StorageStatus    Version        Kernel            OS
          10.184.58.11    10.184.58.11    Yes        3.0 GiB    20 GiB        Online    Up        1.5.0.0-bc1c580    4.4.0-133-generic    Ubuntu 20.04.5 LTS
          10.176.48.67    10.176.48.67    Yes        3.0 GiB    20 GiB        Online    Up (This node)    1.5.0.0-bc1c580    4.4.0-133-generic    Ubuntu 20.04.5 LTS
          10.176.48.83    10.176.48.83    No        0 B    0 B        Online    No Storage    1.5.0.0-bc1c580    4.4.0-133-generic    Ubuntu 20.04.5 LTS
        Global Storage Pool
          Total Used        :  6.0 GiB
          Total Capacity    :  40 GiB
        ```
    3. Verifique que todos los nodos trabajadores que desea incluir en la capa de almacenamiento de Portworx están incluidos; para ello revise la columna **StorageNode** de la sección **Cluster Summary** de la salida de la CLI. Los nodos de trabajador que están en la capa de almacenamiento aparecen con `Yes` en la columna **StorageNode**.
    
        Puesto que Portworx se ejecuta como DaemonSet en el clúster, los nodos de trabajoador existentes se inspeccionan automáticamente para el almacenamiento en bloque sin formato y se añaden a la capa de datos de Portworx cuando se despliega Portworx. Si añade nodos de trabajador al clúster y añade almacenamiento en bloque sin formato a esos trabajadores, reinicie los pods de Portworx en los nuevos nodos de trabajador para que el DaemonSet detecte los volúmenes de almacenamiento.
        {: note}
    
    4. Verifique que cada nodo de almacenamiento aparece en la lista con la cantidad correcta de almacenamiento en bloque sin formato; para ello revise la columna **Capacity** en la sección **Cluster Summary** de la salida de la CLI.
    
    5. Revise la clasificación de E/S de Portworx que se ha asignado a los discos que forman parte del clúster de Portworx. Durante la configuración del clúster de Portworx, se inspecciona cada disco para determinar el perfil de rendimiento del dispositivo. La clasificación del perfil depende de la velocidad de la red a la que está conectado el nodo trabajador y del tipo de dispositivo de almacenamiento que tiene. Los discos de los nodos trabajadores SDS se clasifican como `high`. Si conecta discos a un nodo de trabajador virtual manualmente, dichos discos reciben la clasificación `low`, debido a una velocidad de red inferior asociada a los nodos de trabajador virtuales.
    ```sh {: pre}
        oc exec -it <portworx_pod> -n kube-system -- /opt/pwx/bin/pxctl cluster provision-status
        ```
        Salida de ejemplo
    
        ```sh {: screen}
        NODE        NODE STATUS    POOL    POOL STATUS    IO_PRIORITY    SIZE    AVAILABLE    USED    PROVISIONED    RESERVEFACTOR    ZONE    REGION        RACK
        10.184.58.11    Up        0    Online        LOW        20 GiB    17 GiB        3.0 GiB    0 B        0        dal12    us-south    default
        10.176.48.67    Up        0    Online        LOW        20 GiB    17 GiB        3.0 GiB    0 B        0        dal10    us-south    default
        10.176.48.83    Up        0    Online        HIGH        3.5 TiB    3.5 TiB        10 GiB    0 B        0        dal10    us-south    default
        ```
    
    
    

Creación de un volumen de Portworx

Empieza a crear volúmenes de « Portworx » utilizando el aprovisionamiento dinámico de « Kubernetes ».

  1. Obtenga una lista de las clases de almacenamiento disponibles en el clúster y compruebe si puede utilizar una clase de almacenamiento de Portworx existente configurada durante la instalación de Portworx. Las clases de almacenamiento predefinidas se optimizan para su uso en la base de datos y para compartir datos entre pods.

    oc get sc | grep portworx
    

    Para ver los detalles de una clase de almacenamiento, ejecute oc describe storageclass <storageclass_name>.

  2. Si no desea utilizar una clase de almacenamiento existente, cree una clase de almacenamiento personalizada. Para obtener una lista completa de las opciones compatibles que puedes especificar en tu clase de almacenamiento, consulta « Uso del aprovisionamiento dinámico ».

    1. Cree un archivo de configuración para la clase de almacenamiento.
        kind: StorageClass
        apiVersion: storage.k8s.io/v1
        metadata:
          name: <storageclass_name>
        provisioner: kubernetes.io/portworx-volume
        parameters:
          repl: "<replication_factor>"
          secure: "<true_or_false>"
          priority_io: "<io_priority>"
          shared: "<true_or_false>"
        ```
        `metadata.name`
        :   Especifique un nombre para la clase de almacenamiento.
    
        `parameters.repl`
        :   Especifique el número de réplicas de los datos que desea almacenar en distintos nodos trabajadores. Los números permitidos son `1`,`2` o `3`. Por ejemplo, si especifica `3`, los datos se replicarán en tres nodos de trabajador distintos en el clúster de Portworx. Para almacenar sus datos de alta disponibilidad, utilice un clúster multizona y duplique los datos entre tres nodos trabajadores de distintas zonas.
                        Debe tener suficientes nodos de trabajador para cumplir el requisito de réplica. Por ejemplo, si tiene dos nodos trabajadores, pero especifica tres réplicas, la creación de la PVC con esta clase de almacenamiento falla.
            {: note}
    
        `parameters.secure`
        :   Especifique si desea cifrar los datos del volumen con IBM Key Protect. Puede elegir entre las siguientes opciones.
            - `true`: Especifique `true` para habilitar el cifrado para los volúmenes de Portworx. Para cifrar volúmenes, debe tener una instancia de servicio de IBM Key Protect y un secreto de Kubernetes que contenga la clave raíz del cliente. Para obtener más información sobre cómo configurar el cifrado para los volúmenes de Portworx, consulte [Cifrado de volúmenes de Portworx](/docs/openshift?topic=openshift-storage_portworx_encryption).
            - `false`: Cuando se especifica `false`, los volúmenes de Portworx no se cifran. Si no especifica esta opción, los volúmenes de Portworx no se cifran de forma predeterminada. Puede optar por habilitar el cifrado de volúmenes en la PVC, incluso si ha inhabilitado el cifrado en la clase de almacenamiento. El valor de la PVC prevalece sobre los valores de la clase de almacenamiento.
    
        `parameters.priority_io`
        :   Especifique la prioridad de E/S de Portworx que desea solicitar para los datos. Las opciones disponibles son `high`, `medium` y `low`. Durante la configuración del clúster de Portworx, se inspecciona cada disco para determinar el perfil de rendimiento del dispositivo. La clasificación del perfil depende del ancho de banda de red del nodo de trabajador y del tipo de dispositivo de almacenamiento. Los discos de los nodos trabajadores SDS se clasifican como `high`. Si conecta discos a un nodo de trabajador virtual manualmente, dichos discos reciben la clasificación `low`, debido a una velocidad de red inferior asociada a los nodos de trabajador virtuales.
            :    Al crear una PVC con una clase de almacenamiento, el número de réplicas que especifica en `parameters/repl` altera temporalmente la prioridad de E/S. Por ejemplo, cuando especifique tres réplicas que quiera almacenar en discos de alta velocidad, pero solo tiene un nodo trabajador con un disco de alta velocidad en su clúster, la creación de su PVC aún será correcta. Los datos se replican en discos de alta velocidad y de baja velocidad.
    
        `parameters.shared`
        :   Defina si desea permitir que varios pods accedan al mismo volumen. Seleccione una de las opciones siguientes:
            - True: si esta opción se establece a `true`, podrán acceder al mismo volumen varios pods distribuidos entre nodos trabajadores de zonas diferentes.
            - False: si esta opción se establece a `false`, solo podrá acceder al volumen desde varios pods si estos están desplegados en el nodo trabajador que conecta el disco físico que da respaldo al volumen. Si el pod se despliega en un nodo de trabajador diferente, el pod no puede acceder al volumen.
    
    2. Cree la clase de almacenamiento.
    ```sh {: pre}
        oc apply -f storageclass.yaml
        ```
    3. Verifique que se ha creado la clase de almacenamiento.
    ```sh {: pre}
        oc get sc
        ```
    
  3. Cree una reclamación de volumen persistente (PVC).

    1. Cree un archivo de configuración para la PVC.
        kind: PersistentVolumeClaim
        apiVersion: v1
        metadata:
          name: mypvc
        spec:
          accessModes:
            - <access_mode>
          resources:
            requests:
              storage: <size>
          storageClassName: portworx-shared-sc
        ```
        `metadata.name`
        :   Especifique un nombre para la PVC, como por ejemplo `mypvc`.
    
        `spec.accessModes`
        :   Selecciona el [modo de acceso « Kubernetes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes){: external} » que desees utilizar.
    
        `resources.requests.storage`
        :   Especifique la cantidad de almacenamiento en gigabytes que desea asignar desde el clúster de Portworx. Por ejemplo, para asignar 2 gigabytes desde el clúster de Portworx, especifique `2Gi`. La cantidad de almacenamiento que puede especificar está limitada por la cantidad de almacenamiento que está disponible en el clúster de Portworx. Si ha especificado un factor de réplica en la clase de almacenamiento superior a 1, la cantidad de almacenamiento que especifica en la PVC está reservada en varios nodos de trabajador.
    
        `spec.storageClassName`
        :   Especifique el nombre de la clase de almacenamiento que ha elegido o que ha creado anteriormente y que desea utilizar para suministrar el PV. En el archivo YAML de ejemplo se utiliza la clase de almacenamiento `portworx-shared-sc`.
    
    2. Cree la PVC.
    ```sh {: pre}
        oc apply -f pvc.yaml
        ```
    3. Verifique que la PVC se ha creado y se ha vinculado a un volumen persistente (PV). Este proceso puede tardar unos minutos.
    ```sh {: pre}
        oc get pvc
        ```
    
    
    

Montaje del volumen en la app

Para acceder al almacenamiento desde la app, debe montar la PVC en la app.

  1. Cree un archivo de configuración para un despliegue que monte la PVC.

    Para obtener consejos sobre cómo desplegar un conjunto con estado con Portworx, consulte StatefulSets. La documentación de Portworx también incluye ejemplos sobre cómo implementar Cassandra, Kafka, ElasticSearch con Kibana y WordPress con MySQL.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <deployment_name>
      labels:
        app: <deployment_label>
    spec:
      selector:
        matchLabels:
          app: <app_name>
      template:
        metadata:
          labels:
            app: <app_name>
        spec:
          schedulerName: stork
          containers:
          - image: <image_name>
            name: <container_name>
          securityContext:
              fsGroup: <group_ID>
            volumeMounts:
            - name: <volume_name>
              mountPath: /<file_path>
          volumes:
          - name: <volume_name>
            persistentVolumeClaim:
              claimName: <pvc_name>
    
    metadata.labels.app
    Una etiqueta para el despliegue.
    spec.selector.matchLabels.app y spec.template.metadata.labels.app
    Una etiqueta para la app.
    template.metadata.labels.app
    Una etiqueta para el despliegue.
    spec.schedulerName
    Utiliza Stork como programador para tu clúster de Portworx. Con Stork, puedes ubicar los pods junto a sus datos, lo que permite una migración fluida de los pods en caso de errores de almacenamiento y facilita la creación y restauración de instantáneas de los volúmenes de « Portworx ».
    spec.containers.image
    El nombre de la imagen que desea utilizar. Para ver una lista de todas las imágenes disponibles en su cuenta de IBM Cloud Container Registry, ejecute ibmcloud cr image-list.
    spec.containers.name
    El nombre del contenedor que desea desplegar en el clúster.
    spec.containers.securityContext.fsGroup
    Opcional: Para acceder a tu almacenamiento con un usuario que no sea root, especifica el contexto de seguridad de tu pod y define el conjunto de usuarios a los que deseas conceder acceso en la sección « fsGroup » del archivo YAML de tu despliegue. Para obtener más información, consulta « Acceder a volúmenes de « Portworx » con un usuario que no sea root ».
    spec.containers.volumeMounts.mountPath
    La vía de acceso absoluta del directorio en el que el que está montado el volumen dentro del contenedor. Si quieres compartir un volumen entre diferentes aplicaciones, puedes especificar subrutas del volumen para cada una de ellas.
    spec.containers.volumeMounts.name
    El nombre del volumen que va a montar en el pod.
    volumes.name
    El nombre del volumen que va a montar en el pod. Normalmente, este nombre es el mismo que volumeMounts/name.
    volumes.persistentVolumeClaim.claimName
    El nombre de la PVC que enlaza el PV que desea utilizar.
  2. Cree el despliegue.

    oc apply -f deployment.yaml
    
  3. Verifique que el PV se ha montado correctamente en la app.

    oc describe deployment <deployment_name>
    

    El punto de montaje se muestra en el campo Volume Mounts y el volumen se muestra en el campo Volumes.

    Volume Mounts:
            /var/run/secrets/kubernetes.io/serviceaccount from default-token-tqp61 (ro)
            /volumemount from myvol (rw)
    ...
    Volumes:
        myvol:
        Type:    PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:    mypvc
        ReadOnly:    false
    
  4. Verifique que puede escribir datos en el clúster de Portworx.

    1. Inicie la sesión en el pod que monta el PV.
        oc exec <pod_name> -it bash
        ```
    2. Vaya a la vía de acceso de montaje de volumen que ha definido en el despliegue de la app.
    3. Cree un archivo de texto.
    ```sh {: pre}
        echo "This is a test" > test.txt
        ```
    4. Lea el archivo que ha creado.
    ```sh {: pre}
        cat test.txt
        ```