Configura Distributed Cloud para Symcloud Storage

De forma predeterminada, las cargas de trabajo que se ejecutan en un nodo de Google Distributed Cloud no pueden acceder al almacenamiento local de otro nodo de Distributed Cloud. Sin embargo, puedes configurar Google Distributed Cloud para que use Rakuten Symcloud Storage, que es una solución de terceros que actúa como una capa de abstracción de almacenamiento local en cada nodo de Distributed Cloud y hace que su almacenamiento local esté disponible para las cargas de trabajo que se ejecutan en otros nodos de Distributed Cloud.

Symcloud Storage se implementa desde Google Cloud Marketplace y está sujeto a las condiciones que se indican allí. Google proporciona asistencia limitada para usar Symcloud Storage con Distributed Cloud y puede comunicarse con el proveedor externo para obtener ayuda. Las actualizaciones de software de Symcloud Storage se incluyen en las actualizaciones de software de Distributed Cloud.

Clases de almacenamiento de Symcloud

En esta sección, se describen las clases de almacenamiento que Symcloud Storage puede habilitar en tu clúster de Distributed Cloud. Symcloud Storage en Distributed Cloud no admite la clase de almacenamiento robin-rwx ni ningún volumen de modo de sistema de archivos RWX configurado de forma personalizada. Para obtener más información sobre las clases de almacenamiento de Symcloud, consulta Cómo usar Robin CNS en Kubernetes.

Clase de almacenamiento robin

La clase de almacenamiento robin es una clase de almacenamiento básica de lectura y escritura única (RWO). En el siguiente ejemplo, se ilustra la creación de instancias de la clase:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: robin
    labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
provisioner: robin
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer

Clase de almacenamiento robin-immediate

La clase de almacenamiento robin-immediate es igual a robin, excepto que el volumen persistente se crea inmediatamente después de crear la reclamación de volumen persistente correspondiente. En el siguiente ejemplo, se ilustra la creación de instancias de la clase:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: robin-immediate
    labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
provisioner: robin
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: Immediate

Clase de almacenamiento robin-repl-3

robin-repl-3 es una clase de almacenamiento RWO con tres réplicas que abarcan varios nodos de Distributed Cloud. En el siguiente ejemplo, se ilustra la creación de instancias de la clase:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: robin-repl-3
    labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
provisioner: robin
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
parameters:
    replication: "3"
    faultdomain: host

Requisitos previos

Antes de comenzar, completa los siguientes pasos:

  1. Configura el registro y la supervisión para el proyecto de Distributed Cloud de destino.
  2. Crea el clúster de Distributed Cloud de destino.
  3. Configura tu red de Distributed Cloud para que los Pods del clúster de Distributed Cloud de destino puedan acceder al centro de datos Google Cloud .
  4. Vincula cada volumen persistente local-block en cada nodo de Distributed Cloud que no quieras que se abstraiga con Symcloud Storage. Si desvinculas un volumen persistente local-block vinculado, la instalación de Symcloud Storage borrará el contenido de ese volumen persistente. Para obtener instrucciones, consulta Vinculación en la documentación de Kubernetes.

Instala Symcloud Storage en un nodo de Distributed Cloud

Para instalar Symcloud Storage en un nodo de Distributed Cloud, completa los siguientes pasos:

  1. Usa el siguiente comando para aplicar la licencia de Symcloud Storage a tu clúster. Reemplaza LICENSE_FILE por la ruta de acceso completa y el nombre del archivo de licencia de Symcloud Storage.

    kubectl apply -f LICENSE_FILE -n robin-admin
    
  2. Usa el siguiente comando para verificar el estado del servicio RobinCluster y todos los nodos de Symcloud Storage:

    kubectl describe robinclusters -n robinio
    

    El comando muestra un resultado similar al siguiente:

    [...]
    Status:
    [...]
    Phase:              Ready
    robin_node_status:
    [...]
     Status:           Ready
    [...]
     Status:           Ready
    [...]
     Status:           Ready
    [...]
    

    El estado esperado para el servicio y los nodos es Ready.

Configura Symcloud Storage como la clase de almacenamiento predeterminada

Usa el siguiente comando para establecer Symcloud Storage como la clase de almacenamiento predeterminada en tu clúster de Distributed Cloud. Reemplaza STORAGE_CLASS por una de las clases de Symcloud Storage.

kubectl patch storageclass STORAGE_CLASS -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

Para obtener más información sobre cómo configurar la clase de almacenamiento predeterminada, consulta Cambia el recurso StorageClass predeterminado en la documentación de Kubernetes.

