Вопрос или проблема
Я развернул minio через kubernetes, но возникла ошибка с minio, когда я создаю tenant.
Я проверил логи, и они выглядят так
INFO: Unable to use the drive http://storage-pool-0-0.storage-hl.minio.svc.cluster.local:9000/export: drive not found, will be retried
INFO: Unable to use the drive http://storage-pool-0-1.storage-hl.minio.svc.cluster.local:9000/export: drive not found, will be retried
INFO: Unable to use the drive http://storage-pool-0-2.storage-hl.minio.svc.cluster.local:9000/export: drive not found, will be retried
INFO: Unable to use the drive http://storage-pool-0-3.storage-hl.minio.svc.cluster.local:9000/export: drive not found, will be retried
INFO: Waiting for a minimum of 2 drives to come online (elapsed 23m13s)
Все логи такие, и я попробовал выполнить kubectl exec -it storage-pool-0-3 -n minio -- curl -I http://storage-pool-0-0.storage-hl.minio.svc.cluster.local:9000
.
Я получил следующее
Defaulted container "minio" out of: minio, sidecar, validate-arguments (init)
HTTP/1.1 400 Bad Request
Accept-Ranges: bytes
Content-Length: 225
Content-Type: application/xml
Server: MinIO
Vary: Origin
Date: Sun, 21 Jul 2024 23:13:57 GMT
Что мне сделать, чтобы решить эту проблему и использовать minio нормально?
Статус моего kubernetes
root@dev-master-1:~/minio/mc# kubectl get all -n minio
NAME READY STATUS RESTARTS AGE
pod/storage-pool-0-0 2/2 Running 0 32m
pod/storage-pool-0-1 2/2 Running 0 32m
pod/storage-pool-0-2 2/2 Running 0 32m
pod/storage-pool-0-3 2/2 Running 0 32m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/minio LoadBalancer 10.101.4.180 192.168.3.240 80:32676/TCP 32m
service/storage-console LoadBalancer 10.103.42.214 192.168.3.241 9090:31544/TCP 32m
service/storage-hl ClusterIP None <none> 9000/TCP 32m
NAME READY AGE
statefulset.apps/storage-pool-0 4/4 32m
И мой cni – cilium, LoadBalance – Metallb
Я столкнулся с той же проблемой
MiniO не мог создавать файлы, и при подробном изучении оказалось, что закончилось количество inode
Решение: увеличить диски для добавления inode
kex minio-1 -- bash
bash-5.1$ df -h
Filesystem Size Used Avail Use% Mounted on
overlay 63G 47G 14G 78% /
tmpfs 64M 0 64M 0% /dev
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/vdb 4.9G 2.1G 2.8G 44% /export <===============
/dev/vda2 63G 47G 14G 78% /data
shm 64M 0 64M 0% /dev/shm
tmpfs 13G 12K 13G 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 7.9G 0 7.9G 0% /proc/acpi
tmpfs 7.9G 0 7.9G 0% /proc/scsi
tmpfs 7.9G 0 7.9G 0% /sys/firmware
bash-5.1$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
overlay 4194304 1150483 3043821 28% /
tmpfs 2047670 17 2047653 1% /dev
tmpfs 2047670 17 2047653 1% /sys/fs/cgroup
/dev/vdb 327680 327680 0 100% /export <===============
/dev/vda2 4194304 1150483 3043821 28% /data
shm 2047670 1 2047669 1% /dev/shm
tmpfs 2047670 9 2047661 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 2047670 1 2047669 1% /proc/acpi
tmpfs 2047670 1 2047669 1% /proc/scsi
tmpfs 2047670 1 2047669 1% /sys/firmware
Ответ или решение
Вопрос "Невозможно создать тенант MinIO с ошибкой сети" является распространенной проблемой, с которой сталкиваются при развертывании MinIO в среде Kubernetes. Рассмотрим теоретические предпосылки проблемы, примеры из вашего описания и предложим возможные решения в контексте этой ситуации.
Теория
При развертывании MinIO в среде Kubernetes каждый компонент должен корректно взаимодействовать с другими компонентами через сеть. Ваша проблема относится к сети, когда определенные диски не распознаются и не могут быть использованы MinIO. Проблема может быть связана с различными факторами, включая:
-
CNI (Container Network Interface): В вашем случае используется Cilium, который обеспечивает сетевое взаимодействие между подами. Возможные сбои на этом уровне могут мешать поду MinIO видеть другие поды.
-
Балансировщик нагрузки: Вы используете MetalLB, который обеспечивает распределение нагрузки и доступ к сервисам. Неправильная настройка может также вызвать проблемы с доступностью.
-
Настройки StatefulSet: MinIO часто развертывается с использованием StatefulSet, чтобы обеспечить стойкость данных. Ошибки в конфигурации Persistent Volume или Persistent Volume Claims могут привести к проблемам с доступностью дисков.
-
Проблемы с дисковым пространством: Как вы упоминаете, проблема с inodes может предотвратить создание файлов, даже если физическое дисковое пространство ещё доступно.
Пример
Ваши логи показывают, что все четыре диска не распознаны (сообщения "drive not found"). Эти сообщения могут указывать на то, что адресации не удается достичь целей, которые MinIO подразумевает в сети.
Когда вы проверили соединение с помощью команды kubectl exec
, вы получили ответ 400 Bad Request. Это указывает, что хотя соединение установлено, сервер MinIO на другой стороне отклоняет запрос. Это может быть связано с неправильной конфигурацией шоу MinIO или неправильной маршрутизацией запросов.
Также в вашем описании упоминается исчерпание inodes на определенном разделе диска (/export
), что указывает на ещё один возможный источник проблемы. MinIO требует наличие свободных inodes для работы с файлами, и если их не хватает, это может мешать функционированию системы.
Реализация
Следующие шаги помогут вам диагностировать и исправить проблему:
-
Проверка CNI: Убедитесь, что Cilium работает исправно и поды могут пинговаться друг друга. Используйте
kubectl describe pod <pod-name> -n minio
для проверки состояния сети. -
Проверка конфигурации DNS и имен сервисов: Проверьте, что адреса, такие как
http://storage-pool-0-0.storage-hl.minio.svc.cluster.local:9000
, корректно разрешаются. -
Проверка MetalLB: Убедитесь, что IP-адреса, распределяемые MetalLB, активны и правильно настроены.
-
Увеличение inodes: Для справления с проблемой inodes необходимо увеличить размер раздела или добавить дополнительные диски с большим количеством inodes. Это может включать в себя создание новых Persistent Volume и связь их с StatefulSet.
-
Проверка логов MinIO: Изучите логи MinIO и компонента cilium для получения информации о тревогах или ошибках, которые могли бы указать на источник проблемы.
-
Консультация с документацией: Детальная проверка официальной документации MinIO и Cilium может помочь выявить настройки, о которых вы могли не знать.
-
Проверка StatefulSet: Перепроверьте конфигурацию ваших StatefulSets и связанных Persistent Volume Claims, чтобы убедиться в правильности их настройки.
С помощью вышеупомянутых действий вы сможете глубже понять природу проблемы и найти соответствующее решение. Правильная диагностика и настройка сети, наряду с управлением ресурсами, является ключом к успешному развертыванию MinIO в Kubernetes.