Instalar o Armazenamento de Contêineres do Azure para uso com o Serviço de Kubernetes do Azure

O Armazenamento de Contêineres do Azure é um serviço de gerenciamento de volume, implantação e orquestração baseado em nuvem criado para contêineres. Use este tutorial para instalar a versão de produção mais recente do Armazenamento de Contêineres do Azure em um cluster do AKS (Serviço de Kubernetes do Azure), quer você crie um novo cluster ou habilite o serviço em um cluster existente.

Este artigo explica como instalar o Azure Container Storage usando dois fluxos compatíveis (somente instalador ou instalador + recurso), como a instalação de componentes é acionada e como verificar e solucionar problemas da sua implantação. Tipos de armazenamento de volumes persistentes instalam drivers que implementam a Interface de Armazenamento de Contêineres (CSI). O Armazenamento de contêineres do Azure também pode habilitar e gerenciar aceleradores distribuídos para armazenamento em nuvem (DACS), que instala uma extensão separada e não cria uma StorageClass.

Se você preferir a versão de software livre do Armazenamento de Contêineres do Azure, consulte o repositório local-csi-driver para obter instruções de instalação alternativas.

Ao final deste tutorial, você pode:

  • Preparar seu ambiente da CLI do Azure
  • Criar ou selecionar um grupo de recursos para o cluster
  • Confirme se os tipos de máquina virtual do pool de nós atendem aos critérios de instalação
  • Instalar o Armazenamento de Contêineres do Azure criando um novo cluster do AKS ou habilitando-o em um cluster existente

Importante

Este artigo se aplica ao Armazenamento de Contêineres do Azure (versão 2.x.x). Para versões anteriores, consulte a documentação do Armazenamento de Contêineres do Azure (versão 1.x.x). Se você já tiver o Armazenamento de Contêineres do Azure (versão 1.x.x) instalado no cluster do AKS, remova-o seguindo estas etapas.

Pré-requisitos

  • Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

  • Este artigo requer a versão da CLI do Azure v2.83.0 ou posterior. Para obter mais informações, veja Como instalar a CLI do Azure. Desabilite extensões, como aks-preview se ocorrerem problemas. Instale ou atualize as extensões conforme necessário:

    • az extension add --upgrade --name k8s-extension
    • az extension add --upgrade --name elastic-san (Somente SAN elástico)
  • Você precisa do cliente de linha de comando do Kubernetes. kubectl Ele já está instalado se você estiver usando o Azure Cloud Shell. Você pode instalá-lo localmente executando o az aks install-cli comando.

  • Verifique se a região de destino tem suporte nas regiões do Armazenamento de Contêineres do Azure.

  • Planeje a configuração do pool de nós:

    • Use o Linux como o tipo de sistema operacional (o Windows não tem suporte).
    • Selecione um SKU de VM (máquina virtual) que dê suporte a discos de dados NVMe locais se você planeja usar o tipo de armazenamento NVMe local, como VMs com otimização de armazenamento ou aceleradas por GPU .
    • Para clusters existentes, certifique-se de que os pools de nós já estejam usando uma SKU de VM compatível antes de habilitar o Armazenamento de Contêineres do Azure.
  • Se você usar o Elastic SAN pela primeira vez na assinatura, execute este comando de registro único:

    az provider register --namespace Microsoft.ElasticSan
    

Definir o contexto da assinatura

Defina o contexto da sua assinatura do Azure usando o comando az account set. Você pode exibir IDs de assinatura executando az account list --output table. Substitua <subscription-id> por sua ID da assinatura.

az account set --subscription <subscription-id>

Criar um grupo de recursos

Um grupo de recursos do Azure é um contêiner lógico para recursos. Ao criar um grupo de recursos, especifique um local. Esse local armazena metadados do grupo de recursos e serve como a região padrão para recursos criados sem uma região explícita.

Crie um grupos de recursos usando az group create. Substitua <resource-group-name> pelo nome do grupo de recursos e <location> por uma região do Azure, como eastus, westus2, westus3ou westeurope. Se você habilitar o Armazenamento de Contêineres do Azure em um cluster do AKS existente, use o grupo de recursos que já hospeda o cluster.

az group create --name <resource-group-name> --location <location>

