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

7 minuto de leitura
0

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

Resolução

Ao montar seu volume do Amazon EFS no seu cluster do Amazon EKS, você pode receber um dos seguintes erros em seus pods:

  • "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"
  • "Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct"
  • "mount.nfs4: access denied by server while mounting 127.0.0.1:/"
  • "mount.nfs: Connection timed out"
  • "Unable to attach or mount volumes: timed out waiting for the condition"

Antes de começar as etapas de solução de problemas, verifique se você tem os seguintes pré-requisitos:

Verifique 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, suponha que seus nós de processamento estejam espalhados por us-east-1a e us-east-1b. Nesse caso, crie destinos de montagem nas duas zonas de disponibilidade do sistema de arquivos do EFS que você deseja montar. Se você não criar corretamente os destinos de montagem, os pods que estiverem montando o sistema de arquivos EFS retornarão um erro semelhante à seguinte mensagem:

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

Verifique se o grupo de segurança associado ao seu sistema de arquivos do EFS e aos nós de processamento permite o tráfego NFS

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

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

Se o grupo de segurança não permitir o tráfego NFS, os pods que estiverem montando o sistema de arquivos retornarão os seguintes erros:

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

Verifique se o subdiretório foi criado no seu 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. Os diretórios já devem estar presentes para que a operação de montagem seja bem-sucedida. Se o subcaminho não estiver presente no sistema de arquivos, os pods falharão 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"

Confirme se a VPC do cluster usa o servidor Amazon DNS

Quando você monta o EFS com o driver CSI do EFS, o auxiliar de montagem do EFS exige que você use o servidor Amazon DNS 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.

Para verificar o servidor DNS, faça login no nó de trabalho e execute o seguinte comando:

nslookup fs-4fxxxxxx.efs.region.amazonaws.com AMAZON\_PROVIDED\_DNS\_IP

Observação: Substitua region pela sua Região da AWS. Substitua AMAZON_PROVIDED_DNS_IP pelo seu endereço IP DNS. Por padrão, esse é o intervalo de rede VPC (10.0.0.0) mais dois.

Se a VPC do cluster usar um servidor DNS personalizado, configure esse servidor DNS para encaminhar todas as solicitações de *.amazonaws.com ao servidor DNS da Amazon. Se essas solicitações não forem encaminhadas, os pods falharão com um erro semelhante à seguinte mensagem:

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

Verifique 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 perfis específicos do IAM. Nesse caso, o auxiliar de montagem do EFS exige que a opção de montagem -o iam seja transmitida durante a operação de montagem. Inclua a propriedade spec.mountOptions para permitir que o driver CSI adicione a opção iam mount option (no site do GitHub).

O exemplo a seguir é uma 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 com uma política restritiva do sistema de arquivos, os pods falharão com um erro semelhante à seguinte mensagem:

"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 correto do IAM e se o perfil do IAM tem as permissões necessárias

Para verificar se a conta de serviço usada pelospods de efs-csi-controller tem a anotação correta, execute o seguinte comando:

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\_DriverRole

Verifique se você concluiu as seguintes etapas:

  • Criou o provedor IAM OIDC para o cluster.
  • O perfil do IAM associado à conta de serviço efs-csi-controller-sa tem as permissões necessárias (no 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 ser semelhante ao seguinte exemplo:
{
	"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 em execução

O driver CSI do EFS é composto por pods de controlador que são executados como uma implantação e por pods de nós que são executados como um DaemonSet. Para verificar se esses pods estão sendo executados no seu cluster, execute o seguinte comando:

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

Verifique a operação de montagem do EFS a partir 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. Para testar a operação de montagem, execute o seguinte comando:

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 do controlador CSI e dos pods de nós CSI.

Verificar os logs de pods do driver CSI do EFS

Verifique os logs de pods do driver CSI para determinar a causa das falhas de montagem. Se o volume não estiver sendo montado, reveja os logs de efs-plugin. Para recuperar os logs de contêiner de efs-plugin, execute os seguintes comandos:

kubectl logs deployment/efs-csi-controller -n kube-system -c efs-plugin
kubectl logs daemonset/efs-csi-node -n kube-system -c efs-plugin
AWS OFICIAL
AWS OFICIALAtualizada há um ano