Рубрики
Uncategorized

Kubernetes Storage с использованием ceph

Что такое kubernetes? Kubernetes, потрясающий инструмент оркестровки контейнерных контейнеров, меняет W … Tagged Kubernetes, Ceph, DevOps, OpenSource.

Что такое 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»