Se o grupo de recursos for criado com êxito, você verá uma saída semelhante a este exemplo:

{
  "id": "/subscriptions/<guid>/resourceGroups/myContainerStorageRG",
  "location": "eastus",
  "managedBy": null,
  "name": "myContainerStorageRG",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null
}

Instalar o Armazenamento de Contêineres do Azure em um novo cluster do AKS

Escolha o cenário que corresponde ao seu ambiente.

Importante

O Armazenamento de Contêineres do Azure instala a versão principal mais recente por padrão. Você pode fixar uma versão principal como --container-storage-version. Você não pode fixar versões secundárias ou de patch.

Instalação somente do instalador

Execute o comando a seguir para criar um novo cluster do AKS e instalar o Armazenamento de Contêineres do Azure. Substitua <cluster-name> e <resource-group> pelos seus próprios valores e especifique qual tipo de VM você deseja usar.

az aks create -n <cluster-name> -g <resource-group> --node-vm-size Standard_L8s_v3 --enable-azure-container-storage --generate-ssh-keys

A implantação pode levar até 5 minutos. A instalação do driver CSI é adiada até que você crie uma classe de armazenamento ou habilite um tipo de armazenamento posteriormente.

Siga as instruções para criar uma classe de armazenamento NVMe local ou uma classe de armazenamento Elástico SAN .

Instalação do instalador + instalação de tipo de armazenamento

Execute o comando a seguir para criar um novo cluster do AKS e instalar o Armazenamento de Contêineres do Azure. Substitua <cluster-name> e <resource-group> pelos seus próprios valores e especifique qual tipo de VM você deseja usar.

az aks create -n <cluster-name> -g <resource-group> --node-vm-size Standard_L8s_v3 --enable-azure-container-storage ephemeralDisk --generate-ssh-keys

Esse comando instala o instalador, implanta o driver CSI NVMe local e cria uma classe de armazenamento padrão chamada local-csi. Você pode instalar e usar o NVMe local e o Elastic SAN fornecendo uma lista como ephemeralDisk elasticSan.

Instalar o Armazenamento de Contêineres do Azure em um cluster do AKS existente

Instalação somente do instalador

Execute o comando a seguir para habilitar o Armazenamento de Contêineres do Azure em um cluster do AKS existente. Substitua <cluster-name> e <resource-group> pelos seus próprios valores.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage

A implantação pode levar até 5 minutos. Quando for concluído, o cluster terá o componente instalador do Armazenamento de Contêiner do Azure instalado. A instalação do driver CSI é adiada até que você crie uma classe de armazenamento ou habilite um tipo de armazenamento posteriormente. Siga as instruções para criar uma classe de armazenamento NVMe local ou uma classe de armazenamento Elástico SAN .

Instalação do instalador + instalação de tipo de armazenamento

Execute o comando a seguir para habilitar o Armazenamento de Contêineres do Azure em um cluster do AKS existente. Substitua <cluster-name> e <resource-group> pelos seus próprios valores, e especifique qual tipo de armazenamento você deseja usar.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage elasticSan

Esse comando instala o instalador, implanta o driver ELASTIC SAN CSI e cria uma classe de armazenamento padrão chamada azuresan-csi. Você pode instalar e usar o NVMe local e o Elastic SAN fornecendo uma lista como ephemeralDisk elasticSan.

Instalar o acelerador distribuído para armazenamento em nuvem (prévia)

Ative o acelerador distribuído para armazenamento em nuvem em um cluster AKS existente usando o distributedAccelerator valor. A letra maiúscula A é obrigatória. A extensão se instala no recurso de cluster gerenciado do AKS; você não precisa conectar o cluster ao Arc.

Use aks-preview versão 22.0.0b9 ou posterior. Instale ou atualize a extensão, verifique sua versão, instale ou atualize connectedk8s e k8s-extension para gerenciar e inspecionar a extensão DACS:

az extension add --name aks-preview --upgrade --yes
az extension show --name aks-preview --query version --output tsv
az extension add --name connectedk8s --upgrade --yes
az extension add --name k8s-extension --upgrade --yes

