Aplicações no Kubernetes frequentemente precisam de armazenamento persistente. O ACK integra os service de armazenamento da Alibaba Cloud (alibaba cloud) (cloud disks, 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 para workloads efêmeros e persistentes.
Soluções de armazenamento
As opções de armazenamento do ACK se dividem em duas categorias:
Volumes nativos do Kubernetes: indicados para dados efêmeros, injeção de configuração 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 service de armazenamento da Alibaba Cloud por meio da CSI. Esses volumes são desacoplados do ciclo de vida do Pod e oferecem suporte a workloads com estado.
Antes de usar os recursos de armazenamento de contêineres, certifique-se de compreender os conceitos fundamentais do Kubernetes storage concepts 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 são projetados para o armazenamento persistente de dados.
Tipo | Descrição | Recursos principais |
emptyDir | Um volume efêmero que compartilha o ciclo de vida do Pod. | Os dados persistem apenas durante o ciclo de vida do Pod. Ideal para compartilhamento entre contêineres e caches efêmeros. |
HostPath | Monta um arquivo ou diretório do nó host em um Pod. Use o campo Para mais informações, consulte HostPath volumes. | 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 dados de configuração de pequeno porte, e não a dados de aplicações. Use 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 oferecidos pelos service de armazenamento da Alibaba Cloud. Esses volumes existem de forma independente do ciclo de vida do Pod e se integram 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 cloud disk como exemplo:
Cloud disk: o service de armazenamento. clique em para obter detalhes.Static/Dynamic: volume provisioning methods com suporte, incluindo volumes provisionados estaticamente (PV/PVC) e volumes provisionados dinamicamente (StorageClass/PVC). Clique para obter instruções passo a passo.
RWO: access modes com suporte (
accessModes): RWO (ReadWriteOnce), RWX (ReadWriteMany) e ROX (ReadOnlyMany).Billing: detalhes de preços. Clique para obter mais informações.
Solução de armazenamento | Descrição | Trade-offs e limitações |
|
| |
|
| |
RWX, ROX | Billing |
|
|
|
| |
|
|
Além do desempenho de base, as soluções de armazenamento também diferem na forma como lidam com a recuperação de falhas, o gerenciamento de capacidade e a proteção de dados. Considere as seguintes perguntas para refinar sua escolha.
Principais add-ons e conceitos
-
CSI add-ons(csi-plugin, csi-provisioner)
A implementação de plugin de armazenamento recomendada pelo Kubernetes, implantada por padrão em clusters ACK. Esses add-ons interagem com as API de armazenamento da Alibaba Cloud e gerencie 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 os recursos de NAS, OSS e CPFS como Custom Resource Definitions (CRDs) do Kubernetes e fornece recursos de gerenciamento de granularidade fina, 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 o Kubernetes 1.14 ou posterior. Para fazer o upgrade, consulte Manually upgrade a cluster.
-
Ambiente do cluster: a CSI é totalmente testada e validada em clusters ACK. Em clusters não ACK (ambientes autogerenciados da Alibaba Cloud ou ambientes fora da Alibaba Cloud), a CSI pode precisar de adaptação manual, pois a configuração, as permissões e a rede são diferentes.
Para ambientes não ACK, consulte o source do alibaba-cloud-csi-driver e adapte-o ao seu ambiente.
Configuração do nó: defina o parâmetro
kubelet--enable-controller-attach-detachcomotrue.Sistema operacional: não há suporte para nós Windows.
-
Permissões RBAC: os PVs são recursos no escopo do cluster, e os PVCs são recursos no escopo do namespace. configure o RBAC considerando as diferenças de permissão para esses dois tipos de recurso.
Se as funções predefinidas do ACK (administrador, engenheiro de O&M, entre 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 aos PVCs, mas acesso somente leitura aos PVs, portanto, não pode criar PVs manualmente. Para mais informações, consulte Authorize operations on in-cluster resources with RBAC.
Perguntas frequentes
Como determinar qual plugin de armazenamento meu cluster usa?
Use um dos seguintes métodos.
Verificar anotações de nó no console
Na página ACK Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na coluna Actions, clique em Details e, em seguida, verifique as Annotations do nó na aba Overview.
Se a anotação
volumes.kubernetes.io/controller-managed-attach-detach: trueexistir, o cluster usa a CSI. Caso contrário, usa o Flexvolume.
Verificar parâmetros do kubelet via linha de comando
Nodes e verifique os parâmetros do kubelet.
ps -ef | grep kubelet
Exemplo de saída (truncada):
--enable-controller-attach-detach=true
true: CSIfalse: Flexvolume
Como conceder permissões CSI manualmente?
A CSI requer permissões para acessar outros service da Alibaba Cloud ao anexar, desanexar, criar ou excluir volumes. Por padrão, a CSI é instalada com as permissões necessárias. Se você precisar conceder permissões manualmente, use um dos seguintes métodos.
-
Autorização de função RAM (padrão): a CSI usa a função AliyunCSManagedCsiRole para acessar outros service da cloud. Para mais informações, consulte ACK roles.
Clusters gerenciados pelo ACK: o token da função RAM é armazenado em um Secret chamado
addon.csi.token. Monte este Secret para autorizar a CSI por meio da função RAM.Clusters dedicados do 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 Manage permissions for a RAM role.
-
Autorização por AccessKey:
Variáveis de ambiente: crie o AccessKey como um Secret do Kubernetes e, em seguida, injete-o no Pod da CSI como variáveis de ambiente. Isso evita que as credenciais fiquem 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.