Чӣ тавр сохтани абри гибридӣ бо истифода аз Kubernetes, ки метавонад DBaaS-ро иваз кунад

Номи ман Петр Зайцев, ман директори генералӣ, муассис ҳастам Перкона ва ман мехоҳам ба шумо бигӯям:

  • чӣ гуна мо аз ҳалли сарчашмаҳои кушода ба пойгоҳи додаҳо ҳамчун хидмат омадем;
  • кадом равишҳо барои ҷойгиркунии пойгоҳи додаҳо дар абр вуҷуд доранд;
  • чӣ гуна Kubernetes метавонад DBaaS-ро иваз кунад, вобастагии фурӯшандаро аз байн мебарад ва соддагии DBMS-ро ҳамчун хидмат нигоҳ медорад.

Мақола дар асоси гузориши @Databases Meetup аз ҷониби Mail.ru Cloud Solutions & Tarantool таҳия шудааст. Агар шумо хондан нахоҳед, метавонед тамошо кунед:


Чӣ тавр мо аз манбаи кушода ба пойгоҳи додаҳо ҳамчун хидмат дар абр омадем

Ман аз охири солҳои 90-ум дар манбаи кушода кор мекунам. Бист сол пеш, истифодаи манбаи кушода, ба монанди пойгоҳи додаҳо, он қадар осон набуд. Рамзи сарчашмаро зеркашӣ кардан, онро часпак кардан, тартиб додан ва танҳо пас аз он истифода бурдан лозим буд.

Пас аз он манбаи кушода як қатор соддагардониро аз сар гузаронидааст:

  • Tar.gz ва INSTALL манбаъҳое, ки бояд тартиб дода шаванд;
  • бастаҳо бо вобастагӣ ба монанди .deb ва .rpm, ки дар он шумо танҳо маҷмӯи бастаҳоро насб кардан лозим аст;
  • анбори бастаҳо ба монанди APT ва YUM, ки бо онҳо насбкунӣ худкор аст;
  • ҳалли монанди Docker ва Snap, ки ба шумо имкон медиҳанд, ки бастаҳоро тавассути насб бидуни вобастагии беруна қабул кунед.

Дар натиҷа, истифодаи нармафзори кушодаасос осонтар мешавад ва инчунин монеаи ворид шудан ба таҳияи чунин барномаҳоро коҳиш медиҳад.

Дар айни замон, бар хилофи вазъияти 20 соли пеш, вақте ки ҳама коршиноси васлкунӣ буданд, ҳоло аксари таҳиягарон наметавонанд асбобҳоеро, ки аз манбаъ истифода мебаранд, созанд.

Дар асл, ин бад нест, зеро:

  1. Мо метавонем нармафзори мураккабтар, вале барои истифодабаранда осонтар истифода барем. Масалан, браузер барои истифода қулай аст, аммо он ҷузъҳои зиёди кушодаасосро дар бар мегирад ва аз сифр сохтани он номувофиқ аст.
  2. Шумораи бештари одамон метавонанд таҳиягарони манбаи кушода ва дигар нармафзор шаванд, нармафзори бештар аз ҷониби тиҷорат истифода мешавад ва ниёз ба он бештар аст.

Камбуди он аст, ки қадами навбатии соддагардонӣ бо истифодаи қарорҳои абрӣ алоқаманд аст ва ин боиси бастани муайяни фурӯшанда, яъне ба як таъминкунанда мегардад. Мо ҳалли оддиро истифода мебарем ва провайдерҳо ҷузъҳои кушодаасосро истифода мебаранд, аммо дар асл онҳо ба яке аз абрҳои калон мехкӯб шудаанд. Яъне, осонтарин ва зудтарин роҳи ҷойгиркунии манбаи кушода (ва нармафзори бо он мувофиқ) дар абрҳо бо истифода аз API хусусӣ аст.

Вақте ки сухан дар бораи пойгоҳи додаҳо дар абр меравад, ду равиш вуҷуд дорад:

  1. Инфрасохтори махзани маълумотро ба мисли маркази додаҳои муқаррарӣ ҷамъ кунед. Яъне, блокҳои стандартии биноро гиред: ҳисобкунӣ, нигоҳдорӣ ва ғайра, дар онҳо Linux ва пойгоҳи додаҳоро насб кунед ва онҳоро танзим кунед.
  2. Махзани маълумотро ҳамчун хидмат истифода баред, ки дар он провайдер дар дохили абр пойгоҳи додаи омодаро пешниҳод мекунад.