Antes de ativar o DACS, selecione um pool de nós Linux com discos de dados NVMe locais dedicados ao cache. Aplique o rótulo dacs.azure.com/processing-unit=cpu por meio da configuração de pool de nós, preservando quaisquer etiquetas personalizadas existentes. Siga Verificar o pool de nós de cache.

Caution

Ativar o DACS instala um DaemonSet pré-requisito que descobre, formata e monta discos NVMe locais em nós de cache rotulados. Rotule apenas nós com discos que não sejam reivindicados por outro componente de armazenamento.

Execute o seguinte comando, substituindo <cluster-name> e <resource-group> com seus valores:

az aks update \
  --name <cluster-name> \
  --resource-group <resource-group> \
  --enable-azure-container-storage distributedAccelerator

Esse comando instala a distributedaccelerator extensão, o controlador DACS e o pré-requisito NVMe DaemonSet em kube-system, e a caches.storage.azure.com definição personalizada de recurso (CRD). Você não instala um gráfico de pré-requisitos separado nem gerencia o release do Helm da extensão por conta própria. Ele não cria uma StorageClass nem provisiona um recurso de cache e pods de servidor de cache por padrão. A instalação bem-sucedida de extensões não significa por si só que um cache está pronto para tráfego de aplicações.

Passe distributedAccelerator sozinho neste comando, em vez de combiná-lo com as opções de armazenamento de volumes persistentes mostradas anteriormente. Antes de provisionar servidores de cache, verifique se os pré-requisitos gerenciados estão prontos em cada nó de cache rotulado. Para a configuração do cache e o fluxo de trabalho da aplicação, veja Comece com acelerador distribuído para armazenamento em nuvem no AKS.

Para remover DACS, siga Remover acelerador distribuído para armazenamento em nuvem. Exclua os recursos do cache enquanto o controlador está rodando, depois desative o DACS. A desativação remove o controlador e o pré-requisito gerenciado DaemonSet; não remova esses pré-requisitos separadamente.

  • Preparar o Terraform e autenticar no Azure
  • Definir o grupo de recursos e a configuração do cluster do AKS
  • Confirme se os tipos de máquina virtual do pool de nós atendem aos critérios de instalação
  • Aplicar o Terraform para implantar o Armazenamento de Contêineres do Azure ou habilitá-lo em um cluster existente

Importante

Este artigo se aplica ao Armazenamento de Contêineres do Azure (versão 2.x.x). Para versões anteriores, consulte a documentação do Armazenamento de Contêineres do Azure (versão 1.x.x). Se você já tiver o Armazenamento de Contêineres do Azure (versão 1.x.x) instalado no cluster do AKS, remova-o seguindo estas etapas.

Pré-requisitos

  • Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

  • Este artigo requer a versão da CLI do Azure v2.83.0 ou posterior. Para obter mais informações, veja Como instalar a CLI do Azure. Desabilite extensões, como aks-preview se ocorrerem problemas. Instale ou atualize as extensões conforme necessário:

    • az extension add --upgrade --name k8s-extension
    • az extension add --upgrade --name elastic-san (Somente SAN elástico)
  • Você precisa do cliente de linha de comando do Kubernetes. kubectl Ele já está instalado se você estiver usando o Azure Cloud Shell. Você pode instalá-lo localmente executando o az aks install-cli comando.

  • Verifique se a região de destino tem suporte nas regiões do Armazenamento de Contêineres do Azure.

  • Planeje a configuração do pool de nós:

    • Use o Linux como o tipo de sistema operacional (o Windows não tem suporte).
    • Selecione um SKU de máquina virtual (VM) que dê suporte a discos de dados NVMe locais, como VMs com otimização de armazenamento ou aceleradas por GPU .
    • Para clusters existentes, certifique-se de que os pools de nós já estejam usando uma SKU de VM compatível antes de habilitar o Armazenamento de Contêineres do Azure.
  • Instale o Terraform versão 1.5 ou posterior e confirme a instalação com terraform version. O Terraform pode reutilizar a autenticação da CLI do Azure.

  • Se você usar o Elastic SAN pela primeira vez na assinatura, execute este comando de registro único:

    az provider register --namespace Microsoft.ElasticSan
    

Definir o contexto da assinatura

