Armazenar aplicações de alta performance com o FSx para Lustre - Amazon EKS

Ajudar a melhorar esta página

Quer contribuir para este guia do usuário? Role até o final desta página e selecione Editar esta página no GitHub. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.

Armazenar aplicações de alta performance com o FSx para Lustre

O driver de Container Storage Interface (CSI) do FSx for Lustre fornece uma interface CSI que permite que os clusters do Amazon EKS gerenciem o ciclo de vida dos sistemas de arquivos do FSx for Lustre. Para obter mais informações, consulte o Guia do usuário do FSx para Lustre.

Este tópico mostra como implantar o driver de CSI do FSx for Lustre no cluster do Amazon EKS e verificar se ele funciona. Recomendamos o uso da versão mais recente do driver. Para ver as versões disponíveis, consulte CSI Specification Compatibility Matrix (Matriz de compatibilidade de especificações de CSI) no GitHub.

nota

O driver não é compatível com o Fargate.

Para obter descrições detalhadas sobre os parâmetros disponíveis e exemplos completos que demonstram os recursos do driver, consulte o projeto FSx for Lustre Container Storage Interface (CSI) driver (Driver de Container Storage Interface (CSI) do FSx for Lustre) no GitHub.

Pré-requisitos

Você deve ter:

  • A versão 2.12.3 ou superior ou a versão 1.27.160 ou superior da AWS Command Line Interface (AWS CLI) instalada e configurada em seu dispositivo ou no AWS CloudShell. Para verificar sua versão atual, use aws --version | cut -d / -f2 | cut -d ' ' -f1. Gerenciadores de pacotes, como yum, apt-get ou Homebrew para macOS, geralmente estão várias versões atrás da versão mais recente da AWS CLI. Para instalar a versão mais recente, consulte Instalar, atualizar e desinstalar a AWS CLI e Configuração rápida com o aws configure no Guia do usuário da AWS Command Line Interface. A versão da AWS CLI instalada no AWS CloudShell também pode estar várias versões atrás da versão mais recente. Para atualizá-la, consulte Instalar a AWS CLI no diretório inicial no Guia do usuário do AWS CloudShell.

  • Versão 0.191.0 ou posterior da ferramenta da linha de comando do eksctl instalada no dispositivo ou no AWS CloudShell. Para instalar ou atualizar o eksctl, consulte Instalação na documentação do eksctl.

  • A ferramenta da linha de comando kubectl está instalada no seu dispositivo ou no AWS CloudShell. A versão pode ser idêntica ou até uma versão secundária anterior ou posterior à versão Kubernetes do seu cluster. Por exemplo, se a versão do cluster for a 1.30, você poderá usar o kubectl versão 1.29, 1.30 ou 1.31 com ele. Para instalar ou atualizar o kubectl, consulte Configurar o kubectl e o eksctl.

Os procedimentos a seguir ajudam a criar um cluster simples de teste com o driver de CSI do FSx for Lustre para que você veja como ele funciona. Não recomendamos utilizar o cluster de teste para workloads de produção. Para este tutorial, convém utilizar os example values, exceto onde indicado para substituí-los. É possível substituir qualquer example value ao concluir as etapas para um cluster de produção. Convém concluir todas as etapas no mesmo terminal, pois variáveis são definidas e utilizadas por todas as etapas e não existirão em terminais diferentes.

