Проблема хранения данных в AWS

Вопрос или проблема

Я пытаюсь создать тестовый под, который имеет постоянный объем. Вот мой pod.yaml и pvc.yaml, и у меня кластер EKS.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
  namespace: my-ns  
spec:
  accessModes:
    - ReadWriteOnce  
  resources:
    requests:
      storage: 10Gi 
  storageClassName: gp2  


apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  namespace: my-ns
spec:
  containers:
    - name: test-container
      image: busybox  
      command: ["sleep", "3600"]  
      volumeMounts:
        - mountPath: /mnt/data  
          name: my-pvc-volume 
  volumes:
    - name: my-pvc-volume  
      persistentVolumeClaim:
        claimName: my-pvc  

Если я опишу PVC, он выглядит следующим образом:

Предупреждение ProvisioningFailed 4m58s (x5 за 14m)
ebs.csi.aws.com_ebs-csi-controller-dd646df8-7ddpr_aca98eff-9b9a-4bce-8049-b34905dffc7e
не удалось создать объем с StorageClass “gp2”: ошибка rpc: код =
Internal desc = Не удалось создать объем “pvc-1bed8d46-f728-4b15-b7e │
│ f-9a5425c0814d”: не удалось создать объем в EC2: ошибка операции
EC2: CreateVolume, получить идентификацию: получить учетные данные: не удалось обновить
кэшированные учетные данные, не найдена роль EC2 IMDS, ошибка операции ec2imds:
GetMetadata, запрос отменен, превышен срок контекста

│ │ Нормальный ExternalProvisioning 71s (x99 за 25m)
persistentvolume-controller Ожидание, когда объем будет создан либо
внешним провизионером ‘ebs.csi.aws.com’, либо вручную системным администратором. Если создание объема
задерживается, пожалуйста, проверьте, что провизионер работает и правильно зарегистрирован.

Если я посмотрю логи пода EBS-CSI в kube-system, они показывают следующую ошибку:

E1005 20:52:29.823331 1 driver.go:108] "Ошибка GRPC" err="rpc error: code = Internal desc = Не удалось создать объем "pvc-1bed8d46-f728-4b15-b7ef-9a5425c0814d": не удалось создать объем в EC2: ошибка операции EC2: CreateVolume, получить идентификацию: получить учетные данные: не удалось обновить кэшированные учетные данные, не найдена роль EC2 IMDS, ошибка операции ec2imds: GetMetadata, отменено, превышен срок контекста"

Ответ или решение

Проблема, с которой вы столкнулись, связана с созданием Persistent Volume (PV) в экземплярах EC2 через AWS EBS CSI Driver, и ошибка связана с невозможностью получить учетные данные для выполнения данного действия. Давайте рассмотрим основные шаги для решения данной проблемы.

1. Проверьте IAM Роли

Убедитесь, что экземпляры EC2, на которых развернут ваш Amazon EKS кластер, имеют соответствующую IAM роль с необходимыми правами для доступа к EC2. Эта роль должна включать политику, которая позволяет выполнять действия ec2:CreateVolume, ec2:DescribeVolumes, ec2:AttachVolume и другие, связанные с управлением томами EBS.

Пример политики может выглядеть следующим образом:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:DescribeVolumes",
                "ec2:AttachVolume",
                "ec2:DetachVolume",
                "ec2:DeleteVolume",
                "ec2:DescribeInstances",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeRegions"
            ],
            "Resource": "*"
        }
    ]
}

2. Убедитесь, что IAM роль привязана к EC2 Instance Metadata Service (IMDS)

Ошибка no EC2 IMDS role found указывает на то, что система не может найти IAM роль, привязанную к экземплярам EC2 для получения временных учетных данных. Убедитесь, что IMDS находится в статусе v1 или v2, и что ваша роль привязана правильно.

3. Проверьте настройки Kubernetes EKS

Убедитесь, что ваш EKS кластер настроен правильно для работы с EBS. Вам нужно проверить, установлен ли AWS EBS CSI Driver, и что он работает без ошибок.

Для установки EBS CSI Driver вы можете использовать следующую команду:

kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kustomize/overlays/stable/ecr"

4. Проверьте состояние и логи компонентов

Проверьте состояние Kubernetes потов и контроллеров с помощью следующих команд:

kubectl get pods -n kube-system
kubectl logs -n kube-system <имя-pod-a-ebs-csi-controller>

Если вы увидите дополнительные ошибки, это может помочь в дальнейшей диагностике.

5. Запустите команду для проверки доступности зоны

Ошибка может также указывать на наличие проблем с доступностью зоны, где вы пытаетесь создать EBS том. Убедитесь, что все ресурсы доступны и не имеют никаких проблем с лимитами или отказами в операциях.

6. Используйте правильный StorageClass

В вашем случае вы используете gp2, убедитесь, что данная StorageClass доступна в вашем кластере. Выполните команду:

kubectl get storageclass

Убедитесь, что gp2 присутствует в списке и правильно сконфигурирован.

Заключение

После выполнения данных шагов повторите попытку создания Persistent Volume Claim (PVC) и проверьте, исчезла ли ошибка. Если проблема продолжается, возможно, стоит обратиться к документации AWS или в службу поддержки для получения более конкретных рекомендаций.

Оцените материал
Добавить комментарий

Капча загружается...