O Terraform pode determinar uma assinatura do Azure de destino por meio de vários métodos:

  • subscription_id no bloco do provedor
  • Variável de ambiente ARM_SUBSCRIPTION_ID
  • Assinatura padrão da CLI do Azure
  • Identidade gerenciada (ao executar no Azure)

Para uso local, defina o contexto da CLI do Azure:

az account set --subscription <subscription-id>

Se você estiver realizando a implantação com o Terraform pela primeira vez na assinatura, execute este comando de registro único:

az provider register --namespace Microsoft.KubernetesConfiguration

# Wait for registration to complete (can take a few minutes)
az provider show --namespace Microsoft.KubernetesConfiguration --query "registrationState" -o tsv

Instalar o Armazenamento de Contêineres do Azure em um novo cluster do AKS

Importante

O Armazenamento de Contêineres do Azure instala a versão mais recente disponível e se atualiza automaticamente. Não há suporte para a seleção manual de versão.

  1. Em um diretório de trabalho vazio, crie um main.tf arquivo com a seguinte configuração mínima de um cluster do AKS. Atualize os nomes de recursos, os locais e os tamanhos da VM para atender às suas necessidades.

    terraform {
      required_version = ">= 1.5.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    resource "azurerm_resource_group" "rg" {
      name     = "demo-aks-rg"
      location = "eastus"
    }
    
    resource "azurerm_kubernetes_cluster" "aks" {
      name                = "demo-aks-cluster"
      dns_prefix          = "demo-aks"
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
    
      default_node_pool {
        name       = "systempool"
        vm_size    = "Standard_L8s_v3"
        node_count = 3
      }
    
      identity {
        type = "SystemAssigned"
      }
    }
    
    resource "azurerm_kubernetes_cluster_extension" "container_storage" {
      # NOTE: the `name` parameter must be "acstor" for Azure CLI compatibility
      name           = "acstor"
      cluster_id     = azurerm_kubernetes_cluster.aks.id
      extension_type = "microsoft.azurecontainerstoragev2"
    }
    
  2. Inicialize o diretório de trabalho para baixar o provedor do AzureRM.

    terraform init
    
  3. Examine as alterações planejadas.

    terraform plan
    
  4. Aplique a configuração para criar o grupo de recursos, o cluster do AKS e a extensão de Armazenamento de Contêiner do Azure. A implantação normalmente leva 5 minutos.

    terraform apply
    

Quando for concluído, o cluster terá o componente instalador do Armazenamento de Contêiner do Azure instalado. A instalação do driver CSI é adiada até que você crie uma classe de armazenamento. Siga as instruções para criar uma classe de armazenamento NVMe local ou uma classe de armazenamento Elástico SAN .

Instalar o Armazenamento de Contêineres do Azure em um cluster do AKS existente

Se o cluster do AKS já existir e você gerenciá-lo fora do Terraform, você ainda poderá habilitar o Armazenamento de Contêineres do Azure criando apenas o recurso de extensão. Use uma fonte de dados para pesquisar a ID do cluster.

terraform {
  required_version = ">= 1.5.0"
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 4.0"
    }
  }
}

provider "azurerm" {
  features {}
}

data "azurerm_kubernetes_cluster" "existing" {
  name                = "existing-aks"
  resource_group_name = "existing-aks-rg"
}

resource "azurerm_kubernetes_cluster_extension" "container_storage" {
  # NOTE: the `name` parameter must be "acstor" for Azure CLI compatibility
  name           = "acstor"
  cluster_id     = data.azurerm_kubernetes_cluster.existing.id
  extension_type = "microsoft.azurecontainerstoragev2"
}

Execute terraform init (se este for um novo diretório de trabalho) seguido de terraform apply instalar o Armazenamento de Contêineres do Azure no cluster de destino. A implantação normalmente leva 5 minutos.

Quando for concluído, o cluster terá o componente instalador do Armazenamento de Contêiner do Azure instalado. A instalação do driver CSI é adiada até que você crie uma classe de armazenamento. Siga as instruções para criar uma classe de armazenamento NVMe local ou uma classe de armazenamento Elástico SAN .

Verificar a instalação

Conecte-se ao cluster do AKS

Antes de executar os comandos de verificação, verifique se o kubeconfig local está definido como o cluster de destino:

az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>

Se você gerenciar vários clusters, adicione --overwrite-existing para substituir um contexto existente ou use --context para definir um nome de contexto exclusivo.

