Usando Armazenamento Distribuído da Alibaba Cloud com Clusters K8S Auto-hospedados

Introdução

Este artigo foi escrito em 14/06/2024 e apresenta como usar o armazenamento distribuído da Alibaba Cloud em clusters auto-hospedados na Alibaba Cloud, anexando links de documentação no final. A documentação oficial da Alibaba Cloud está em chinês, mas o plugin de armazenamento da Alibaba Cloud está hospedado no GitHub e, atualmente, possui documentação apenas em inglês. Recomenda-se que os leitores que tiverem condições leiam o texto original o máximo possível.

Instalação do Plugin de Armazenamento

  1. Crie uma política de permissões personalizada: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
  2. Crie um papel RAM, conceda a política de permissões personalizada e guarde o accesskey e secret temporariamente.
    1. kubectl create secret -n kube-system generic csi-access-key --from-literal=id='{id}' --from-literal=secret='{secret}'
  3. Instale o driver CSI. Não há helm chart, só é possível instalar localmente (20240613).
    1. git clone https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver.git
    2. cd alibaba-cloud-csi-driver/deploy
    3. Se for um cluster auto-hospedado instalado no ECS da Alibaba Cloud, você pode executar a próxima frase diretamente, caso contrário, por favor, leia você mesmo: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/install.md
    4. helm upgrade --install alibaba-cloud-csi-driver ./chart --values chart/values-ecs.yaml --namespace kube-system
  4. Confirme, watch kubectl get pods -n kube-system -l app=csi-plugin

Referência de Seleção de Tipo de Armazenamento

  • A capacidade mínima para criação de um disco de nuvem ECS é 20GB, com 3000 IOPS. Esta capacidade é relativamente grande e não é muito vantajosa.
    • Volume de Armazenamento Dinâmico de Disco de Nuvem
      • Documentação oficial:
        • O disco de nuvem não suporta uso entre zonas de disponibilidade, é um armazenamento não compartilhado e só pode ser montado por um Pod por vez. (Testado: pode ser montado por vários pods do mesmo deployment)
        • O tipo de disco de nuvem e o tipo de ECS precisam corresponder para serem montados, caso contrário, a montagem falhará. Para obter informações sobre a relação de correspondência entre tipos de disco de nuvem e tipos de ECS, consulte Família de Tipos de Instância
        • Durante a implantação da aplicação, o PV é criado automaticamente por meio do StorageClass para comprar o disco de nuvem. Se você já comprou um disco de nuvem, recomenda-se usar o volume de armazenamento estático de disco de nuvem.
        • O tamanho do disco de nuvem solicitado não pode exceder o intervalo de capacidade de um único disco.
        • Quando o Pod for recriado, o disco de nuvem original será montado novamente. Se, devido a outras restrições, não for possível agendar para a zona de disponibilidade original, o Pod ficará em estado Pending.
        • O disco de nuvem criado dinamicamente é um disco de pagamento sob demanda.
      • Resumo de outros testes:
        • Embora o disco de nuvem possa ser montado por vários pods, apenas um pod pode ler e escrever, os outros pods não podem ler nem escrever. Portanto, o accessModes no PVC só pode ser definido como ReadWriteOnce, modificar isso não trará o resultado correto.
        • Se o reclaimPolicy do StorageClass for definido como Delete, ao excluir o PVC, o disco de nuvem também pode ser excluído automaticamente.
        • Se o reclaimPolicy do StorageClass for definido como Retain, ao excluir o PVC, o disco de nuvem não será excluído automaticamente e precisará ser excluído manualmente no cluster e no console da Alibaba Cloud.
      • É difícil encontrar um cenário de uso adequado.
    • Volume de Armazenamento Estático de Disco de Nuvem
      • Documentação oficial:
        • Crie manualmente PV e PVC.
        • O disco de nuvem não suporta uso entre zonas de disponibilidade, é um armazenamento não compartilhado e só pode ser montado por um Pod por vez.
        • O tipo de disco de nuvem e o tipo de ECS precisam corresponder para serem montados, caso contrário, a montagem falhará.
        • Você pode escolher um disco de nuvem no estado ‘a ser montado’ na mesma região e zona de disponibilidade do cluster.
  • A latência de operação do NAS é relativamente alta, o melhor desempenho é 2ms, armazenamento profundo 10ms, pagamento sob demanda, o desempenho de leitura e gravação é maior em comparação com o armazenamento de objetos OSS.
  • Volume de Armazenamento OSS, https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/oss-volume-overview-1?spm=a2c4g.11186623.0.0.43166a351NbtvU
    • OSS é um armazenamento compartilhado e pode fornecer serviços de armazenamento compartilhado para vários Pods simultaneamente.
    • (20240613) Atualmente suporta CentOS, Alibaba Cloud Linux, ContainerOS e o sistema operacional OpenAnolis.
    • Ao usar volumes de dados, cada aplicação usa um nome de PV independente.
    • O volume de dados OSS é um sistema de arquivos FUSE montado usando o arquivo ossfs.
      • Adequado para cenários de leitura de arquivos. Por exemplo, cenários como ler arquivos de configuração, vídeos, arquivos de imagem, etc.
      • Não adequado para cenários de aplicação de escrita de arquivos. Se precisar escrever arquivos, recomenda-se usar o SDK para realizar a operação de escrita ou usar o serviço de volume de armazenamento NAS.
    • O ossfs pode otimizar seu desempenho em cache, permissões e outros aspectos ajustando os parâmetros de configuração.
    • Limitações de uso do ossfs
      • Operações de gravação de arquivo aleatórias ou de acréscimo farão com que todo o arquivo seja reescrito.
      • Como é necessário acessar remotamente o servidor OSS, o desempenho de operações de metadados como list directory é ruim.
      • A operação de renomeação de arquivos e pastas não é atômica.
      • Quando vários clientes montam o mesmo Bucket OSS, depende do usuário coordenar o comportamento de cada cliente, por exemplo, evitar que vários clientes escrevam no mesmo arquivo, etc.
      • Não suporta Hard Link.
      • Quando o plugin CSI for versão inferior a v1.20.7, ele detecta apenas modificações locais e não modificações externas de outros clientes ou ferramentas.
      • Para evitar o aumento da carga do sistema, não o use em cenários de leitura e gravação com alta simultaneidade.
  • Se for um cluster híbrido (alguns nós não pertencem à Alibaba Cloud), então só é possível usar NAS e volumes estáticos OSS.
  • O disco de nuvem, NAS e OSS têm suas restrições de região.

