Configurar o Distributed Cloud para o Symcloud Storage

Por padrão, as cargas de trabalho executadas em um nó do Google Distributed Cloud Rack não podem acessar o armazenamento local de outro nó do Distributed Cloud Rack. No entanto, é possível configurar os racks do Google Distributed Cloud para usar o Rakuten Symcloud Storage, uma solução de terceiros que atua como uma camada de abstração de armazenamento local em cada nó do Distributed Cloud e disponibiliza o armazenamento local para cargas de trabalho executadas em outros nós do Distributed Cloud. O Symcloud Storage é a opção de armazenamento padrão e única nos servidores do Google Distributed Cloud.

O Symcloud Storage é implantado no Google Cloud Marketplace e está sujeito aos termos declarados nele. O Google oferece suporte limitado para usar o Symcloud Storage com o Distributed Cloud e pode envolver o provedor terceirizado para receber assistência. As atualizações de software do Symcloud Storage estão incluídas nas atualizações de software do Distributed Cloud.

Classes de armazenamento do Symcloud

Esta seção descreve as classes de armazenamento que o Symcloud Storage pode ativar no seu cluster do Distributed Cloud. O Symcloud Storage no Distributed Cloud não é compatível com a classe de armazenamento robin-rwx nem com volumes de modo de sistema de arquivos RWX configurados de maneira personalizada. Para mais informações sobre classes de armazenamento do Symcloud, consulte Como usar o Robin CNS no Kubernetes.

Classe de armazenamento robin

A classe de armazenamento robin é uma classe básica de armazenamento de leitura e gravação única (RWO, na sigla em inglês). O exemplo a seguir ilustra a instanciação da classe:

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

Classe de armazenamento robin-immediate

A classe de armazenamento robin-immediate é igual a robin, exceto que o volume permanente é criado imediatamente após a criação da reivindicação de volume permanente correspondente. O exemplo a seguir ilustra a instanciação da classe:

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

Classe de armazenamento robin-repl-3

O robin-repl-3 é uma classe de armazenamento RWO com três réplicas que abrangem vários nós do Distributed Cloud. O exemplo a seguir ilustra a instanciação da classe:

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

Pré-requisitos

Antes de começar, siga estas etapas:

  1. Configure a geração de registros e o monitoramento para o projeto de destino do Distributed Cloud.
  2. Crie o cluster de destino do Distributed Cloud.
  3. Configure a rede do Distributed Cloud para que os pods no cluster de destino do Distributed Cloud possam acessar o data center Google Cloud .
  4. Vincule cada volume permanente local-block em cada nó do Distributed Cloud que você não quer que seja abstraído pelo Symcloud Storage. Se você desvincular um volume permanente local-block vinculado, a instalação do Symcloud Storage vai limpar o conteúdo desse volume permanente. Para instruções, consulte Vinculação na documentação do Kubernetes.

Instalar o Symcloud Storage em um nó do Distributed Cloud

Para instalar o Symcloud Storage em um nó do Distributed Cloud, siga estas etapas:

  1. Use o comando a seguir para aplicar a licença do Symcloud Storage ao cluster. Substitua LICENSE_FILE pelo caminho completo e o nome do arquivo de licença do Symcloud Storage.

    kubectl apply -f LICENSE_FILE -n robin-admin
    
  2. Use o comando a seguir para verificar o status do serviço RobinCluster e de todos os nós do Symcloud Storage:

    kubectl describe robinclusters -n robinio
    

    O comando retorna uma saída semelhante a esta:

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

    O status esperado para o serviço e os nós é Ready.

Definir o armazenamento do Symcloud como a classe de armazenamento padrão

Use o comando a seguir para definir o Symcloud Storage como a classe de<br>armazenamento padrão no seu cluster do Distributed Cloud. Substitua STORAGE_CLASS por uma das classes de armazenamento do Symcloud.

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

Para mais informações sobre como definir a classe de armazenamento padrão, consulte Alterar o StorageClass padrão na documentação do Kubernetes.

Configurar volumes de armazenamento do Symcloud abstraídos para cargas de trabalho

Nesta seção, mostramos exemplos de como usar classes de armazenamento do Symcloud para configurar o armazenamento abstraído para suas cargas de trabalho do Distributed Cloud. Para mais detalhes sobre como configurar volumes do Symcloud Storage, consulte Como usar o Robin CNS no Kubernetes.

Configurar um volume ext4 RWO no modo de sistema de arquivos

O exemplo a seguir ilustra como configurar uma reivindicação de volume permanente para um volume RWO no modo de sistema de arquivos com o sistema de arquivos ext4. Substitua STORAGE_CLASS por uma das classes de armazenamento do Symcloud.

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

Configurar um volume RWO no modo de bloqueio

O exemplo a seguir ilustra como configurar uma solicitação de volume permanente para um volume RWO no modo de bloco. Substitua STORAGE_CLASS por uma das classes de armazenamento do Symcloud.

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

Modificar a configuração de um volume atual

O exemplo a seguir ilustra como modificar a configuração de um volume RWO compactado com LZ4 do Symcloud Storage usando anotações. Substitua STORAGE_CLASS por uma das classes de armazenamento do 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

O exemplo a seguir mostra como modificar a configuração de um volume RWO do Symcloud Storage com o sistema de arquivos xfs usando anotações. Substitua STORAGE_CLASS por uma das classes de armazenamento do 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

Configurar o cliente da CLI do Symcloud Storage

O Symcloud Storage oferece um cliente de interface de linha de comando (CLI) que pode ser usado para gerenciar a configuração do Symcloud Storage. Para configurar o cliente no cluster do Distributed Cloud, siga estas etapas:

  1. Receba o caminho da imagem do Symcloud Storage usado pela instância do serviço RobinCluster implantada no cluster do Distributed Cloud e defina as variáveis de ambiente da seguinte maneira:

    image_robin=$(kubectl get robincluster -o jsonpath='{.items[].spec.image_robin}')
    image_registry_path=$(kubectl get robincluster -o jsonpath='{.items[].spec.image_registry_path}')
    ROBIN_CNS_IMAGE="$image_registry_path/$image_robin"
    
  2. Crie um recurso robincli com o seguinte conteúdo:

    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"
    

    Substitua ROBIN_CNS_IMAGE pelo caminho completo do repositório e nome da imagem que você obteve na etapa 1.

  3. Aplique o recurso robincli ao cluster do Distributed Cloud.

  4. Na instalação inicial, o Symcloud Storage gera um secret default-admin-user no namespace robinio com uma senha aleatória. Use os comandos a seguir para receber essas credenciais de login:

    1. Consiga o nome de usuário:

      kubectl -n robinio get secret default-admin-user -o jsonpath='{.data.username}' | base64 -d
      
    2. Obtenha a senha:

       
      kubectl -n robinio get secret default-admin-user -o jsonpath='{.data.password}' | base64 -d
      
  5. Faça login no pod recém-criado e execute o cliente:

    kubectl exec -it robincli -- bash
    

Limitações do Symcloud Storage

Ao usar o Symcloud Storage com o Distributed Cloud, só é possível alcançar alta disponibilidade se o cluster do Distributed Cloud tiver três ou mais nós.