- Вопрос или проблема
- Ответ или решение
- 1. Проверьте IAM Роли
- 2. Убедитесь, что IAM роль привязана к EC2 Instance Metadata Service (IMDS)
- 3. Проверьте настройки Kubernetes EKS
- 4. Проверьте состояние и логи компонентов
- 5. Запустите команду для проверки доступности зоны
- 6. Используйте правильный StorageClass
- Заключение
Вопрос или проблема
Я пытаюсь создать тестовый под, который имеет постоянный объем. Вот мой 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 или в службу поддержки для получения более конкретных рекомендаций.