DBaaS айни замон як бозори босуръат рушдёбанда аст, зеро он ба таҳиягарон имкон медиҳад, ки мустақиман бо пойгоҳи додаҳо кор кунанд ва кори муқаррариро кам кунад. Провайдер ӯҳдадор мешавад, ки Дастрасии баланд ва миқёси осон, часпонидани пойгоҳи додаҳо, нусхабардорӣ ва танзими иҷроишро таъмин кунад.

Ду намуди Пойгоҳи додаҳо ҳамчун хидмат дар асоси манбаи кушода ва алтернатива дар шакли Kubernetes

Ду намуди пойгоҳи додаҳо ҳамчун хидмат барои пойгоҳи додаҳои кушода мавҷуданд:

  1. Маҳсулоти стандартии кушодаасос, ки дар пушти маъмурӣ барои ҷойгиркунӣ ва идоракунии осон баста шудааст.
  2. Як ҳалли пешрафтаи тиҷоратӣ бо иловаҳои гуногун, ки бо манбаи кушода мувофиқ аст.

Ҳарду имконот имкони муҳоҷирати байни абрҳоро коҳиш медиҳанд ва қобилияти интиқоли додаҳо ва барномаҳоро коҳиш медиҳанд. Масалан, сарфи назар аз он, ки намудҳои гуногуни абрҳо аслан як стандарти MySQL-ро дастгирӣ мекунанд, байни онҳо фарқиятҳои назаррас мавҷуданд: дар амалиёт, иҷроиш, нусхабардорӣ ва ғайра. Гузариш аз як абр ба абри дигар метавонад душвор бошад, махсусан барои барномаҳои мураккаб.

Ва дар ин ҷо савол ба миён меояд - оё бароҳатии Пойгоҳи додаҳоро ҳамчун хидмат дастрас кардан мумкин аст, аммо ҳамчун як ҳалли оддии кушодаасос?

Хабари бад ин аст, ки мутаассифона, то ҳол дар бозор чунин ҳалли мушкилот вуҷуд надорад. Хабари хуш ин аст, ки Kubernetes мавҷуд аст, ки ба шумо имкон медиҳад, ки чунин қарорҳоро татбиқ кунед.

Kubernetes як системаи амалиётӣ барои абр ё маркази додаҳо мебошад, ки ба шумо имкон медиҳад барномаро дар серверҳои сершумор дар кластер ҷойгир ва идора кунед, на дар як ҳост.

Ҳоло Kubernetes дар категорияи чунин нармафзор пешсаф аст. Барои ҳалли ин гуна мушкилот бисёр роҳҳои гуногун вуҷуд доштанд, аммо он стандарт гардид. Бисёре аз ширкатҳое, ки қаблан ба ҳалли алтернативӣ тамаркуз мекарданд, ҳоло ба мутобиқ кардани маҳсулоти худ барои дастгирии Kubernetes тамаркуз мекунанд.

Илова бар ин, Kubernetes як ҳалли универсалӣ мебошад, ки дар абрҳои хусусӣ, ҷамъиятӣ ва гибридии бисёр фурӯшандагон дастгирӣ карда мешавад, масалан: AWS, Google Cloud, Microsoft Azure, Mail.ru ҳалли абрӣ.

Чӣ тавр Kubernetes бо пойгоҳи додаҳо кор мекунад

Kubernetes аслан барои барномаҳои бешаҳрвандӣ тарҳрезӣ шуда буд, ки маълумотро коркард мекунанд, аммо ҳеҷ чизро нигоҳ намедоранд, ба монанди хидматрасонии микросервис ё веб. Пойгоҳҳои додаҳо дар охири дигари спектр ҷойгиранд, яъне онҳо барномаҳои давлатӣ мебошанд. Ва Kubernetes аслан барои чунин барномаҳо пешбинӣ нашуда буд.

Аммо, хусусиятҳое ҳастанд, ки ба наздикӣ дар Kubernetes пайдо шуданд, ки ба истифодаи пойгоҳи додаҳо ва дигар замимаҳои давлатӣ имкон медиҳанд:

  1. Консепсияи StatefulSet як силсилаи пурраи ибтидоӣ барои коркарди рӯйдодҳо дар бораи қатъи кори подҳо ва татбиқи Graceful Shutdown (хомӯшкунии пешбинишавандаи барнома) мебошад.
  2. Ҳаҷмҳои доимӣ мағозаҳои маълумот мебошанд, ки бо pods, объектҳои идоракунии Kubernetes алоқаманданд.
  3. Чаҳорчӯбаи Operator - яъне қобилияти сохтани ҷузъҳо барои идоракунии пойгоҳи додаҳо ва дигар замимаҳои давлатӣ, ки дар бисёр гиреҳҳо тақсим карда мешаванд.

