Kubernetes -  постоянные диски на GlusterFS и heketi
О технологиях

Kubernetes - постоянные диски на GlusterFS и heketi

936
15 минут

Heketi – это открытый проект, предназначенный для предоставления сторонним приложениям RESTful интерфейса управления жизненным циклом дисков в GlusterFS.

Kubernetes-Volumes-on-GlusterFS-and-Heketi.png

В прошлой статье “Kubernetes: использование совместно с GlusterFS” мы рассмотрели ручной процесс создания кластера GlusterFS с последующим подключением его к вашему кластеру Kubernetes в виде отдельного StorageClass-а для предоставления вашим приложениям возможности использовать постоянные диски (PersistentVolume). В этой статье речь пойдет о той же, но более автоматизированной и простой инсталляции и интеграции GlusterFS с кластером Kubernetes с использованием heketi.


Heketi – это открытый проект, предназначенный для предоставления сторонним приложениям RESTful интерфейса управления жизненным циклом дисков в GlusterFS. Этот проект используется OpenStack, Kubernetes и OpenShift для гибкого предоставления дисковых ресурсов GlusterFS с любым поддерживаемым GlusterFS режимом надежности. Heketi автоматически определяет расположение бриков по кластеру GlusterFS таким образом, чтобы обеспечить расположение бриков и их реплик в разных доменах отказоустойчивости (failure domains). Heketi также поддерживает любое количество кластеров GlusterFS, позволяя облачным сервисам использовать дисковые ресурсы без привязки к единственному типу стораджа. Архитектурная схема решения будет точно такой же, как и в прошлой статье.


Если у вас еще нет собственного кластера Kubernetes, вы можете установить его самостоятельно в K2 Cloud, AWS, Google Cloud или же любой системе виртуализации. В качестве примера инсталляции можно использовать статью “Kubeadm: создание Kubernetes кластера за 10 минут“.

Внедряем и поддерживаем Kubernetes/DevOps
Развертываем и сопровождаем инфраструктуру для бизнес-приложений на базе микросервисов и контейнеров

Предварительные требования

Предполагается, что у вас есть установленный кластер Kubernetes, содержащий в себе два и более вычислительных узла. Каждый вычислительный сервер должен иметь отдельный диск, который будет полностью отдан в распоряжение heketi. В моем примере инсталляция будет проходить на примере кластера, состоящего из одного мастер и трех вычислительных узлов с подключенным пустым диском vdb.

На все вычислительные узлы необходимо предварительно поставить пакетglusterfs-client. Для этого на каждом из вычислительных серверов выполните следующие команды:

yum -y install centos-release-gluster

yum -y install glusterfs-client

