Como soluciono problemas com minhas montagens de volume do Amazon EFS no Amazon EKS?

Data da última atualização: 22/12/2021

Recebo os seguintes erros em meus pods quando monto volumes do Amazon Elastic File System (Amazon EFS) no meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS):

  • “Saída: mount.nfs4: montagem fs-18xxxxxx.efs.us-east-1.amazonaws.com: /path-in-dir:/failed, motivo fornecido pelo servidor: nenhum arquivo ou diretório”
  • “Saída: Falha ao resolver “fs-xxxxxx.efs.us-west-2.amazonaws.com” - verifique se o ID do sistema de arquivos está correto”
  • “mount.nfs4: access denied by server while mounting 127.0.0.1:/” (“mount.nfs4: acesso negado pelo servidor durante a montagem 127.0.0.1:/”)
  • “mount.nfs: Connection timed out” (“mount.nfs: a conexão chegou ao tempo limite”)

Como faço para corrigir isso?

Resolução

Antes de iniciar as etapas de solução de problemas abaixo, verifique se você tem o seguinte:

Verificar se os destinos de montagem estão configurados corretamente

Certifique-se de criar os destinos de montagem do EFS em cada zona de disponibilidade em que os nós do EKS estão sendo executados. Por exemplo, se os nós de processamento estiverem distribuídos entre us-east-1a e us-east-1b, crie destinos de montagem em ambas as zonas de disponibilidade para o sistema de arquivos EFS que você está tentando montar. Se você não criar corretamente os destinos de montagem, os pods que estão montando o sistema de arquivos EFS retornarão um erro semelhante ao seguinte:

Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct.

Verificar se o grupo de segurança associado ao sistema de arquivos EFS permite tráfego NFS

O grupo de segurança associado ao sistema de arquivos EFS deve ter uma regra de entrada que permita o tráfego NFS (porta 2049) do CIDR para a VPC do cluster. Se o grupo de segurança dos destinos de montagem EFS não estiver permitindo o tráfego NFS, os pods que montam o sistema de arquivos EFS retornarão um erro semelhante ao seguinte:

"mount.nfs: Connection timed out"

Verificar se o subdiretório foi criado no sistema de arquivos EFS se você estiver montando o pod em um subdiretório

Quando você adiciona subcaminhos em volumes persistentes, o driver CSI do EFS não cria o caminho do subdiretório no sistema de arquivos EFS como parte da operação de montagem. Os diretórios já deverão estar presentes para que a operação de montagem seja bem-sucedida. Se o subcaminho não estiver presente no sistema de arquivos, haverá falha nos pods com o seguinte erro:

Output: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/ failed, reason given by server: No such file or directory

Confirmar se a VPC do cluster usa o servidor DNS da Amazon

Quando você usa o driver CSI do EFS para montar o EFS, o auxiliar de montagem do EFS no driver CSI do EFS exige que a VPC use o servidor DNS da Amazon para a VPC. Observação: o DNS do sistema de arquivos do serviço EFS tem uma limitação de arquitetura da AWS. Somente o DNS fornecido pela Amazon pode resolver o DNS do sistema de arquivos do serviço EFS.

Verifique o servidor DNS fazendo login no nó de processamento e executando o seguinte comando:

nslookup fs-4fxxxxxx.efs.region.amazonaws.com <amazon provided DNS IP>
<amazon provided DNS IP = VPC network(10.0.0.0) range plus two>

Observação: substitua region pela sua região da AWS.

Se a VPC do cluster estiver usando um servidor DNS personalizado, você deverá configurar o servidor DNS personalizado para encaminhar todas as solicitações *.amazonaws.com para o servidor DNS da Amazon. Se essas solicitações não forem encaminhadas, os pods falharão com um erro semelhante ao seguinte:

Output: Failed to resolve "fs-4 fxxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct.

Verificar se você tem opções de montagem “iam” na definição de volume persistente ao usar uma política restritiva do sistema de arquivos

Em alguns casos, a política do sistema de arquivos do EFS é configurada para restringir as permissões de montagem a funções específicas do IAM. Se for esse o caso, o auxiliar de montagem do EFS no driver CSI do EFS exigirá que a opção de montagem -o iam seja aprovada durante a operação de montagem. Inclua a propriedade spec.mountOptions para que o driver CSI possa adicionar a opção de montagem iam (do site do GitHub).

Exemplo de especificação PersistentVolume:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv1
spec:
  mountOptions:
    - iam
. . . . . .

Se você não adicionar a opção de montagem iam ao usar uma política restritiva do sistema de arquivos, haverá falha nos pods com um erro semelhante ao seguinte:

mount.nfs4: access denied by server while mounting 127.0.0.1:/

Verifique se a conta de serviço do controlador do driver CSI do Amazon EFS está anotada com a função do IAM correta e se a função do IAM tem as permissões necessárias

Execute o seguinte comando para determinar se a conta de serviço usada pelos pods efs-csi-controller tem a anotação correta:

kubectl describe sa efs-csi-controller-sa -n kube-system

Verifique se a seguinte anotação está presente:

eks\.amazonaws\.com/role-arn"="arn:aws:iam::111122223333:role/AmazonEKS_EFS_CSI_Driver_Policy

Verifique se o provedor OIDC do IAM para o cluster foi criado, e se a função do IAM tem as permissões necessárias (do site do GitHub) para realizar chamadas de API do EFS. Além disso, verifique se a política de confiança da função do IAM confia na conta de serviço efs-csi-controller-sa.

Verificar se os pods do driver CSI do EFS estão sendo executados

O driver CSI do EFS é composto de pods de controlador que são executados como uma implantação e pods de nó que são executados como um daemonset. Execute os seguintes comandos para verificar se esses pods estão sendo executados no cluster:

kubectl get all -l app.kubernetes.io/name=aws-efs-csi-driver -n kube-system

Verifique a operação de montagem do EFS do nó de processamento do EC2 em que o pod está falhando ao montar o sistema de arquivos

Faça login no nó de processamento do Amazon EKS em que o pod está programado. Em seguida, use o auxiliar de montagem do EFS para tentar montar manualmente o sistema de arquivos EFS no nó de processamento. Você pode executar o seguinte comando para testar:

sudo mount -t -efs -o tls file-system-dns-name efs-mount-point/

Se o nó de processamento puder montar o sistema de arquivos, revise os logs efs-plugin dos pods do controlador CSI e do nó CSI.

Verificar os logs do pod do driver CSI do EFS

Verifique os logs do pod do driver CSI para determinar a causa das falhas de montagem. Se o volume não estiver montando, revise os logs efs-plugin. Execute os seguintes comandos para recuperar os logs do contêiner efs-plugin:

kubectl logs deployment/efs-csi-controller -n kube-system -c efs-plugin
kubectl logs daemonset/efs-csi-node -n kube-system -c efs-plugin

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?