Vertica на Kubernetes

" alt="">

Vertica випустила оператор VerticaDB у серпні 2021 року, що поклало початок інтеграції Vertica з Kubernetes. Оператор автоматизує велику кількість завдань адміністратора Vertica, як-от перезапуск Vertica, якщо будь-який із вузлів виходить з ладу, то здійснює оновлення, зберігаючи базу даних онлайн та інтеграцію з горизонтальним модулем autoscaler Kubernetes.

Налаштування Kubernetes

Як правило, коли ви вперше думаєте про Kubernetes, то вважаєте, що він працює всередині великого багатовузлового кластера. Однак версія для тестування Kubernetes достатньо мала, щоб ви могли запустити його на своєму комп’ютері.

Є кілька способів запустити Kubernetes локально, напр використовуючи kind , що означає «Kubernetes IN Docker».

Як передумова до kind, вам потрібно буде встановити docker.

Далі вам потрібно завантажити такий двійковий файл. Якщо ви використовуєте Linux, ви можете скопіювати та вставити наведену нижче команду, щоб завантажити її. Для інших операційних систем слід дотримуватися інструкцій на сторінці швидкого запуску . Зауважте, що Vertica працює лише на мікросхемах Intel, тому цей варіант не працюватиме, якщо ви використовуєте macOS на базі arm.

 

$ curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.14.0/kind-linux-amd64
$ chmod +x ./kind
$ sudo mv ./kind /usr/local/bin

 

Іншим інструментом, який вам потрібно завантажити, є kubectl, CLI, який ви використовуєте для спілкування з кластером Kubernetes. Потрібно скопіювати наведені нижче команди, якщо ви встановлюєте з Linux. Інструкції зі встановлення для інших операційних систем дивіться на сторінці завантаження kubectl.

 

$ curl -LO "https://dl.k8s.io/release/$(curl -L -s
https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

 

За допомогою завантажених інструментів ви можете створити кластер Kubernetes. Спочатку створіть конфігураційний файл. Ви можете скопіювати/вставити наведену нижче команду у свою оболонку або створити файл конфігурації за допомогою улюбленого редактора:

 

$ cat << EOF > kind.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
  extraPortMappings:
  - containerPort: 32001
    hostPort: 32001
- role: worker
EOF

 

Створивши файл конфігурації, ви можете створити кластер:

 

$ kind create cluster --config kind.yaml
Creating cluster "kind" …
✓ Ensuring node image (kindest/node:v1.24.0) 🖼
✓ Preparing nodes 📦 📦 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
✓ Joining worker nodes 🚜 

 

Оператор розгортання

Існує два офіційних способи установки оператора. Цей приклад показує встановлення оператора за допомогою менеджера життєвого циклу оператора (OLM) . Існує також діаграма Helm, яка розгортає оператора. Додаткову інформацію див. в офіційній документації .

Виконайте цю команду, щоб налаштувати OLM у вашому екземплярі Kubernetes:

 

$ curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.21.2/install.sh | bash -s v0.21.2

 

Тепер ви готові до розгортання оператора. Ви можете почати це за допомогою цієї команди:

 

$ kubectl create -f https://operatorhub.io/install/verticadb-operator.yaml

 

Це встановлює оператор у просторі імен Kubernetes my-verticadb-operator .

Ця команда повертається швидко, але оператор усе ще встановлює її у фоновому режимі. Виконайте цю команду, щоб переглянути хід встановлення:

 

$ kubectl get csv --namespace my-verticadb-operator --watch

 

Ця команда не повертається, оскільки вона спостерігає за станом встановлення. Замість цього він друкує рядок кожного разу, коли змінюється статус встановлення. Результат виглядає так:

 

NAME                        DISPLAY              VERSION   REPLACES                    PHASE
verticadb-operator.v1.4.0   VerticaDB Operator   1.4.0     verticadb-operator.v1.3.1
verticadb-operator.v1.4.0   VerticaDB Operator   1.4.0     verticadb-operator.v1.3.1   Pending
verticadb-operator.v1.4.0   VerticaDB Operator   1.4.0     verticadb-operator.v1.3.1   InstallReady
verticadb-operator.v1.4.0   VerticaDB Operator   1.4.0     verticadb-operator.v1.3.1   Installing
verticadb-operator.v1.4.0   VerticaDB Operator   1.4.0     verticadb-operator.v1.3.1   Succeeded

 

Встановлення завершено, коли в стовпці PHASE відображається Succeeded (Успішно), і ви можете натиснути CTRL+C, щоб повернутися до командного рядка.

Комунальне сховище