Ҳоло дар абрҳои ҷамъиятӣ Пойгоҳи додаҳои калон ҳамчун хидмат мавҷуданд, ки пуштибонии онҳо Kubernetes мебошад, масалан: CockroachCloud, InfluxDB, PlanetScale. Яъне, пойгоҳи додаҳо дар Кубернетес на танҳо чизест, ки аз ҷиҳати назариявӣ имконпазир аст, балки он чизест, ки дар амал кор мекунад.

Percona барои Kubernetes ду ҳалли кушодаасос дорад:

  1. Оператори Kubernetes барои сервери Percona барои MongoDB.
  2. Оператори Kubernetes барои XtraDB CLUSTER хидматест, ки бо MySQL мувофиқ аст ва дастрасӣ ва мувофиқати баландро таъмин мекунад. Шумо инчунин метавонед як гиреҳи ягонаро истифода баред, агар дастрасии баланд лозим набошад, масалан барои пойгоҳи додаҳои таҳиякунанда.

Истифодабарандагони Kubernetes метавонад ба ду гурӯҳ тақсим карда шавад. Баъзе одамон Операторҳои Kubernetes-ро мустақиман истифода мебаранд - инҳо асосан корбарони пешрафта ҳастанд, ки чӣ тавр технологияро хуб медонанд. Дигарон онро дар пушти сар иҷро мекунанд - чунин корбарон ба чизе ба монанди Пойгоҳи додаҳо ҳамчун хидмат таваҷҷӯҳ доранд, онҳо намехоҳанд ба нозукиҳои Kubernetes омӯзанд. Барои гурӯҳи дуюми корбарон, мо як ҳалли дигари кушодаасос дорем - Percona DBaaS CLI Tool. Ин як ҳалли таҷрибавӣ барои онҳое аст, ки мехоҳанд DBaaS-и кушодаро дар асоси Kubernetes бидуни фаҳмиши амиқи технология гиранд.

Чӣ тавр DBaaS-и Percona-ро дар Google Kubernetes Engine идора кардан мумкин аст

Google Kubernetes Engine, ба андешаи ман, яке аз татбиқи функсионалии технологияи Kubernetes мебошад. Он дар бисёре аз минтақаҳои ҷаҳон дастрас аст ва дорои асбоби оддӣ ва қулайи хати фармон (SDK) мебошад, ки ба шумо имкон медиҳад скриптҳо эҷод кунед, на он ки платформаро дастӣ идора кунед.

Барои он ки DBaaS мо кор кунад, ба мо ҷузъҳои зерин лозиманд:

  1. Kubectl.
  2. Google Cloud SDK.
  3. Percona DBaaS CLI.

kubectl насб кунед

Мо бастаро барои системаи оператсионии шумо насб мекунем, мо ба мисоли Ubuntu назар мекунем. Тафсилоти бештар дар ин ҷо.

sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

Насб кардани Google Cloud SDK

Мо бастаи нармафзорро ҳамин тавр насб мекунем. Тафсилоти бештар дар ин ҷо.

# Add the Cloud SDK distribution URI as a package source
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] 
http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

# Import the Google Cloud Platform public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -

# Update the package list and install the Cloud SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk

Насб кардани Percona DBaaS CLI

Аз анборҳои Percona насб кунед. Tool Percona DBaaS CLI то ҳол маҳсулоти таҷрибавӣ аст, бинобар ин он дар анбори таҷрибавӣ ҷойгир аст, ки он бояд алоҳида фаъол карда шавад, ҳатто агар шумо аллакай анбори Percona насб карда бошед.

зиёдтар дар ин ҷо.

Алгоритми насб:

  1. Бо истифода аз абзори перкона репозиторийҳои Percona насб кунед. Аввалан шумо бояд бастаи расмии percona-релизро аз Percona зеркашӣ ва насб кунед:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Ҷузъи анбори абзори озмоиширо ба таври зерин фаъол созед:
    sudo percona-release enable tools experimental
    
  3. Бастаи percona-dbaas-cli насб кунед:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Танзими кори ҷузъҳо

Бештар дар бораи танзимот дар ин ҷо.

Аввал шумо бояд ба ҳисоби Google-и худ ворид шавед. Ғайр аз он, Google Cloud ба як корбар имкон медиҳад, ки бисёр лоиҳаҳои мустақил дошта бошад, бинобар ин шумо бояд лоиҳаи кориро бо истифода аз рамзи ин лоиҳа муайян кунед:

gcloud auth login
gcloud config set project hidden-brace-236921

