☸️ Как настроить динамическое предоставление томов Kubernetes с помощью Heketi & GlusterFS

by itisgood
Предоставление динамических томов в Kubernetes позволяет создавать тома хранения по требованию без ручного вмешательства администратора.
Когда разработчики выполняют развертывание без динамической инициализации, администраторы кластера должны вручную звонить своему облачному провайдеру или поставщику хранилища, чтобы создать новые тома хранилища, из которых создаются PersistentVolumes.
В этом руководстве будет обсуждаться, как добиться динамической инициализации томов в Kubernetes, используя решение распределенного хранения GlusterFS и интерфейс управления Heketi RESTful.
Ожидается, что вы развернули файловую систему хранения с масштабируемым подключением к сети Heketi и GlusterFS.

Как динамическая инициализация настраивается в Kubernetes

В Kubernetes динамическое предоставление тома основано на объекте API StorageClass из группы API storage.k8s.io.

Как администратор кластера, вы определите столько объектов StorageClass, сколько необходимо, каждый из которых задает плагин тома (инициатора), который предоставляет том и набор параметров для передачи этому провайдеру при инициализации.

Ниже приведены шаги, которые вы будете использовать для настройки динамической инициализации томов в Kubernetes с использованием Gluster и Heketi API.

Настройка GlusterFS и Heketi

Ожидается, что у вас есть работающие Gluster и Heketi, прежде чем вы продолжите настройку на конце Kubernetes.

Обратитесь к нашему руководству по настройке.

☸️ Настройка динамического постоянного хранения томов Kubernetes / OpenShift с помощью GlusterFS и Heketi

На данный момент у нас есть только руководство по CentOS, но мы работаем над руководством по развертыванию для систем Ubuntu / Debian.

После завершения установки перейдите к шагу 2:

Создать объект StorageClass в Kubernetes

Нам нужно создать объект StorageClass, чтобы включить динамическую инициализацию для пользователей контейнерной платформы.

Объекты StorageClass определяют, какой поставщик должен использоваться и какие параметры должны быть переданы этому поставщику при вызове динамической подготовки.

Проверьте свой идентификатор кластера Heketi

$ heketi-cli cluster list
Clusters:
Id:b182cb76b881a0be2d44bd7f8fb07ea4 [file][block]

Создйте секрет Kubernetes

Получите в формате base64 свой пароль администратора Heketi.

$ echo -n "PASSWORD" | base64
Затем создайте секрет с паролем для доступа к Heketi.
$ vim gluster-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: heketi-secret
  namespace: default
type: "kubernetes.io/glusterfs"
data:
  # echo -n "PASSWORD" | base64
  key: cGFzc3dvcmQ=

Где:

cGFzc3dvcmQ = является выводом команды echo.
Создайте секрет, выполнив команду:
$ kubectl create -f gluster-secret.yaml
Подтвердите создание секрета
$ kubectl get secret
NAME                                               TYPE                                  DATA   AGE
heketi-secret                                      kubernetes.io/glusterfs               1      1d
Создайте StorageClass
$ cat glusterfs-sc.yaml
 kind: StorageClass
 apiVersion: storage.k8s.io/v1beta1
 metadata:
   name: gluster-heketi
 provisioner: kubernetes.io/glusterfs
 reclaimPolicy: Delete
 volumeBindingMode: Immediate
 allowVolumeExpansion: true
 parameters:
   resturl: "http://heketiserverip:8080" 
   restuser: "admin" 
   secretName: "heketi-secret"
   secretNamespace: "default"
   volumetype: "replicate:2"
   volumenameprefix: "k8s-dev"
   clusterid: "b182cb76b881a0be2d44bd7f8fb07ea4"
  • Где:
  • gluster-heketi – это имя класса StorageClass, который будет создан.
  •  Допустимые параметры политики возврата: Retain, Delete или Recycle.». Политика Delete означает, что динамически подготовленный том автоматически удаляется, когда пользователь удаляет соответствующий PersistentVolumeClaim.
  •  Поле volumeBindingMode определяет, когда должны выполняться привязка тома и динамическая подготовка.
  • Допустимые параметры: Immediate & WaitForFirstConsumer. Непосредственный режим указывает, что привязка тома и динамическая инициализация происходят после создания PersistentVolumeClaim.
  • Режим WaitForFirstConsumer задерживает привязку и предоставление PersistentVolume до тех пор, пока не будет создан Pod, использующий PersistentVolumeClaim.
  • Resturl – это URL вашей конечной точки heketi.
  • heketi-secret– это секрет, созданный для полномочий heketi. По умолчанию это имя пространства имен, в котором был создан секрет
  • replicate: 2 указывает коэффициент репликации по умолчанию для созданных томов кластера. Для большего количества HA используйте 3.
  • volumenameprefix: по умолчанию динамически подготовленные тома имеют схему именования в формате vol_UUID. Мы предоставили желаемое имя тома из хранилища.
  • Таким образом, схема именования будет иметь вид: ulmenameprefix_Namespace_PVCname_randomUUID
  • b182cb76b881a0be2d44bd7f8fb07ea4 – идентификатор кластера, полученный из команды heketi-cli cluster list

 

Другой параметр, который можно установить:

volumeoptions: "user.heketi.zone-checking strict"

Настройка / поведение по умолчанию:

volumeoptions: "user.heketi.zone-checking none"

Это заставляет Heketi строго размещать реплики в разных зонах.

Требуемое минимальное количество узлов, необходимых для присутствия в разных зонах, равно 3, если значение реплики установлено на 3.

После создания файла выполните следующую команду, чтобы создать объект StorageClass.

$ kubectl create -f gluster-sc.yaml

Подтвердите создание StorageClass.

$ kubectl get sc
NAME                            PROVISIONER                    AGE
glusterfs-heketi                kubernetes.io/glusterfs        1d
local-storage                   kubernetes.io/no-provisioner   30d

Шаг 2. Создание объекта PersistentVolumeClaim

Когда пользователь запрашивает динамически предоставленное хранилище, класс хранилища должен быть включен в PersistentVolumeClaim.

Давайте создадим 1 ГБ-ый запрос на хранение:

$ vim glusterfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: gluster-pvc
 annotations:
   volume.beta.kubernetes.io/storage-class: gluster-heketi
spec:
 accessModes:
  - ReadWriteMany
 resources:
   requests:
     storage: 1Gi

Создайте объект:

$ kubectl create --save-config -f glusterfs-pvc.yaml

Подтвердите:

$ kubectl get  pvc
NAME             STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
glusterfs-pvc    Bound     pvc-34b9b5e9-fbde-11e9-943f-00505692ee7e   1Gi        RWX            glusterfs-heketi  1d

После создания вы можете использовать его в своих развертываниях.

Чтобы использовать том, мы ссылаемся на PVC в файле YAML любого Pod / Deployment, например, так:

apiVersion: v1
kind: Pod
metadata:
  name: gluster-pod
  labels:
    name: gluster-pod
spec:
  containers:
  - name: gluster-pod
    image: busybox
    command: ["sleep", "60000"]
    volumeMounts:
    - name: gluster-vol
      mountPath: /usr/share/busybox 
      readOnly: false
  volumes:
  - name: gluster-vol
    persistentVolumeClaim:
      claimName: glusterfs-pvc
Вот и все на сегодня.
У вас должна быть работающая динамическая инициализация томов с Heketi & GlusterFS для вашей платформы Kubernetes.
Посмотрите другие руководства по Kubernetes, доступные в нашем блоге.

You may also like

Leave a Comment