Vertica на Kubernetes розгортає лише бази даних Eon Mode. Перш ніж запустити базу даних, вам спочатку потрібно налаштувати спільне сховище. Спільне сховище не обов’язково має бути в Kubernetes, але воно має бути доступним із Kubernetes. Оператор має паритет функцій із сервером Vertica — ви можете використовувати будь-якого з основних підтримуваних хмарних постачальників для спільного зберігання (AWS, Azure та GCP), на додаток до HDFS або будь-якої S3-сумісної кінцевої точки, як-от minIO.

У цьому випадку здіснено налаштування minIO, оскільки це легко та безкоштовно. MinIO має власного оператора , і він встановлюється приблизно так само, як і оператор VerticaDB. Спочатку почніть встановлення оператора minIO за допомогою цієї команди:

 

$ kubectl create -f https://operatorhub.io/install/minio-operator.yaml 

 

Це повертається швидко, але встановлення відбувається у фоновому режимі. Виконайте цю команду, щоб переглянути хід встановлення:

 

$ kubectl get csv --namespace operators --watch

 

Як і встановлення оператора Vertica, ця команда не повертається, оскільки ми використовуємо параметр –watch. Встановлення завершено, коли в стовпці PHASE відображається Succeeded (Успішно), і ви можете натиснути CTRL+C, щоб повернутися до командного рядка. Після завершення останній рядок має виглядати так:

 

NAME                     DISPLAY          VERSION   REPLACES   PHASE
...
minio-operator.v4.4.20   Minio Operator   4.4.20               Succeeded

 

Встановивши оператор minIO, ми можемо створити кінцеву точку, сумісну з S3. Ми робимо це, створюючи екземпляр власного ресурсу Tenant (CR). Це CR, який використовує оператор minIO. Щоб створити клієнта, виконайте таку команду:

 

$ kubectl apply --namespace my-verticadb-operator -f
 https://raw.githubusercontent.com/vertica/vertica-kubernetes/main/config/samples/minio.yaml

 

Після виконання цієї команди все відбувається у фоновому режимі для завершення налаштування. Ви можете скористатися такою командою, щоб дочекатися завершення:

 

$ kubectl wait --for=condition=Complete=True --namespace my-verticadb-operator job/create-s3-bucket --timeout=5m
job.batch/create-s3-bucket condition met

 

VerticaDB

На даний момент створено кластер Kubernetes, розгорнуто оператор VerticaDB і налаштоване загальне сховище. Тепер ми готові створити базу даних Vertica.

Щоб створити базу даних Vertica, ми повинні створити екземпляр VerticaDB CR. Коли це відбувається, оператор реагує на це і створює необхідні об’єкти та завантажує базу даних, створюючи нову.

Було використано такий зразок CR:

 

apiVersion: vertica.com/v1beta1
kind: VerticaDB
metadata:
  name: verticadb-sample
spec:
  communal:
    path: "s3://nimbusdb/db"
    endpoint: http://minio
    credentialSecret: s3-auth
  subclusters:
    - name: defaultsubcluster

 

Параметрів для CR набагато більше — це необхідний мінімум. Щоб отримати повний список , зверніться до документації VerticaЦей CR створює нову базу даних за допомогою спільного сховища minIO в s3://nimbusdb/db . База даних має єдиний підкластер під назвою defaultsubcluster розміром 3. Для цього використовується спільна ліцензія, тому ви обмежені щонайбільше 3 модулями Vertica.

Щоб розпочати створення бази даних, ви можете застосувати CR за допомогою такої команди:

 

$ kubectl apply --namespace my-verticadb-operator -f https://raw.githubusercontent.com/vertica/vertica-kubernetes/main/config/samples/v1beta1_verticadb.yaml
verticadb.vertica.com/verticadb-sample created

 

Наведена вище команда повертається негайно, але завантаження зображення Vertica та створення бази даних займе кілька хвилин. Ви можете дочекатися завершення цього за допомогою такої команди:

 

$ kubectl wait --for=condition=DBInitialized=True --namespace my-verticadb-operator vdb/verticadb-sample --timeout=10m
verticadb.vertica.com/verticadb-sample condition met

 

Ця команда не показує жодних результатів, доки все не буде налаштовано. Є кілька речей, які слід перевірити, щоб стежити за прогресом. Якщо він зайнятий завантаженням контейнерів Vertica, ви можете переглянути його прогрес, виконавши цю команду:

 

$ kubectl get pods --namespace my-verticadb-operator --selector app.kubernetes.io/instance=verticadb-sample
NAME                                   READY   STATUS              RESTARTS   AGE
verticadb-sample-defaultsubcluster-0   0/1     ContainerCreating   0          97s
verticadb-sample-defaultsubcluster-1   0/1     ContainerCreating   0          97s
verticadb-sample-defaultsubcluster-2   0/1     ContainerCreating   0          97s

 

