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

Data da última atualização: 27/12/2022

Quero solucionar erros ao montar volumes do Amazon Elastic File System (Amazon EFS) em um cluster do Amazon Elastic Kubernetes Service (Amazon EKS).

Resolução

Você pode receber uma das seguintes mensagens de erro em seus pods ao montar um volume do Amazon EFS em um cluster do Amazon EKS:

  • “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” (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)
  • “Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct” (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 atingiu o tempo limite)
  • “Unable to attach or mount volumes: timed out waiting for the condition” (Não é possível conectar ou montar volumes: atingido o tempo limite no aguardo da condição)

Antes de iniciar as etapas de solução de problemas, 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 na qual 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 do 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 do 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 do EFS e aos nós de processamento permitem tráfego NFS

O grupo de segurança associado ao sistema de arquivos do EFS deve ter uma regra de entrada que permita o tráfego NFS (porta 2049) do CIDR para a VPC do cluster.

O grupo de segurança associado aos seus nós de processamento nos quais os pods não conseguem montar o volume de EFS deve ter uma regra de saída que permita o tráfego NFS (porta 2049) para o sistema de arquivos do EFS.

Se o grupo de segurança dos destinos de montagem ou os nós de processamento do EFS não estiverem permitindo o tráfego NFS, os pods que montam o sistema de arquivos do EFS retornarão os seguintes erros:

"mount.nfs: Connection timed out"
"Unable to attach or mount volumes: timed out waiting for the condition"

Verificar se o subdiretório foi criado no sistema de arquivos do 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 o perfil do IAM correto e se o perfil do IAM tem as permissões necessárias

Execute o seguinte comando para verificar 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 o seguinte:

  • O provedor do IAM OIDC para o cluster foi criado.
  • O perfil do IAM associado à conta de serviço efs-csi-controller-sa tem as permissões necessárias (do site do GitHub) para realizar chamadas de API do EFS.
  • A política de confiança do perfil do IAM confia na conta de serviço efs-csi-controller-sa. A política de confiança do perfil do IAM deve ter a seguinte aparência:
{
 "Version": "2012-10-17",
 "Statement": [{
  "Effect": "Allow",
  "Principal": {
   "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
  },
  "Action": "sts:AssumeRoleWithWebIdentity",
  "Condition": {
   "StringEquals": {
    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system: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?