Что такое kubernetes?
Kubernetes, потрясающий инструмент оркестровки контейнерных контейнеров, меняет способ разрабатывания и развертывания приложений. Вы можете указать необходимые ресурсы, которые вы хотите, и иметь их доступные, не беспокоясь о базовой инфраструктуре. Kubernetes намного впереди с точки зрения высокой доступности, масштабирования, управления вашим приложением, но раздел хранения в K8S все еще развивается. Многие опоры для хранения добавляются и готовы к производству.
Люди предпочитают кластерные приложения для хранения данных. Но как насчет не складываемых приложений? Где эти приложения хранят данные, чтобы сделать их очень доступными? Учитывая эти вопросы, давайте пройдемся через хранилище CEPH и его интеграцию с Kubernetes.
Что такое хранилище Ceph?
CEPH-это открытый исходный код, программное хранилище, поддерживаемое RedHat. Он способен блокировать, объект и хранилище файлов. Кластеры CEPH разработаны для работы на любом оборудовании с помощью алгоритма, называемого Crast (контролируемая репликация под масштабируемым хешоном). Этот алгоритм гарантирует, что все данные будут правильно распределены по кластеру и быстро без каких -либо ограничений. Репликация, тонкая подготовка, снимки являются ключевыми характеристиками хранилища CEPH.
Существуют хорошие решения для хранения, такие как Gluster, Swift, но мы идем с Ceph по следующим причинам: 1 Файл, блок и хранилище объекта в той же обертке. 2. Лучшая скорость передачи и более низкая задержка. 3. Легко доступное хранилище, которое может быстро масштабировать или вниз.
Мы собираемся использовать хранилище CEPH-RBD в этом блоге для интеграции с Kubernetes.
Развертывание CEPH
Развертывание очень доступного Ceph Cluster довольно простое и простое. Я предполагаю, что вы знакомы с настройкой кластера Ceph.
Если вы проверете статус, вы увидите что -то вроде:
Здесь обратите внимание, что My Ceph Монитористы HostNames-это IP-10-0-0-58, IP-10-0-0-78 и IP-10-0-0- 237
Есть несколько вещей, которые вам нужно сделать, как только ваш кластер Ceph будет запущен.
создать бассейн
ceph osd pool create kubernetes 1024
Список пулов
ceph osd lspools
Создайте RBD_IMAGE в бассейне Kubernetes
rbd create kube --size 64 -p kubernetes
Просмотреть созданный RBD_IMAGE
rbd info kube -p kubernetes
Удалить разрешения на изображение
rbd feature disable kube -p kubernetes object-map fast-diff deep-flatten
Просмотреть создание изображения RBD и проверить, удаляются ли разрешения или нет
rbd info kube -p kubernetes
Интеграция K8S
После настройки кластера Ceph мы потребляли его с Kubernetes. Я предполагаю, что ваш кластер Kubernetes работает. Мы будем использовать CEPH-RBD в качестве хранилища в Kubernetes.
CEPH-RBD и Kubernetes
Нам нужен клиент Ceph RBD для достижения взаимодействия между кластером Kubernetes и Cephfs. Проверьте репо https://github.com/ajinkyaingole30/K8s-Ceph.git
Настройка Kubernetes Master в качестве клиента CEPH, чтобы мы могли использовать RBD_IMAGE в качестве хранилища в Kubernetes
Скопируйте ceph.repo в/etc/yum.repos.d/и скачать Ceph-common
cp ceph.repo /etc/yum.repos.d/ceph.repo yum install ceph-common
Начните и включите сервис RBDMAP
systemctl start rbdmap systemctl enable rbdmap
Скопируйте Ceph.client, admin.keyring, а также ceph.conf из Ceph Node и вставьте его в/etc/ceph of kubernetes-master (клиент Ceph). Вы можете направить SCP от Ceph Node на Kubernetes Master
scp /etc/ceph/ceph.client.admin.keyring root@master-node:/etc/ceph/ scp /etc/ceph/ceph.conf root@master-node:/etc/ceph/
Проверьте, можете ли вы увидеть бассейны от Kubernetes Master (клиент CEPH)
rados lspools
Теперь сопоставьте RBD_IMAGE с вашим клиентом CEPH
rbd map kube -p kubernetes
Проверьте сопоставление RBD_IMAGE
rbd showmapped lsblk
Этот клиент не находится в официальном контейнере Kube-Controller-Manager, поэтому давайте попробуем создать плагин внешнего хранилища для CEPH.
скачать https://github.com/ajinkyaingole30/K8s-Ceph.git
git clone https://github.com/ajinkyaingole30/K8s-Ceph.git
Создайте файл csi-config-map.yaml, аналогичный примеру ниже, заменив FSID для «кластеридной», и адреса монитора для «мониторов»:
--- apiVersion: v1 kind: ConfigMap data: config.json: |- [ { "clusterID": "671be3f7-44b4-a79d-07cf4ae58ee1", "monitors": [ "10.0.0.58:6789", "10.0.0.78:6789", "10.0.0.237:6789" ] } ] metadata: name: ceph-csi-config
После создания храните новый объект ConfigMap в Kubernetes:
kubectl apply -f csi-config-map.yaml
Также генерируйте ksm-config.yaml
--- apiVersion: v1 kind: ConfigMap data: config.json: |- { "vault-test": { "encryptionKMSType": "vault", "vaultAddress": "http://vault.default.svc.cluster.local:8200", "vaultAuthPath": "/v1/auth/kubernetes/login", "vaultRole": "csi-kubernetes", "vaultPassphraseRoot": "/v1/secret", "vaultPassphrasePath": "ceph-csi/", "vaultCAVerify": "false" } } metadata: name: ceph-csi-encryption-kms-config kubectl apply -f kms-config.yaml
CEPH-CSI требует учетных данных CEPHX для общения с кластером CEPH. Сгенерируйте файл csi-rbd-secret.yaml, аналогичный примеру ниже, используя вновь созданный идентификатор пользователя Kubernetes и Cephx:
--- apiVersion: v1 kind: Secret metadata: name: csi-rbd-secret namespace: default stringData: userID: admin userKey: AQD9o0Fd6hQRChAAt7fMaSZXduT3NWEqylNpmg==
После создания храните новый секретный объект в Kubernetes:
kubectl apply -f csi-rbd-secret.yaml
Настройте плагины CEPH-CSI
Создайте требуемые объекты Cubernetes Clusterrole/ClusterRoleBinding KuberCount и RBAC. Эти объекты не обязательно должны быть настроены для вашей среды Kubernetes и поэтому могут использоваться как есть из развертывания CEPH-CSI YAML:
kubectl apply -f csi-provisioner-rbac.yaml kubectl apply -f csi-nodeplugin-rbac.yaml
Наконец, создайте плагины CEPH-CSI Provisioner и Node. За возможным исключением версии выпуска контейнера CEPH-CSI, эти объекты не обязательно должны быть настроены для вашей среды Kubernetes и, следовательно, могут использоваться как есть из развертывания CEPH-CSI YAML:
kubectl apply -f csi-rbdplugin-provisioner.yaml kubectl apply -f csi-rbdplugin.yaml
Использование устройств Ceph Block Создайте StorageClass
Kubernetes Storageclass определяет класс хранилища. Многочисленные объекты StorageClass могут быть созданы для сопоставления с различными уровнями качества обслуживания (то есть NVME против HDD-бассейнов) и функциям.
Например, чтобы создать StorageClass CEPH-CSI, которое отображает в пул Kubernetes, созданный выше, можно использовать следующий файл YAML после обеспечения того, чтобы «кластерное» свойство соответствовало FSID вашего кластера CEPH: FSID:
--- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-rbd-sc provisioner: rbd.csi.ceph.com parameters: clusterID: 671be3f7-44b4-a79d-07cf4ae58ee1 pool: kubernetes csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret csi.storage.k8s.io/provisioner-secret-namespace: default csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret csi.storage.k8s.io/node-stage-secret-namespace: default reclaimPolicy: Delete mountOptions: - discard kubectl apply -f csi-rbd-sc.yaml
Создайте постоянный претензии по объему
PersistentVolumeclaim — это запрос на абстрактные ресурсы хранения пользователя. Постоянная мощность будет тогда связана с ресурсом POD, чтобы обеспечить PersistentVolume, который будет подкреплен изображением блока Ceph. Необязательный VolumeMode может быть включен для выбора между установленной файловой системой (по умолчанию) или объемом на основе устройства на основе необработанного блока.
Чтобы создать на основе блоков PersistentVolumeclaim, в котором используется основополагающее выше StorageClass на основе CEPH-CSI, можно использовать следующий YAML для запроса хранилища Block от CSI-RBD-Sc StorageClass:
--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: raw-block-pvc spec: accessModes: - ReadWriteOnce volumeMode: Block resources: requests: storage: 50Mi storageClassName: csi-rbd-sc kubectl apply -f raw-block-pvc.yaml
Проверьте стручок, работает ли он или нет
kubectl get pods
Проверьте, связан ли ПВХ
kubectl get pvc
Проверьте, есть ли PV связан
kubectl get pv
Чтобы создать на основе файловой системы PersistentVolumeclaim, в котором используется стераген, созданный на основе CEPH-CSI, созданный выше, можно использовать следующий YAML для запроса монтированной файловой системы (поддержанный изображением RBD) от CSI-RBD-SCTORAGASSSLASS:
--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: rbd-pvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 50Mi storageClassName: csi-rbd-sc kubectl apply -f fs_pvc.yaml
Проверьте, связан ли ПВХ RBD-PVC или нет
kubectl get pvc
Перечислите изображения RBD в бассейнах Kubernetes и снова удалите разрешение нового созданного RBD
# rbd ls -p kubernetes # rbd feature disable csi-vol-db6a4c87-c4c8-11ea-87a0-721582595d51 -p kubernetes object-map fast-diff deep-flatten
Здесь «CSI-VOL-DB6A4C87-C4C8-11EA-87A0-721582595D51»-это название моего нового изображения RDB, созданного после создания ПВХ.
Следующее демонстрирует и пример привязки вышеупомянутого PersistentVolumeclaim с ресурсом POD в качестве монтированной файловой системы:
--- apiVersion: v1 kind: Pod metadata: name: ceph-pod spec: containers: - name: web-server image: nginx volumeMounts: - name: mypvc mountPath: /var/lib/www/html volumes: - name: mypvc persistentVolumeClaim: claimName: rbd-pvc readOnly: false kubectl apply -f pod.yaml
Проверьте стручок, работает ли он или нет
kubectl get pods
Попасть в капсул, чтобы проверить Если объем прикреплен
kubectl exec -it ceph-pod -- df -hT | grep /dev/rbd0
Используя это, вы можете интегрировать CEPH с Kubernetes
Я надеюсь, что вам понравилась статья и нашли информацию полезной. Пожалуйста, поделитесь своими отзывами.
Счастливого проведения!
Оригинал: «https://dev.to/ingoleajinkya/kubernetes-storage-using-ceph-4lbp»