Para implantar o driver CSI do FSx para Lustre
  1. Defina algumas variáveis para uso nas etapas restantes. Substitua my-csi-fsx-cluster pelo nome do cluster de teste que você deseja criar e region-code pela Região da AWS na qual você deseja criar o cluster de teste.

    export cluster_name=my-csi-fsx-cluster export region_code=region-code
  2. Crie um cluster de teste.

    eksctl create cluster \ --name $cluster_name \ --region $region_code \ --with-oidc \ --ssh-access \ --ssh-public-key my-key

    O provisionamento de cluster leva alguns minutos. Durante a criação do cluster, você verá várias linhas de saída. A última linha do resultado é semelhante ao exemplo de linha a seguir.

    [✓] EKS cluster "my-csi-fsx-cluster" in "region-code" region is ready
  3. Crie uma conta de serviço do Kubernetes para o driver e anexe a política gerenciada pela AWS AmazonFSxFullAccess à conta de serviço. Se o cluster estiver nas Regiões da AWS: AWS GovCloud (EUA-Leste) ou AWS GovCloud (EUA-Oeste), substitua arn:aws: por arn:aws-us-gov:.

    eksctl create iamserviceaccount \ --name fsx-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonFSxFullAccess \ --approve \ --role-name AmazonEKSFSxLustreCSIDriverFullAccess \ --region $region_code

    Você verá várias linhas de resultado à medida que a conta de serviço é criada. As últimas linhas de saída são semelhantes às seguintes:

    [ℹ] 1 task: { 2 sequential sub-tasks: { create IAM role for serviceaccount "kube-system/fsx-csi-controller-sa", create serviceaccount "kube-system/fsx-csi-controller-sa", } } [ℹ] building iamserviceaccount stack "eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa" [ℹ] deploying stack "eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa" [ℹ] waiting for CloudFormation stack "eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa" [ℹ] created serviceaccount "kube-system/fsx-csi-controller-sa"

    Observe o nome da pilha do AWS CloudFormation implantada. No resultado do exemplo anterior, a pilha é denominada eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa.

  4. Implante o driver com o seguinte comando. Substitua release-X.XX pela ramificação desejada. A ramificação principal não é aceita porque ela pode conter recursos futuros incompatíveis com a versão estável do driver lançada. Recomendamos o uso da versão mais recente. Para ver uma lista de ramificações, consulte Ramificações do aws-fsx-csi-driver no GitHub.

    nota

    É possível visualizar o conteúdo que está sendo aplicado em aws-fsx-csi-driver/deploy/kubernetes/overlays/stable no GitHub.

    kubectl apply -k "github.com/kubernetes-sigs/aws-fsx-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-X.XX"

    Veja um exemplo de saída abaixo.

    serviceaccount/fsx-csi-controller-sa created serviceaccount/fsx-csi-node-sa created clusterrole.rbac.authorization.k8s.io/fsx-csi-external-provisioner-role created clusterrole.rbac.authorization.k8s.io/fsx-external-resizer-role created clusterrolebinding.rbac.authorization.k8s.io/fsx-csi-external-provisioner-binding created clusterrolebinding.rbac.authorization.k8s.io/fsx-csi-resizer-binding created deployment.apps/fsx-csi-controller created daemonset.apps/fsx-csi-node created csidriver.storage.k8s.io/fsx.csi.aws.com created
  5. Observe o ARN para a função que ela foi criada. Se você não o anotou antes e ele não o estiver mais disponível na saída da AWS CLI, faça o seguinte para visualizá-lo no AWS Management Console:

    1. Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation.

    2. Verifique se o console está definido para a Região da AWS na qual você criou a função do IAM e selecione Stacks (Pilhas).

    3. Selecione a pilha chamada eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa.

    4. Selecione a guia Outputs (Resultados). O ARN de Role1 é listado na página Outputs (1) (Saídas).

  6. Aplique um patch à implantação do driver para adicionar a conta de serviço criada anteriormente com o comando a seguir. Substitua o ARN pelo ARN que você anotou. Substitua 111122223333 pelo ID da sua conta. Se o cluster estiver nas Regiões da AWS: AWS GovCloud (EUA-Leste) ou AWS GovCloud (EUA-Oeste), substitua arn:aws: por arn:aws-us-gov:.

    kubectl annotate serviceaccount -n kube-system fsx-csi-controller-sa \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKSFSxLustreCSIDriverFullAccess --overwrite=true

    Veja um exemplo de saída abaixo.

    serviceaccount/fsx-csi-controller-sa annotated
Para implantar uma classe de armazenamento, uma solicitação de volume persistente e uma aplicação de amostra