Configura volúmenes de almacenamiento de Symcloud abstraídos para cargas de trabajo

En esta sección, se proporcionan ejemplos de cómo usar las clases de Symcloud Storage para configurar el almacenamiento abstracto para tus cargas de trabajo de Distributed Cloud. Para obtener más detalles sobre la configuración de volúmenes de Symcloud Storage, consulta Cómo usar Robin CNS en Kubernetes.

Configura un volumen ext4 RWO en modo de sistema de archivos

En el siguiente ejemplo, se ilustra cómo configurar un reclamo de volumen persistente para un volumen RWO en modo de sistema de archivos con el sistema de archivos ext4. Reemplaza STORAGE_CLASS por una de las clases de Symcloud Storage.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rwo-fs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS

Configura un volumen RWO en modo de bloque

En el siguiente ejemplo, se ilustra cómo configurar un reclamo de volumen persistente para un volumen RWO en modo de bloque. Reemplaza STORAGE_CLASS por una de las clases de almacenamiento de Symcloud.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rwo-block-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS
  volumeMode: Block

Modifica la configuración de un volumen existente

En el siguiente ejemplo, se ilustra cómo modificar la configuración de un volumen RWO comprimido con LZ4 de Symcloud Storage existente con anotaciones. Reemplaza STORAGE_CLASS por una de las clases de almacenamiento de Symcloud.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: compressed-rwo-fs-pvc
  annotations:
    robin.io/compression: LZ4
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS

En el siguiente ejemplo, se muestra cómo modificar la configuración de un volumen de RW de Symcloud Storage existente con el sistema de archivos xfs a través de anotaciones. Reemplaza STORAGE_CLASS por una de las clases de almacenamiento de Symcloud.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rwo-xfs-pvc
  annotations:
    robin.io/fstype: xfs
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS

Configura el cliente de la CLI de Symcloud Storage

Symcloud Storage proporciona un cliente de interfaz de línea de comandos (CLI) que puedes usar para administrar tu configuración de Symcloud Storage. Para configurar el cliente en tu clúster de Distributed Cloud, completa los siguientes pasos:

  1. Obtén la ruta de acceso a la imagen de Symcloud Storage que usa la instancia del servicio RobinCluster implementada en tu clúster de Distributed Cloud:

    kubectl get robincluster -o jsonpath='{.items[].spec.image_robin}'
    
  2. Crea un recurso robincli con el siguiente contenido. Reemplaza ROBIN_CNS_IMAGE por la ruta de acceso completa y el nombre de la imagen que obtuviste en el paso 1.

    kind: Deployment
    apiVersion: apps/v1
    metadata:
     name: robincli
     namespace: default
     labels:
       name: robincli
    spec:
     replicas: 1
     selector:
       matchLabels:
         name: robincli
     template:
       metadata:
         annotations:
           product: robin
         labels:
           name: robincli
       spec:
         containers:
         - name: robincli
           image: ROBIN_CNS_IMAGE
           workingDir: /root
           command: ["/bin/bash","-c","mkdir -p /root/.robin; ln -s -t /usr/lib/python3.7/site-packages/ /opt/robin/current/python3/site-packages/robincli /opt/robin/current/python3/site-packages/stormgr_def.py /opt/robin/current/python3/site-packages/stormgr_lib.py; /opt/robin/current/bin/robin client add-context robin-master.robinio --set-current; while true; do sleep 10000; done"]
           resources:
             requests:
               memory: "10Mi"
               cpu: "100m"
    
  3. Aplica el recurso robincli a tu clúster de Distributed Cloud.

  4. Durante la instalación inicial, Symcloud Storage genera un secreto default-admin-user en el espacio de nombres robinio con una contraseña aleatoria. Usa los siguientes comandos para obtener estas credenciales de acceso:

    1. Obtén el nombre de usuario:

      kubectl -n robinio get secret default-admin-user -o jsonpath='{.data.username}' | base64 -d
      
    2. Obtén la contraseña:

       
      kubectl -n robinio get secret default-admin-user -o jsonpath='{.data.password}' | base64 -d
      
  5. Accede al Pod recién creado y ejecuta el cliente:

    kubectl exec -it robincli -- bash
    

Limitaciones de Symcloud Storage

Cuando usas Symcloud Storage con Distributed Cloud, solo puedes lograr una alta disponibilidad si tu clúster de Distributed Cloud consta de tres o más nodos de Distributed Cloud.