Поделиться через


Устранение неполадок с хранилищем контейнеров Azure

Хранилище контейнеров Azure — это облачная служба управления томами, развертывания и оркестрации, созданная изначально для контейнеров. Используйте эту статью, чтобы устранить распространенные проблемы с хранилищем контейнеров Azure и найти решения проблем.

Устранение ошибок установки

Не удается установить хранилище контейнеров Azure из-за отсутствия конфигурации

После выполнения az aks createможет появиться сообщение о сбое установки хранилища контейнеров Azure. Создается кластер AKS. Запустите az aks update вместе с --enable-azure-container-storage тем, чтобы включить хранилище контейнеров Azure.

Это сообщение означает, что хранилище контейнеров Azure не было установлено, но кластер AKS был создан правильно.

Чтобы установить хранилище контейнеров Azure в кластере и создать пул носителей, выполните следующую команду. Замените <cluster-name> и <resource-group> собственными значениями. Замените <storage-pool-type> на azureDisk, ephemeraldisk или elasticSan.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage <storage-pool-type>

Не удается установить хранилище контейнеров Azure из-за ограничений Политика Azure

Если Политика Azure ограничения существуют, служба хранилища контейнеров Azure может завершиться ошибкой. В частности, хранилище контейнеров Azure использует привилегированные контейнеры, которые могут быть заблокированы Политика Azure. В этом случае установка хранилища контейнеров Azure может завершиться сбоем и может появиться ошибка в gatekeeper-controller таких журналах, как:

$ kubectl logs -n gatekeeper-system deployment/gatekeeper-controller
... 
{"level":"info","ts":1722622443.9484184,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: prereq, securityContext: {\"privileged\": true, \"runAsUser\": 0}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-prereq-gt58x","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
{"level":"info","ts":1722622443.9839077,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: metrics-exporter, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-metrics-exporter-286np","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
{"level":"info","ts":1722622444.0515249,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: csi-node, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-csi-node-7hcd7","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
{"level":"info","ts":1722622444.0729053,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: io-engine, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-io-engine-84hwx","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
{"level":"info","ts":1722622444.0742755,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: ndm, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-ndm-x6q5n","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
{"level":"info","ts":1722622449.2412128,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: ndm, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-ndm-b5nfg","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}

Чтобы устранить эту проблему, необходимо добавить acstor пространство имен в список исключений Политика Azure. Политика Azure используется для создания и применения правил для управления ресурсами в Azure, включая кластеры AKS. В некоторых случаях политики могут блокировать создание модулей pod и компонентов службы хранилища контейнеров Azure. Дополнительные сведения о работе с Политика Azure для Kubernetes см. в Политика Azure для Kubernetes.

Чтобы добавить acstor пространство имен в список исключений, выполните следующие действия.

  1. Создайте кластер Azure Kubernetes.
  2. Включите Политика Azure для AKS.
  3. Создайте политику, которую вы подозреваете, блокирует установку хранилища контейнеров Azure.
  4. Попытайтесь установить хранилище контейнеров Azure в кластере AKS.
  5. Проверьте журналы для модуля pod шлюза-контроллера, чтобы подтвердить любые нарушения политики.
  6. acstor Добавьте пространство имен в список исключений политики.
  7. Повторите попытку установить хранилище контейнеров Azure в кластере AKS.

Не удается задать тип пула носителей для NVMe

Если вы пытаетесь установить хранилище контейнеров Azure с временным диском, в частности с локальным NVMe в кластере, где SKU виртуальной машины не имеет дисков NVMe, вы получите следующее сообщение об ошибке: не удается задать параметр --storage-pool-option в качестве NVMe, так как ни один из пулов узлов не может поддерживать временный диск NVMe.

Чтобы устранить проблему, создайте пул узлов с номером SKU виртуальной машины с дисками NVMe и повторите попытку. См . оптимизированные для хранения виртуальные машины.

Устранение неполадок пула носителей

Чтобы проверить состояние пулов носителей, выполните команду kubectl describe sp <storage-pool-name> -n acstor. Ниже приведены некоторые проблемы, которые могут возникнуть.

Ошибка при попытке развернуть пул носителей дисков Azure

Если существующий пул носителей меньше 4 ТиБ (4096 ГиБ), его можно развернуть только до 4095 ГиБ. Если вы попытаетесь расширить это, внутренний ПВХ получит сообщение об ошибке, например "Только диск CachingType "Нет" поддерживается для диска размером более 4095 ГБ" или "Диск "xxx" размером 4096 ГБ (=4096 ГБ) не может быть изменен на 16384 ГБ (<>4096 ГБ) при подключении к работающей виртуальной машине. Остановите виртуальную машину или отключите диск и повторите операцию".

Чтобы избежать ошибок, не пытайтесь расширить текущий пул носителей за пределами 4095 ГиБ, если он изначально меньше 4 ТиБ (4096 ГиБ). Пулы носителей размером более 4 ТиБ можно расширить до максимально доступной емкости хранилища.

Это ограничение применяется только при использовании Premium_LRSномеров SKU , Standard_LRSStandardSSD_LRSи StandardSSD_ZRS Premium_ZRSдисков.

Сбой создания эластичной сети SAN

Если вы пытаетесь создать пул носителей Elastic SAN, может появиться сообщение о сбое создания Azure Elastic SAN: максимально возможное количество эластичных SAN для созданной подписки. Это означает, что вы достигли ограничения на количество ресурсов Elastic SAN, которые можно развернуть в регионе для каждой подписки. Здесь можно проверить ограничение: целевые показатели масштабируемости и производительности elastic SAN. Рассмотрите возможность удаления существующих ресурсов Elastic SAN в подписке, которые больше не используются, или попробуйте создать пул носителей в другом регионе.

Не найдено блочных устройств

Если вы видите это сообщение, скорее всего, вы пытаетесь создать пул носителей временных дисков в кластере, где SKU виртуальной машины не содержит дисков NVMe.

Чтобы устранить проблему, создайте пул узлов с номером SKU виртуальной машины с дисками NVMe и повторите попытку. См . оптимизированные для хранения виртуальные машины.

Тип пула носителей уже включен

Если вы пытаетесь включить тип пула носителей, который уже включен, вы получите следующее сообщение: недопустимое --enable-azure-container-storage значение. Хранилище контейнеров Azure уже включено для типа <storage-pool-type> пула носителей в кластере. Можно проверить наличие существующих пулов носителей, созданных с помощью запуска kubectl get sp -n acstor.

Отключение типа пула носителей

При отключении типа пула носителей с помощью az aks update --disable-azure-container-storage <storage-pool-type> службы хранилища контейнеров Azure или удаления с помощью az aks update --disable-azure-container-storage allэтого типа вы получите следующее сообщение:

Отключение хранилища контейнеров Azure для типа <storage-pool-type> пула носителей принудительно удаляет все пулы носителей одного типа и влияет на приложения, использующие эти пулы носителей. Принудительное удаление пулов носителей также может привести к утечке ресурсов хранилища, которые используются. Хотите проверить, используется ли любой из пулов носителей типа <storage-pool-type> перед отключением хранилища контейнеров Azure? (Y/n)

При выборе Y выполняется автоматическая проверка, чтобы гарантировать отсутствие постоянных томов, созданных из пула носителей. При выборе n проходит эту проверку и отключается тип пула носителей, удаление существующих пулов носителей и потенциально влияющие на приложение.

Не удается удалить группу ресурсов, содержащую кластер AKS

Если вы создали пул носителей Elastic SAN, возможно, не удается удалить группу ресурсов, в которой находится кластер AKS.

Чтобы устранить эту проблему, войдите в портал Azure и выберите группы ресурсов. Найдите созданную akS группу ресурсов (имя группы ресурсов начинается с MC_). Выберите объект ресурса SAN в этой группе ресурсов. Вручную удалите все тома и группы томов. Затем повторите попытку удаления группы ресурсов, включающую кластер AKS.

Устранение неполадок тома

Ожидание создания pod из-за временного размера тома выше доступной емкости

Временный том выделяется на одном узле. При настройке размера временных томов для модулей pod размер должен быть меньше доступной емкости временного диска одного узла. В противном случае создание pod будет находиться в состоянии ожидания.

Используйте следующую команду, чтобы проверить, находится ли создание pod в состоянии ожидания.

$ kubectl get pods
NAME     READY   STATUS    RESTARTS   AGE
fiopod   0/1     Pending   0          17s

В этом примере модуль pod fiopod находится в Pending состоянии.

Используйте следующую команду, чтобы проверить, имеет ли модуль pod событие предупреждения для создания persistentvolumeclaim.

$ kubectl describe pod fiopod
...
Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  40s   default-scheduler  0/3 nodes are available: waiting for ephemeral volume controller to create the persistentvolumeclaim "fiopod-ephemeralvolume". preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling..

В этом примере модуль pod отображает предупреждение о создании утверждения fiopod-ephemeralvolumeпостоянного тома.

Используйте следующую команду, чтобы проверить, не удалось ли выполнить утверждение постоянного тома из-за нехватки емкости.

$ kubectl describe pvc fiopod-ephemeralvolume
...
  Warning  ProvisioningFailed    107s (x13 over 20m)  containerstorage.csi.azure.com_aks-nodepool1-29463073-vmss000000_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  failed to provision volume with StorageClass "acstor-ephemeraldisk-temp": rpc error: code = Internal desc = Operation failed: GenericOperation("error in response: status code '507 Insufficient Storage', content: 'RestJsonError { details: \"Operation failed due to insufficient resources: Not enough suitable pools available, 0/1\", message: \"SvcError :: NotEnoughResources\", kind: ResourceExhausted }'")

В этом примере Insufficient Storage показана причина сбоя подготовки томов.

Выполните следующую команду, чтобы проверить доступную емкость эфемерного диска одного узла.

$ kubectl get diskpool -n acstor
NAME                                CAPACITY      AVAILABLE     USED        RESERVED    READY   AGE
ephemeraldisk-temp-diskpool-jaxwb   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-temp-diskpool-wzixx   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-temp-diskpool-xbtlj   75660001280   75031990272   628011008   560902144   True    21h

В этом примере доступная емкость временного диска для одного узла составляет 75031990272 байт или 69 ГиБ.

Настройте размер хранилища томов ниже доступной емкости и повторно разверните модуль pod. См. раздел "Развертывание модуля pod с универсальным временным томом".

Не удается подключить том из-за хранения метаданных в автономном режиме

Хранилище контейнеров Azure использует etcdраспределенное, надежное хранилище key-value для хранения метаданных томов и управления ими для поддержки операций оркестрации томов. Для обеспечения высокой доступности etcd и устойчивости выполняется в трех модулях pod. Если запущено менее двух etcd экземпляров, хранилище контейнеров Azure остановит операции оркестрации томов, сохраняя доступ к данным к томам. Хранилище контейнеров Azure автоматически обнаруживает, когда etcd экземпляр находится в автономном режиме и восстанавливает его. Однако если после перезапуска кластера AKS возникают ошибки оркестрации томов, возможно, что etcd экземпляр не удалось восстановить автоматически. Следуйте инструкциям в этом разделе, чтобы определить состояние работоспособности etcd экземпляров.

Выполните следующую команду, чтобы получить список модулей pod.

kubectl get pods

Вы увидите выходные данные, аналогичные приведенным ниже.

NAME     READY   STATUS              RESTARTS   AGE 
fiopod   0/1     ContainerCreating   0          25m 

Описать модуль pod:

kubectl describe pod fiopod

Как правило, вы увидите сообщения о сбоях тома, если хранилище метаданных находится в автономном режиме. В этом примере fiopod находится в состоянии ContainerCreating , а предупреждение FailedAttachVolume указывает, что создание ожидается из-за сбоя подключения тома.

Name:             fiopod 

Events: 

Type     Reason              Age                 From                     Message 

----     ------              ----                ----                     ------- 

Normal   Scheduled           25m                 default-scheduler        Successfully assigned default/fiopod to aks-nodepool1-xxxxxxxx-vmss000009

Warning  FailedAttachVolume  3m8s (x6 over 23m)  attachdetach-controller  AttachVolume.Attach failed for volume "pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" : timed out waiting for external-attacher of containerstorage.csi.azure.com CSI driver to attach volume xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Чтобы проверить состояние экземпляров etcd , можно также выполнить следующую команду:

kubectl get pods -n acstor | grep "^etcd"

Вы должны увидеть выходные данные, аналогичные приведенным ниже, со всеми экземплярами в состоянии выполнения:

etcd-azurecontainerstorage-bn89qvzvzv                            1/1     Running   0               4d19h
etcd-azurecontainerstorage-phf92lmqml                            1/1     Running   0               4d19h
etcd-azurecontainerstorage-xznvwcgq4p                            1/1     Running   0               4d19h

Если в состоянии выполнения отображается менее двух экземпляров, можно заключить, что том не удается подключить из-за автономного хранилища метаданных, а автоматическое восстановление не выполнено. В этом случае отправьте запрос в службу поддержки Azure.

См. также