Verificar o instalador (modo exclusivo do instalador)

Depois de habilitar apenas o instalador, verifique se ele está presente:

kubectl get deploy -n kube-system | grep acstor

Resultado esperado:

acstor-cluster-manager                2/2     2            2           4d9h
acstor-geneva                         2/2     2            2           4d9h

Verificar acelerador distribuído para armazenamento em nuvem

Para uma instalação de DACS, verifique a extensão em vez de procurar por uma StorageClass:

az k8s-extension show \
  --cluster-type managedClusters \
  --cluster-name <cluster-name> \
  --resource-group <resource-group> \
  --name distributedaccelerator \
  --query '{extensionType:extensionType,provisioningState:provisioningState,currentVersion:currentVersion,releaseTrain:releaseTrain}' \
  --output table

Confirme que o tipo de extensão é microsoft.distributedaccelerator e que seu estado de provisionamento é Succeeded. O currentVersion campo mostra a versão instalada. O nome do recurso da extensão é minúsculo distributedaccelerator, ao contrário da opção distributedAcceleratorde armazenamento da CLI .

Após conectar ao cluster, verifique o controlador, o DaemonSet pré-requisito e o CRD:

kubectl rollout status deployment/dacs-manager --namespace kube-system --timeout=5m
kubectl get deployment dacs-manager --namespace kube-system
kubectl rollout status daemonset/dacs-prereq --namespace kube-system --timeout=10m
kubectl get daemonset dacs-prereq --namespace kube-system
kubectl get pods --namespace kube-system --selector app.kubernetes.io/name=dacs-prereq --output wide
kubectl get crd caches.storage.azure.com

Continue somente após a extensão estar no Succeeded estado, o controlador ter uma réplica pronta e o DaemonSet pré-requisito ter um pod Pronto em cada nó de cache rotulado. Um DaemonSet sem nenhuma réplica desejada não realiza a verificação da preparação de NVMe. Se uma verificação falhar, confira Solucionar problemas do acelerador distribuído para armazenamento em nuvem.

As etapas de verificação de classe de armazenamento e de drivers CSI que seguem se aplicam a tipos de armazenamento de volumes persistentes, não a DACS.

Verificar a presença da classe de armazenamento

Depois de criar uma classe de armazenamento ou habilitar um tipo de armazenamento, verifique a classe de armazenamento:

kubectl get sc

Exemplo de saída:

NAME                    PROVISIONER               RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
azuresan-csi            san.csi.azure.com         Delete          Immediate              false                  4d7h
local-csi               localdisk.csi.acstor.io   Delete          WaitForFirstConsumer   true                   4d5h

Verificar a instalação de drivers

Verifique os componentes esperados após a criação da classe de armazenamento ou a instalação do tipo de armazenamento:

kubectl get pod -n kube-system | grep acstor

Exemplo de saída:

pod/acstor-azuresan-csi-driver-jrqd2                       7/7     Running   0               142m
pod/acstor-azuresan-csi-driver-tcdp8                       7/7     Running   0               142m
pod/acstor-cluster-manager-76c67496f9-8ln5d                2/2     Running   0               3h54m
pod/acstor-cluster-manager-76c67496f9-b4c8q                2/2     Running   0               3h54m
pod/acstor-geneva-588bcbcc67-4tr5d                         3/3     Running   0               3h54m
pod/acstor-geneva-588bcbcc67-k7j7k                         3/3     Running   0               3h54m
pod/acstor-node-agent-46v47                                1/1     Running   0               142m
pod/acstor-node-agent-6c99m                                1/1     Running   0               142m
pod/acstor-otel-collector-4lfgz                            1/1     Running   0               142m
pod/acstor-otel-collector-hw9nd                            1/1     Running   0               142m

Resolução de Erros

Para depuração, observe o sistema à medida que os componentes são distribuídos:

kubectl get events -n kube-system --watch
kubectl get pod -n kube-system --watch

Inspecione os recursos personalizados HelmRelease e OCIRepository usados pelo instalador:

kubectl describe helmreleases.helm.installer.acstor.io -n kube-system
kubectl describe ocirepositories.source.installer.acstor.io -n kube-system

Próximas etapas