Якщо він створює базу даних, оператор реєструє події під час виклику різних команд під капотом. Ви можете переглядати події, щоб краще зрозуміти, що робить оператор. Щоб переглянути події, виконайте команду describe для свого CR:

 

$ kubectl describe --namespace my-verticadb-operator vdb/verticadb-sample
…
Events:
Type    Reason             Age    From                Message
----    ------             ----   ----                -------
Normal  CreateDBStart      2m59s  verticadb-operator  Calling 'admintools -t create_db'
Normal  CreateDBSucceeded  113s   verticadb-operator  Successfully created database with subcluster 'defaultsubcluster'. It took 1m6.188642254s

 

Ви також можете переглянути рядок швидкого стану про VerticaDB, виконавши таку команду:


$ kubectl --namespace my-verticadb-operator get vdb
NAME               AGE     SUBCLUSTERS   INSTALLED   DBADDED   UP
verticadb-sample   9m51s   1             3           3         3

 

Клієнтський доступ

Тепер у вас є база даних — як ви можете отримати до неї доступ? Для спеціальних запитів ви можете запустити vsql безпосередньо з одного з модулів:

 

$ kubectl exec -it --namespace my-verticadb-operator verticadb-sample-defaultsubcluster-0 -- vsql

 

Однак це незручно для програми: вам потрібно знати назву модуля, і він має бути в стані UP. Найкращий спосіб підключитися до Vertica – через сервісні об’єкти . За замовчуванням створюється один службовий об’єкт для кожного підкластера. Ви можете побачити службові об’єкти за допомогою цієї команди:

 

$ kubectl --namespace my-verticadb-operator get service --selector vertica.com/svc-type=external
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
verticadb-sample-defaultsubcluster   ClusterIP   10.96.110.181           5433/TCP,5444/TCP   24m

 

Зверніть увагу, що ім’я службового об’єкта містить і ім’я VerticaDB, і ім’я підкластеру для легшого виявлення. Мережева модель для Kubernetes — це пласка структура, що означає, що будь-який модуль може отримати доступ до будь-якого іншого модуля. Ім’я службових об’єктів зберігається на DNS-серверах, тому до нього можна отримати доступ за допомогою повного доменного імені. Сервісні об’єкти також балансують навантаження між наборами модулів і вибирають лише модулі, які перебувають у стані «Ready» . Для модулів, які працюють під керуванням Vertica, це означає, що сервер працює та його можна підключити. Однак за замовчуванням об’єкти служби доступні лише з Kubernetes на внутрішній IP-адресі кластера, відомої як ClusterIP.

Якщо ви хочете отримати доступ до служби поза межами Kubernetes, є кілька варіантів, які залежать від того, де розгорнуто Kubernetes. Усі основні постачальники хмарних технологій надають тип LoadBalancer , який надає доступ до служби назовні через балансувальник навантаження постачальника хмарних технологій. Це недоступно з коробки під час запуску kind , як у наведеному прикладі. Єдиним вибором у цьомк випадку є використання NodePort , який відкриває службу через порт на всіх вузлах Kubernetes. При створенні такого кластеру для цієї мети було додано відображення портів.

Щоб використовувати NodePort і отримати доступ до Vertica зі свого хост-комп’ютера, потрібно запустити цей патч:


$ kubectl patch vdb --namespace my-verticadb-operator verticadb-sample --type=merge --patch '{"spec": {"subclusters": [{"name": "defaultsubcluster", "serviceType": "NodePort", "nodePort": 32001}]}}'
verticadb.vertica.com/verticadb-sample patched

 

Це змушує оператора змінити тип об’єкта служби. Тепер зі свого хост-комп’ютера ви можете отримати доступ до Vertica, якщо підключитесь до локального хосту за допомогою порту 32001:

 

$ vsql -U dbadmin -h localhost -p 32001

 

Очистка

Цього достатньо, щоб почати використовувати Vertica в Kubernetes. Використовуваний CR – мінімальний, і є набагато більше параметрів, доступних для налаштування вашої бази даних.

Коли ви завершите роботу з системою, ви можете ввести таку команду, щоб видалити кластер Kubernetes:


$ kind delete cluster
Deleting cluster "kind" ...

 

Для отримання додаткової інформації відвідайте сторінку GitHub , перегляньте офіційну документацію або зверніться до наших спеціалістів ⤵

 

За матеріалами Vertica

Поширити

Більше корисних новин

[mailpoet_form id="2"]