Este procedimento usa o repositório FSx for Lustre Container Storage Interface (CSI) driver (Driver de Container Storage Interface (CSI) do FSx for Lustre) para consumir um volume provisionado dinamicamente do FSx for Lustre) do GitHub.

  1. Observe o grupo de segurança do seu cluster. É possível ver isso noAWS Management Console, na seção Networking (Redes), ou usando o seguinte comando da AWS CLI:

    aws eks describe-cluster --name $cluster_name --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  2. Crie um grupo de segurança para seu sistema de arquivos Amazon FSx conforme os critérios mostrados em Grupos de segurança de Amazon VPC, no Guia do usuário do Amazon FSx para Lustre. Para a VPC, selecione a VPC do seu cluster, conforme mostrado na seção Networking (Redes). Para os “grupos de segurança associados aos seus clientes Lustre”, utilize o grupo de segurança do seu cluster. É possível deixar as regras de saída sozinhas para permitir Todo o tráfego.

  3. Baixe o manifesto da classe de armazenamento com o seguinte comando:

    curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
  4. Edite a seção de parâmetros do arquivo storageclass.yaml. Substitua example value por seus próprios valores.

    parameters: subnetId: subnet-0eabfaa81fb22bcaf securityGroupIds: sg-068000ccf82dfba88 deploymentType: PERSISTENT_1 automaticBackupRetentionDays: "1" dailyAutomaticBackupStartTime: "00:00" copyTagsToBackups: "true" perUnitStorageThroughput: "200" dataCompressionType: "NONE" weeklyMaintenanceStartTime: "7:09:00" fileSystemTypeVersion: "2.12"
    • subnetId: o ID de da sub-rede em que o sistema de arquivos do Amazon FSx para Lustre deve ser criado. O Amazon FSx for Lustre não conta com suporte em todas as zonas de disponibilidade. Abra o console do Amazon FSx for Lustre em https://console.aws.amazon.com/fsx/ para confirmar se a sub-rede que você deseja usar está em uma zona de disponibilidade compatível. A sub-rede pode incluir os nós ou pode ser uma sub-rede ou uma VPC diferente:

      • É possível verificar as sub-redes do nó no AWS Management Console, selecionando o grupo de nós na seção Compute (Computação).

      • Se a sub-rede especificada não for a mesma sub-rede em que os nós estiverem localizados, as VPCs deverão estar conectadas, e você deverá garantir que as portas necessárias estejam abertas nos grupos de segurança.

    • securityGroupIds: o ID do grupo de segurança criado para o sistema de arquivos.

    • deploymentType (opcional): o tipo de implantação do sistema de arquivos. Os valores válidos são SCRATCH_1, SCRATCH_2, PERSISTENT_1 e PERSISTENT_2. Para obter mais informações sobre os tipos de implantação, consulte Create your Amazon FSx for Lustre file system (Criar o sistema de arquivos do Amazon FSx for Lustre).

    • outros parâmetros (opcionais): para obter informações sobre outros parâmetros, consulte Editar StorageClass (Editar StorageClass) no GitHub.

  5. Crie o manifesto da classe de armazenamento.

    kubectl apply -f storageclass.yaml

    Veja um exemplo de saída abaixo.

    storageclass.storage.k8s.io/fsx-sc created
  6. Faça download do manifesto de declaração de volume persistente.

    curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/claim.yaml
  7. (Opcional) Edite o arquivo claim.yaml. Altere 1200Gi para um dos seguintes valores de incremento com base nos requisitos de armazenamento e no deploymentType selecionado em uma etapa anterior.

    storage: 1200Gi
    • SCRATCH_2 e PERSISTENT a 1.2 TiB, 2.4 TiB ou incrementos de 2,4 TiB, com mais de 2,4 TiB.

    • SCRATCH_1 a 1.2 TiB, 2.4 TiB, 3.6 TiB ou incrementos de 3,6 TiB, com mais de 3,6 TiB.

  8. Crie a declaração de volume persistente.

    kubectl apply -f claim.yaml

    Veja um exemplo de saída abaixo.

    persistentvolumeclaim/fsx-claim created
  9. Confirme se o sistema de arquivos está provisionado.

    kubectl describe pvc

    Veja um exemplo de saída abaixo.

    Name: fsx-claim Namespace: default StorageClass: fsx-sc Status: Bound [...]
    nota

    O Status pode ser exibido como Pending por 5 a 10 minutos, antes de mudar para Bound. Não prossiga para a próxima etapa até o Status for Bound. Se Status mostrar Pending por mais de 10 minutos, use mensagens de aviso em Events como referência para resolver problemas.

  10. Implante a aplicação de exemplo.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/pod.yaml
  11. Verifique se a aplicação de exemplo está em execução.

    kubectl get pods

    Veja um exemplo de saída abaixo.

    NAME READY STATUS RESTARTS AGE fsx-app 1/1 Running 0 8s
  12. Verifique se o sistema de arquivos está montado corretamente pela aplicação.

    kubectl exec -ti fsx-app -- df -h

    Veja um exemplo de saída abaixo.

    Filesystem Size Used Avail Use% Mounted on overlay 80G 4.0G 77G 5% / tmpfs 64M 0 64M 0% /dev tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup 192.0.2.0@tcp:/abcdef01 1.1T 7.8M 1.1T 1% /data /dev/nvme0n1p1 80G 4.0G 77G 5% /etc/hosts shm 64M 0 64M 0% /dev/shm tmpfs 6.9G 12K 6.9G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs 3.8G 0 3.8G 0% /proc/acpi tmpfs 3.8G 0 3.8G 0% /sys/firmware
  13. Verifique se os dados foram gravados no sistema de arquivos do FSx for Lustre pela aplicação de exemplo.

    kubectl exec -it fsx-app -- ls /data

    Veja um exemplo de saída abaixo.

    out.txt

    Essa saída de exemplo indica que a aplicação de amostra gravou com êxito o arquivo out.txt no sistema de arquivos.

nota

Antes de excluir o cluster, não esqueça de excluir o sistema de arquivos do FSx for Lustre. Para obter mais informações, consulte Limpar os recursos no Guia do usuário do FSx for Lustre.