Запросить демо
Я подтверждаю свое согласие на обработку компанией КРОК моих персональных данных, указанных в форме, в целях и пределах, установленных законодательством РФ о персональных данных в рамках проводимых мероприятий в течение неопределенного срока
Дополнительные услуги
Оставить заявку
Я подтверждаю свое согласие на обработку компанией КРОК моих персональных данных, указанных в форме, в целях и пределах, установленных законодательством РФ о персональных данных в рамках проводимых мероприятий в течение неопределенного срока
Узнать стоимость
Я подтверждаю свое согласие на обработку компанией КРОК моих персональных данных, указанных в форме, в целях и пределах, установленных законодательством РФ о персональных данных в рамках проводимых мероприятий в течение неопределенного срока
Дополнительные услуги
Попробовать бесплатно
Я подтверждаю свое согласие на обработку компанией КРОК моих персональных данных, указанных в форме, в целях и пределах, установленных законодательством РФ о персональных данных в рамках проводимых мероприятий в течение неопределенного срока
Дополнительные услуги
Быть в теме

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

05.07.2018 13 минут 1221

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, содержащий в себе два и более вычислительных узла. Каждый вычислительный сервер должен иметь отдельный диск, который будет полностью отдан в распоряжение 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 вашими приложениями.

Сервисы упоминаемые в статье

  1. Публичное облако КРОК

Не пропустите самые важные, интересные и полезные статьи недели

Ваш e-mail успешно подписан.

Смотрите также