Проблемы при развертывании Weaviate на AKS (служба Azure Kubernetes)
Я пытаюсь развернуть Weaviate в службе Azure Kubernetes. Во время развертывания Helm возникла проблема, при которой я получаю следующее сообщение об ошибке:
Multi-Attach error for volume "pvc-69db6155-4f28-11ea-b829-b2b3d6f12b6f" Volume is already exclusively attached to one node and can't be attached to another
Unable to mount volumes for pod "esvector-master-0_weaviate(20dafc44-4f58-11ea-b829-b2b3d6f12b6f)": timeout expired waiting for volumes to attach or mount for pod "weaviate"/"esvector-master-0". list of unmounted volumes=[esvector-master]. list of unattached volumes=[esvector-master default-token-ckf7v]
Единственное, что я изменил в values.yaml, - это имя класса хранилища:
pvc:
size: 2Gi
storageClassName: default
Я внес это изменение, поскольку в Azure не установлен класс NFS. Вместо этого я использовал класс kubernetes по умолчанию, который использует управляемые диски Azure.
У кого-нибудь есть идеи, как решить эту проблему? Благодарность!
1 ответ
Мы обновили наши документы, так как они не были полными по теме аварийного восстановления etcd в таблице управления. Имея в виду обновленную документацию, позвольте мне попытаться объяснить, что здесь происходит:
Нет nfs
объемы требуемые по умолчанию
По умолчанию Weaviate использует постоянные тома для своих баз данных. Классы хранения для тех, которые используют значения по умолчанию, т.е. неnfs
. Поэтому при использовании значения по умолчаниюvalues.yaml
нет nfs
на кластере требуется поддержка.
etcd аварийное восстановление
На момент написания этого ответа одним из бэкэндов хранилища для Weaviate является etcd
. Мы используем диаграмму bitnami etcd, которая упоминается в Weaviate Chart как дополнительная диаграмма. Etcd не выдерживает отказа кворума узлов (Источник). Регулярное обслуживание Kubernetes может легко привести к катастрофическому сбою etcd, особенно при небольшом развертывании (например, 3 или меньше модулей etcd). Для борьбы с этим в приведенной выше диаграмме от Bitnami есть режим аварийного восстановления.
Обратите внимание, что etcd.disasterRecovery.enabled
по умолчанию false
, но мы рекомендуем установить его на true
в производстве.
Развернуть nfs
Provider, если требуется аварийное восстановление etcd.
Для функции аварийного восстановления etcd, которая является частью диаграммы управления bitnami etcd, требуетсяReadWriteMany
доступ к томам моментальных снимков. Рекомендуется использоватьnfs
Provider, как указано в документации Weaviate Helm.
Почему nfs-provisioner
не входит в диаграмму Weaviate?
Может показаться нелогичным, что аварийное восстановление является важной частью стабильной производственной установки, но провайдер не включен в составную диаграмму в качестве дополнительной диаграммы. На это есть несколько причин:
- Сочетание проблем: диаграмма Weaviate устанавливает Weaviate с целью изолировать все эффекты в одном пространстве имен. В
nfs-provisioner
вносит изменения в кластер, которые могут быть не совсем очевидными - Мультитенантность: мы не можем делать предположений, что ваш кластер Kubernetes работает только с одним экземпляром Weaviate или даже только с экземплярами Weaviate. Это может быть большой общий кластер с несколькими арендаторами. В этом случае объединение инициатора приведет к установке нескольких провайдеров, когда в кластере может и должен быть только один.
- Различные жизненные циклы приводят к циклическим зависимостям: если бы провайдер был связан с Weaviate, было бы невозможно удалить диаграмму Weaviate. Это связано с тем, что при удалении диаграммы Weaviate также удаляются
etcd
подграфик. Последний снимаетnfs
тома, используемые для создания снимков. Однако, если бы сборщик был частью диаграммы, он уже был бы удален, в результате чего кластер не мог удалитьnfs
тома.
tl; dr: Разверните инициатор в другом пространстве имен, разверните столько экземпляров Weaviate, сколько хотите, в отдельных пространствах имен. Это позволяет избежать различий в жизненном цикле, проблем с мультитенантностью и циклических зависимостей.