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

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

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

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, вы можете установить его самостоятельно в Облаке КРОК, 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
Контейнеры: технологии и процессы глазами разработчика

В выпуске#9 видеоподкаста «Откровенно об ИТ-инфраструктуре» поговорили о роли контейнеров в разработке. Приглашенные эксперты обсудили специфику использования Kubernetes и сокращение time-to-market в контексте контейнеризации.

В гостях Михаил Гудов, Orion soft, и Василий Колосов, Smartex.
1 минута
778
19 июня 2023
Семь трендов на рынке облачных услуг в 2023 году
До 2022 года на рынке облаков в России главенствовали мировые тренды, но сейчас наша страна пошла своим путем. О том, для чего сейчас компании используют облачные технологии и как меняется рынок, рассказал директор по развитию КРОК Облачные сервисы Сергей Зинкевич.
1 минута
2180
16 июня 2023
Рулевой в океане контейнеров
Выпуск#3 видеоподкаста «Откровенно об ИТ-инфраструктуре» посвящен Kubernetes и профессиональным платформам оркестрации контейнеров. Обсудили, как сегодня складывается ситуация на российском рынке контейнерных платформ, что востребовано и почему, особенности и перспективы работы с Kubernetes.

В гостях Александр Баталов, Генеральный директор Флант
1 минута
1503
29 марта 2023
Сетевые балансировщики нагрузки и другие обновления Облака КРОК

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

2 минуты
914
13 февраля 2023
Замена игрока: выбираем альтернативу зарубежному системному ПО (взгляд облачного провайдера)

На поле ИТ сегодня захватывающая интрига – выбор адекватной замены зарубежным системам, производители которых массово вышли из игры. На онлайн-митапе поделились опытом подбора, внедрения и сопровождения решений, способных заместить платформу виртуализации, почту, файловое хранилище, каталог пользователей, backup и др.

Предлагаем вашему вниманию запись и расшифровку митапа.

2 минуты
2169
scrollup