Это нужно для обеспечения возможности работы пода (Podheketi-storage-copy-job.

Установка heketi в кластере Kubernetes

Как описано в официальной документации по интеграции heketi с Kubernetes, для упрощения установки heketi можно использовать проект gluster-kubernetes, что мы и сделаем. Далее все команды будут выполняться на мастере вашего Kubernetes кластера.

Для начала на мастер-сервере необходимо установить heketi-client:


mkdir heketi

cd heketi

wget https://github.com/heketi/heketi/releases/download/v4.0.0/heketi-client-v4.0.0.linux.amd64.tar.gz

tar zxvf heketi-client-v4.0.0.linux.amd64.tar.gz

cp heketi-client/bin/heketi-cli /usr/local/bin/


Далее необходимо скачать исходники gluster-kubernetes и описать топологию вашего кластера GlusterFS в файле topology.json:

git clone https://github.com/gluster/gluster-kubernetes.git

cd gluster-kubernetes/deploy

touch topology.json


Содержимое файла topology.json для моего кластера будет следующим:

{

"clusters": [

    {

      "nodes": [

        {

          "node": {

            "hostnames": {

              "manage": [

                "node-1.comp.avmaksimov.ru"

              ],

              "storage": [

                "192.168.0.5"

              ]

            },

            "zone": 1

          },

          "devices": [

            "/dev/vdb"

          ]

        },

        {

          "node": {

            "hostnames": {

              "manage": [

                "node-2.comp.avmaksimov.ru"

              ],

              "storage": [

                "192.168.0.6"

              ]

            },

            "zone": 1

          },

          "devices": [

            "/dev/vdb"

          ]

        },

        {

          "node": {

            "hostnames": {

              "manage": [

                "node-3.comp.avmaksimov.ru"

              ],

              "storage": [

                "192.168.0.7"

              ]

            },

            "zone": 1

          },

          "devices": [

            "/dev/vdb"

          ]

        }

      ]

    }

]

}


Содержимое файла интуитивно понятно. Единственное, что необходимо отметить – это то, что структура clusters.nodes.node.hostnames.manage должна содержать правильное имя вычислительного узла вашего кластера Kubernetes, а структура clusters.nodes.node.hostnames.storage его правильный IP-адрес. Узнать имена ваших узлов можно командой:

kuberctl get nodes

NAME                          STATUS         AGE

master-1.comp.avmaksimov.ru   Ready,master   13d

node-1.comp.avmaksimov.ru     Ready          13d

node-2.comp.avmaksimov.ru     Ready          13d

node-3.comp.avmaksimov.ru     Ready          13d


Выполняем установку heketi следующей командой:

./gk-deploy -g


После того, как heketi будет установлен, можно переходить к настройке клиента heketi-cli.

export HEKETI_CLI_SERVER=$(kubectl get svc/heketi --template 'http://{{.spec.clusterIP}}:{{(index .spec.ports 0).port}}')

curl $HEKETI_CLI_SERVER/hello

Hello from Heketi


Как только клиент heketi получил возможность взаимодействовать с кластером, перечитайте конфигурацию кластера и запустите команду интеграции heketi с Kubernetes:

heketi-cli topology load --json=topology.json

heketi-cli setup-openshift-heketi-storage

kubectl create -f heketi-storage.json


На этом этапе все. Если все выполненные вами команды завершились без ошибок, значит вы правильно выполнили установку heketi. По сути, внутри вашего кластера запущено несколько сущностей heketi (сервисы, поды, наборы демонов и т.д., обеспечивающие работу heketi), а также по одному поду c GlusterFS управляемым heketi на каждом вычислительном узле.


Если вы столкнулись с какими либо ошибками в процессе установки heketi поверх Kubernetes, рекомендую посмотреть статью “Two days of pain or how I deployed GlusterFS cluster to Kubernetes“, где разобрано большое количество всевозможных ошибок, часто возникающих в процессе установки.

Интеграция heketi и kubernetes

По сути все, что требуется для интеграции – это создание отдельного StorageClass-а внутри Kubernetes, который смогу использовать ваши приложения. Для этого создайте файл storage-class.yml, следующего содержания:


apiVersion: storage.k8s.io/v1beta1

kind: StorageClass

metadata:

name: slow

provisioner: kubernetes.io/glusterfs

parameters:

resturl: "http://10.99.25.47:8080"


Внимание: resturl содержит URL сервиса heketi. Его необходимо заменить на ваш. Он определен в переменной $HEKETI_CLI_SERVER


Примените конфигурацию StorageClass-а в вашем клатере:

kubectl create -f storage-class.yml

Запрос постоянного тома в кластере kubernetes

Для создания запроса на получение постоянного тома в кластере Kubernetes необходимо создать файл test-pvc.yml следующего содержания:


kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: myclaim

annotations:

    volume.beta.kubernetes.io/storage-class: "slow"

spec:

accessModes:

    - ReadWriteOnce

resources:

    requests:

      storage: 10Gi


Выполните запрос на создание тома командой:

kubectl create -f test-pvc.yml


Через некоторое время можно удостовериться, что тестовый постоянный том создан.

kubectl get pvc

NAME      STATUS    VOLUME                                     CAPACITY   ACCESSMODES   AGE

myclaim   Bound     pvc-8a5fa318-fdd8-11e6-8743-d00d3c1e2c41   10Gi       RWO           20h


Заключение

В предыдущих статьях я описал установку кластера Kubernetes, а также подключение к нему кластерного стораджа на базе GlusterFS. В следующих статьях я расскажу про использование постоянных дисков Kubernetes вашими приложениями.

19 июня 2023
Семь трендов на рынке облачных услуг в 2023 году
До 2022 года на рынке облаков в России главенствовали мировые тренды, но сейчас наша страна пошла своим путем. О том, для чего сейчас компании используют облачные технологии и как меняется рынок, рассказал директор бизнес-юнита K2 Cloud Сергей Зинкевич.
1 минута
1021
29 марта 2023
Сетевые балансировщики нагрузки и другие обновления К2 Облака

Мы рады вам представить новый сервис K2 Облака для распределения трафика между экземплярами – Балансировщики нагрузки. Кроме того, мы автоматизировали обновление сертификатов Kubernetes и добавили возможность удаления рабочих узлов из кластера Kubernetes.

2 минуты
320
12 января 2023
Российский Kubernetes, какой он? Знакомьтесь, платформа Deckhouse

Если бизнес работает в цифре, строит свои решения на базе микросервисной архитектуры и контейнеров и до последнего времени использовал для этого западную платформу контейнеризации, то актуальная задача сегодня — найти ей адекватную замену.

2 минуты
1568
26 декабря 2022
Что выгоднее — использовать готовую платформу для управления контейнерами или разрабатывать своими силами?
Совсем недавно мы провели опрос среди ИТ-руководителей, чтобы выяснить, насколько они знакомы с технологией Kubernetes и используют ли ее в ИТ-инфраструктуре своей компании, личных проектах и т.д. Результаты показали, что 63% опрошенных уже работает с Kubernetes прямо сейчас, 23% пока не дошли и 14% участников планируют в ближайшее время.
1 минута
551
4 декабря 2020
Дайджест обновлений К2 Облака осень 2020 г.
За осень в К2 Облаке многое изменилось. Мы активно писали код и не успевали сообщать обо всех переменах. Постараемся исправиться и информировать вас ASAP, чтобы вы могли сразу же использовать новые фичи.
1 минута
298
scrollup