Em resumo, o disco de nuvem é solicitado e montado como um disco rígido inteiro, o que não é conveniente para compartilhamento. O OSS opera em nível de arquivo e existem problemas de desempenho em leitura e gravação com alta simultaneidade, e o suporte a sistemas é limitado.

  • O disco de nuvem é adequado para cenários como bancos de dados que exigem muito espaço e alto desempenho.
  • Outros com requisitos de desempenho não tão altos podem escolher NAS.
  • O OSS não é adequado para cenários de gravação com alta simultaneidade em clusters Alibaba Cloud, mas pode ser aplicado em cenários de leitura simultânea.

A documentação oficial da Alibaba Cloud tem problemas de localização não unificada e contradições; os leitores precisam julgar por si com base na data da documentação. Alguns recursos declarados como não suportados podem já ter suporte com a atualização das versões, sendo necessário fazer algumas tentativas por conta própria.

Passos de Operação

Esta é a documentação oficial de orientação da Alibaba Cloud. Depois de instalar o plugin de armazenamento da Alibaba Cloud seguindo as instruções acima, você pode seguir o Usar Volume de Armazenamento Estático NAS para realizar a implantação e o teste.

Nota: Usuários do k3s encontrarão problemas com local-path-storage. As mensagens de erro podem incluir,

  • failed to provision volume with StorageClass “local-path”: claim.Spec.Selector is not supported
  • Waiting for a volume to be created either by the external provisioner ’localplugin.csi.alibabacloud.com’ or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.

É necessário definir o storageClassName do persistentVolumeClaim como vazio para evitar usar o local-path-storage padrão do k3s.

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nas
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-nas
  storageClassName: ""

Referências