Баъдан, мо кластер эҷод мекунем. Барои намоиш, ман як кластери Kubernetes-ро аз се гиреҳ сохтам - ин ҳадди ақал барои дастрасии баланд зарур аст:

gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3

Фармони зерини kubectl ба корбари кунунии мо имтиёзҳои дилхоҳ медиҳад:

kubectl create clusterrolebinding cluster-admin-binding-$USER 
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)

Сипас, мо фазои ном эҷод мекунем ва онро фаъол мегардонем. Фазои ном, тахминан гӯем, инчунин ба лоиҳа ё муҳити зист монанд аст, аммо аллакай дар дохили кластери Kubernetes. Он аз лоиҳаҳои Google Cloud мустақил аст:

kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace

Оғози кластер

Вақте ки мо ин чанд қадамро тай кардем, мо метавонем кластери се гиреҳро бо ин фармони оддӣ оғоз кунем:

# percona-dbaas mysql create-db example
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     example
Resource Endpoint: example-proxysql.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              Nt9YZquajW7nfVXTTrP
Status:            ready

Чӣ тавр ба кластер пайваст шудан мумкин аст

Бо нобаёнӣ, он танҳо дар дохили Kubernetes дастрас аст. Яъне, он аз ин сервер, ки шумо фармони "Эҷод"-ро иҷро кардаед, дастрас нест. Барои дастрас кардани он, масалан, барои санҷишҳо бо муштарӣ, шумо бояд портро тавассути Харитасозии Порт интиқол диҳед:

kubectl port-forward svc/example-proxysql 3306:3306 $

Пас мо мизоҷи MySQL-и шуморо пайваст мекунем:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Фармонҳои пешрафтаи идоракунии кластер

Пойгоҳи додаҳо дар IP ҷамъиятӣ

Агар шумо хоҳед, ки ҳалли доимӣ барои дастрасии кластер, шумо метавонед суроғаи IP-и беруна гиред. Дар ин ҳолат, базаи маълумот аз ҳама ҷо дастрас хоҳад буд. Ин камтар бехатар аст, аммо аксар вақт қулайтар аст. Барои IP берунӣ мо фармони зеринро истифода мебарем:

# percona-dbaas mysql create-db exposed 
--options="proxysql.serviceType=LoadBalancer"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     exposed
Resource Endpoint: 104.154.133.197
Port:              3306
User:              root
Pass:              k0QVxTr8EVfgyCLYse
Status:            ready

To access database please run the following command:
mysql -h 104.154.133.197 -P 3306 -uroot -pk0QVxTr8EVfgyCLYse

Паролро ба таври возеҳ муқаррар кунед

Ба ҷои он ки система ба таври тасодуфӣ парол тавлид кунад, шумо метавонед паролро ба таври возеҳ муқаррар кунед:

# percona-dbaas mysql create-db withpw --password=mypassword
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     withpw
Resource Endpoint: withpw-proxysql.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              mypassword
Status:            ready

Ман баромади скриптҳоро дар формати хониши инсон нишон медиҳам, аммо формати JSON низ дастгирӣ мешавад.

Хомӯш кардани дастрасии баланд

Бо фармони зерин шумо метавонед дастрасии баландро барои ҷойгиркунии як гиреҳ хомӯш кунед:

# percona-dbaas mysql create-db singlenode 
--options="proxysql.enabled=false, allowUnsafeConfigurations=true,pxc.size=1"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     singlenode
Resource Endpoint: singlenode-pxc.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              22VqFD96mvRnmPMGg
Status:            ready

Ин як роҳи ҳалли вазифаҳои санҷишӣ барои ба кор даровардани MySQL ҳарчи зудтар ва ба осонӣ ба кор андохтани он, санҷидан ва сипас онро хомӯш кардан ё барои таҳия истифода бурдан аст.

Асбоби Percona DBaaS CLI ба шумо кӯмак мекунад, ки дар Kubernetes ҳалли монанди DBaaS дошта бошед. Ҳамзамон, мо корро дар бораи функсияҳо ва қобили истифода будани он идома медиҳем.

Ин гузориш бори аввал дар @Matabases Meetup аз ҷониби Mail.ru Cloud Solutions&Tarantool. Нигоҳ кунед видео намоишҳои дигар ва ба эълонҳои чорабиниҳо дар Telegram обуна шавед Дар атрофи Kubernetes дар Mail.ru Group.

Дар ин мавзӯъ боз чӣ хондан мумкин аст:

  1. Пойгоҳи додаҳо дар платформаи муосири IIoT.
  2. Чӣ тавр интихоб кардани пойгоҳи додаҳо барои лоиҳа, то шумо дубора интихоб накунед.

Манбаъ: will.com

Илова Эзоҳ