Использование распределенного хранилища Alibaba Cloud в собственных K8S-кластерах
Categories:
Введение
Статья написана 14 июня 2024 года. В ней рассказывается, как использовать распределенное хранилище Alibaba Cloud в собственных кластерах на Alibaba Cloud. В конце статьи приведены ссылки на документацию, где официальная документация Alibaba Cloud на китайском языке, а установка плагина хранения Alibaba Cloud на github доступна только на английском языке. Рекомендуется читателям с возможностью прочитать оригинал.
Установка плагина хранения
- Создайте пользовательскую стратегию разрешений: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
- Создайте роль RAM, предоставьте пользовательскую стратегию разрешений, сохраните
accesskeyиsecretkubectl create secret -n kube-system generic csi-access-key --from-literal=id='{id}' --from-literal=secret='{secret}'
- Установите CSI драйвер, helm chart нет, можно только локально установить (20240613).
git clone https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver.gitcd alibaba-cloud-csi-driver/deploy- Если вы устанавливаете в собственный кластер на ECS Alibaba Cloud, вы можете выполнить следующее предложение, если нет, пожалуйста, прочитайте самостоятельно: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/install.md
helm upgrade --install alibaba-cloud-csi-driver ./chart --values chart/values-ecs.yaml --namespace kube-system
- Подтвердите,
watch kubectl get pods -n kube-system -l app=csi-plugin
Справочные материалы по выбору типа хранения
- Минимальный объем диска ECS 20 ГБ, IOPS 3000, этот объем довольно большой, не очень выгодно.
- Динамический том диска
- Официальная документация:
- Диск не поддерживает использование между зонами доступности, это неразделяемое хранилище, и может быть подключено только одним Pod одновременно. (Проверено, может быть подключено несколькими Pod одного deployment)
- Тип диска должен соответствовать типу ECS для подключения, в противном случае подключение не удастся. См. Семейства типов экземпляров для соответствия типов дисков и типов ECS.
- При развертывании приложения PV создается автоматически через StorageClass для покупки диска. Если вы уже купили диск, рекомендуется использовать статический том диска.
- Объем диска не может превышать диапазон объема одного диска.
- Когда Pod пересоздается, исходный диск будет переподключен. Если из-за других ограничений Pod не может быть запланирован в исходную зону доступности, Pod останется в состоянии ожидания.
- Динамически созданный диск оплачивается по мере использования.
- Другие тестовые результаты:
- Хотя диск может быть подключен несколькими Pod, только один Pod может читать и писать, другие Pod не могут читать и писать. Поэтому в pvc
accessModesможно установить толькоReadWriteOnce, изменение не даст правильного результата. - Если в StorageClass
reclaimPolicyустановлено значениеDelete, при удалении PVC диск будет автоматически удален. - Если в StorageClass
reclaimPolicyустановлено значениеRetain, при удалении PVC диск не будет автоматически удален, его нужно вручную удалить в кластере и на консоли Alibaba Cloud.
- Хотя диск может быть подключен несколькими Pod, только один Pod может читать и писать, другие Pod не могут читать и писать. Поэтому в pvc
- Сложно найти подходящее применение.
- Официальная документация:
- Статический том диска
- Официальная документация:
- Вручную создайте PV и PVC
- Диск не поддерживает использование между зонами доступности, это неразделяемое хранилище, и может быть подключено только одним Pod одновременно.
- Тип диска должен соответствовать типу ECS для подключения, в противном случае подключение не удастся.
- Можно выбрать диск в состоянии ожидания подключения в том же регионе и зоне доступности, что и кластер.
- Официальная документация:
- Динамический том диска
- Задержка операций NAS велика, лучшее время 2 мс, глубокое хранение 10 мс, оплата по мере использования, производительность чтения и записи выше по сравнению с хранилищем объектов OSS
- Том OSS, https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/oss-volume-overview-1?spm=a2c4g.11186623.0.0.43166a351NbtvU
- OSS - это разделяемое хранилище, может предоставлять разделяемую службу хранения для нескольких Pod одновременно.
- (20240613) В настоящее время поддерживаются CentOS, Alibaba Cloud Linux, ContainerOS и Longxin операционные системы.
- При использовании тома данных каждое приложение использует независимое имя PV.
- Том OSS - это файловая система FUSE, подключаемая с помощью ossfs.
- Подходит для чтения файлов. Например, чтение файлов конфигурации, видео, изображений и т.д.
- Не подходит для приложений, которым нужно записывать файлы. Для записи файлов рекомендуется использовать SDK или использовать службу NAS томов.
- ossfs можно оптимизировать производительность в кэшировании, правах и т.д. путем настройки параметров конфигурации
- Ограничения использования ossfs
- Операции случайной или добавочной записи файлов приведут к перезаписи всех файлов.
- Из-за необходимости удаленного доступа к серверу OSS производительность операций метаданных, таких как list directory, плохая.
- Операции переименования файлов и папок не атомарны.
- При подключении одного и того же OSS Bucket несколькими клиентами поведение каждого клиента должно быть скоординировано пользователями, например, избегать одновременной записи одного и того же файла несколькими клиентами и т.д.
- Не поддерживает жесткие ссылки (Hard Link).
- Если версия CSI plugin ниже v1.20.7, обнаруживаются только локальные изменения, а внешние изменения, сделанные другими клиентами или инструментами, не обнаруживаются.
- Чтобы избежать повышения нагрузки системы, не рекомендуется использовать в сценариях высокой параллельной чтения и записи.
- Если это гибридный кластер (часть узлов не принадлежит Alibaba Cloud), можно использовать только NAS и OSS статические тома.
- Диск, nas и oss имеют ограничения по региону.
Вывод: диск подключается и выделяется в виде целого диска, неудобно для совместного использования. OSS имеет гранулярность операций до файла, высокая параллельная чтение и запись имеют проблемы с производительностью, и поддержка системы ограничена.
- Диск подходит для баз данных и других сценариев, требующих большого пространства и высокой производительности
- Другие сценарии с низкими требованиями к производительности могут выбрать NAS
- OSS не подходит для высокопараллельной записи в кластерах Alibaba Cloud, может применяться для параллельного чтения.
Официальная документация Alibaba Cloud имеет проблемы с неединым расположением и противоречиями, читателям необходимо самостоятельно определять дату документа, некоторые характеристики, заявленные как неподдерживаемые, с обновлением версий могут уже поддерживаться, необходимо самостоятельно проводить некоторые попытки.
Шаги операции
Это официальное руководство Alibaba Cloud, после установки плагина хранения Alibaba Cloud в соответствии с предыдущим руководством, можно развернуть и протестировать в соответствии с использованием статических томов NAS.
Примечание: Пользователи k3s столкнутся с проблемой local-path-storage, сообщение об ошибке может быть:
- failed to provision volume with StorageClass “local-path”: claim.Spec.Selector is not supported
- Waiting for a volume to be created either by the external provisioner ’localplugin.csi.alibabacloud.com’ or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.
Необходимо установить storageClassName в persistentVolumeClaim как пустой, чтобы избежать использования local-path-storage по умолчанию в k3s.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-nas
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
selector:
matchLabels:
alicloud-pvname: pv-nas
storageClassName: ""
Ссылки
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/disk.md
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/install.md
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/deploy/chart/values.yaml
- https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/use-dynamically-provisioned-disk-volumes?#6d16e8a415nie
- https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/mount-statically-provisioned-nas-volumes?spm=a2c4g.11186623.0.0.125672b9VnrKw6