Aplicações Kubernetes frequentemente exigem armazenamento persistente. O ACK integra os serviços de armazenamento da Alibaba Cloud (discos em nuvem, OSS, NAS e CPFS) por meio da Container Storage Interface (CSI) e também oferece suporte a volumes nativos do Kubernetes. Isso proporciona opções flexíveis de armazenamento tanto para cargas de trabalho efêmeras quanto persistentes.
Soluções de armazenamento
As opções de armazenamento do ACK dividem-se em duas categorias:
Volumes nativos do Kubernetes: Usados para dados efêmeros, injeção de configurações ou interação com o nó host. Esses volumes estão vinculados ao ciclo de vida do Pod e não são adequados para dados persistentes de aplicações.
Volumes persistentes da Alibaba Cloud: Integrados aos serviços de armazenamento da Alibaba Cloud via CSI. Esses volumes são desacoplados do ciclo de vida do Pod e oferecem suporte a cargas de trabalho com estado.
Antes de usar os recursos de armazenamento de contêineres, certifique-se de compreender os principais conceitos de armazenamento do Kubernetes , como volumes, PersistentVolumes (PVs) e PersistentVolumeClaims (PVCs).
Volumes nativos do Kubernetes
Os volumes nativos do Kubernetes estão vinculados ao ciclo de vida do Pod e não foram projetados para armazenamento persistente de dados.
Tipo | Descrição | Principais características |
emptyDir | Volume efêmero que compartilha o ciclo de vida do Pod. | Os dados persistem apenas durante a existência do Pod. Ideal para compartilhamento entre contêineres e caches temporários. |
HostPath | Monta um arquivo ou diretório do nó host em um Pod. Use o campo Para mais informações, consulte Volumes HostPath. | Os dados ficam vinculados ao nó e não acompanham o reagendamento do Pod. Não recomendado para aplicações com estado que exigem alta disponibilidade (como bancos de dados ou caches). |
ConfigMap/Secret | Monta entradas de configuração ou credenciais sensíveis como arquivos. | Destinado a pequenos volumes de dados de configuração, e não a dados de aplicação. Use-o para desacoplar a configuração do código da aplicação. |
Volumes persistentes da Alibaba Cloud
Para aplicações com estado que exigem dados persistentes, use volumes de armazenamento persistente suportados pelos serviços de armazenamento da Alibaba Cloud. Esses volumes existem independentemente do ciclo de vida do Pod e integram-se ao Kubernetes por meio da CSI.
Comparação
A tabela de comparação abaixo inclui um índice de referência rápida sob o nome de cada solução de armazenamento. Tomando o disco em nuvem como exemplo:
Disco em nuvem: Serviço de armazenamento. Clique em para ver detalhes.Estático/Dinâmico: Métodos de provisionamento de volume suportados, incluindo volumes provisionados estaticamente (PV/PVC) e dinamicamente (StorageClass/PVC). Clique em para obter instruções passo a passo.
RWO: Modos de acesso suportados (
accessModes): RWO (ReadWriteOnce), RWX (ReadWriteMany) e ROX (ReadOnlyMany).Faturamento: Detalhes de preços. Clique em para ver detalhes.
Solução de armazenamento | Descrição | Compensações e limitações |
Estático/Dinâmico | RWO (sem Multi-Attach) | Faturamento |
|
|
Estático/Dinâmico | RWX, RWO, ROX | Faturamento |
|
|
RWX, ROX | Faturamento |
|
|
Estático/Dinâmico | RWX | Faturamento |
|
|
Estático | RWX | Faturamento |
|
|
Além do desempenho básico, as soluções de armazenamento diferem na forma como lidam com recuperação de falhas, gerenciamento de capacidade e proteção de dados. Considere as seguintes questões para refinar sua escolha.
Principais add-ons e conceitos
-
Add-ons CSI (csi-plugin, csi-provisioner)
Implementação de plugin de armazenamento recomendada pelo Kubernetes, implantada por padrão em clusters ACK. Esses add-ons interagem com as APIs de armazenamento da Alibaba Cloud para gerenciar o ciclo de vida do volume, incluindo provisionamento, anexação, desanexação e exclusão.
-
Um aprimoramento de armazenamento disponível em clusters ACK Pro. O CNFS representa recursos NAS, OSS e CPFS como Custom Resource Definitions (CRDs) do Kubernetes e fornece capacidades de gerenciamento refinado, como criação dinâmica de subdiretórios, gerenciamento de cotas, monitoramento de I/O, gerenciamento de lixeira e cache distribuído.
Notas de uso
Versão do cluster: É necessário Kubernetes 1.14 ou posterior. Para atualizar, consulte Atualizar manualmente um cluster.
-
Ambiente do cluster: A CSI é totalmente testada e validada em clusters ACK. Em clusters não ACK (auto-gerenciados na Alibaba Cloud ou ambientes fora da Alibaba Cloud), a CSI pode exigir adaptação manual devido a diferenças de configuração, permissões e rede.
Para ambientes não ACK, consulte o código-fonte do alibaba-cloud-csi-driver e adapte-o ao seu ambiente.
Configuração do nó: O parâmetro
kubelet--enable-controller-attach-detachdeve ser definido comotrue.Sistema operacional: Nós Windows não são suportados.
-
Permissões RBAC: PVs são recursos com escopo de cluster, enquanto PVCs são recursos com escopo de namespace. Ao configurar o RBAC, considere as diferenças de permissão para esses dois tipos de recursos.
Se as funções predefinidas do ACK (administrador, engenheiro de O&M e outras) não atenderem às suas necessidades, crie funções personalizadas. Por exemplo, a função padrão de engenheiro de O&M tem acesso de leitura e gravação a PVCs, mas apenas leitura a PVs, portanto não pode criar PVs manualmente. Para mais informações, consulte Autorizar operações no cluster com RBAC.
Perguntas frequentes
Como determino qual plugin de armazenamento meu cluster utiliza?
Use um dos métodos a seguir.
Verificar anotações de nó no console
Na página ACK Clusters, clique em no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na coluna Actions, clique em Details e verifique as Annotations do nó na aba Overview.
Se a anotação
volumes.kubernetes.io/controller-managed-attach-detach: trueexistir, o cluster utiliza CSI. Caso contrário, utiliza Flexvolume.
Verificar parâmetros do kubelet via linha de comando
Nós e verifique os parâmetros do kubelet.
ps -ef | grep kubelet
Exemplo de saída (trecho):
--enable-controller-attach-detach=true
true: CSIfalse: Flexvolume
Como conceder permissões CSI manualmente?
A CSI requer permissões para acessar outros serviços da Alibaba Cloud ao anexar, desanexar, criar ou excluir volumes. Por padrão, a CSI é instalada com as permissões necessárias. Se precisar conceder permissões manualmente, use um dos métodos a seguir.
-
Autorização via função RAM (padrão): A CSI utiliza a função AliyunCSManagedCsiRole para acessar outros serviços em nuvem. Para mais informações, consulte Funções do ACK.
Clusters gerenciados ACK: O token da função RAM é armazenado em um Secret chamado
addon.csi.token. Monte este Secret para autorizar a CSI através da função RAM.Clusters dedicados ACK: A CSI herda a função RAM do nó onde seu Pod é executado.
Para mais informações sobre como conceder permissões a funções RAM, consulte Gerenciar permissões para uma função RAM.
-
Autorização via AccessKey:
Variáveis de ambiente: Crie o AccessKey como um Secret do Kubernetes e injete-o no Pod da CSI como variáveis de ambiente. Isso evita que credenciais sejam expostas em texto simples nos manifestos de implantação.
YAML inline: Escreva o AccessKey diretamente no YAML da CSI. Não recomendado para ambientes de produção.