Pehea e kūkulu ai i kahi ao hybrid e hoʻohana ana i nā Kubernetes i hiki ke pani iā ​​DBaaS

ʻO Petr Zaitsev koʻu inoa, ʻo wau ke CEO, hoʻokumu percona a makemake au e haʻi aku iā ʻoe:

  • pehea mākou i hele mai ai mai ka wehe ʻana i nā kumuwaiwai i ka Database as a Service;
  • he aha nā ala e loaʻa ai i ka waiho ʻana i nā ʻikepili i ke ao;
  • pehea e hiki ai i nā Kubernetes ke pani iā ​​DBaaS, e hoʻopau ana i ka hilinaʻi o ka mea kūʻai aku a mālama i ka maʻalahi o DBMS ma ke ʻano he lawelawe.

Ua hoʻomākaukau ʻia ka ʻatikala ma muli o kahi hōʻike ma @Databases Meetup e Mail.ru Cloud Solutions & Tarantool. Inā ʻaʻole ʻoe makemake e heluhelu, hiki iā ʻoe ke nānā:


Pehea mākou i hele mai ai mai ke kumu wehe i ka Database ma ke ʻano he lawelawe ma ke ao

Ke hana nei au ma ka open source mai ka hopena o 90s. He iwakālua mau makahiki i hala aku nei, ʻaʻole maʻalahi ka hoʻohana ʻana i ke kumu wehe, e like me nā waihona. Pono e hoʻoiho i ke kumu kumu, hoʻopili iā ia, hoʻohui a hoʻohana wale ia.

A laila hele ka Open Source i nā ʻano maʻalahi:

  • ʻO Tar.gz a me INSTALL nā kumu i pono e hōʻuluʻulu ʻia;
  • nā pūʻolo me nā mea hilinaʻi e like me .deb a me .rpm, kahi e pono ai ʻoe e hoʻokomo i kahi pūʻulu o nā pūʻolo;
  • nā waihona waihona e like me APT a me YUM, kahi e hoʻokomo ʻia ai;
  • nā hoʻonā e like me Docker a me Snap, e ʻae iā ʻoe e loaʻa i nā pōʻai ma o ka hoʻokomo ʻana me ka ʻole o nā hilinaʻi waho.

ʻO ka hopena, ua maʻalahi ka hoʻohana ʻana i nā polokalamu open source a hoʻohaʻahaʻa i ka pale i ke komo ʻana i ka hoʻomohala ʻana i ia mau noi.

I ka manawa like, ʻaʻole like me ke kūlana 20 mau makahiki i hala aku nei, i ka wā i lilo ai nā mea a pau he loea hui, ʻaʻole hiki i ka hapa nui o nā mea hoʻomohala ke kūkulu i nā mea hana a lākou e hoʻohana ai mai ke kumu.

ʻOiaʻiʻo, ʻaʻole hewa kēia, no ka mea:

  1. Hiki iā mākou ke hoʻohana i nā polokalamu paʻakikī akā ʻoi aku ka maikaʻi o ka mea hoʻohana. No ka laʻana, maʻalahi ka hoʻohana ʻana i ka polokalamu kele pūnaewele, akā aia nā mea he nui i wehe ʻia a ʻaʻole maʻalahi ke kūkulu ʻana mai ka ʻōpala.
  2. Hiki i nā poʻe he nui ke lilo i mea hoʻomohala o ka open source a me nā polokalamu ʻē aʻe, ʻoi aku ka nui o nā polokalamu i hoʻohana ʻia e nā ʻoihana, a ʻoi aku ka pono o ia mea.

ʻO ka haʻahaʻa, ʻo ka hana hou aʻe i ka hoʻomaʻamaʻa ʻana e pili ana i ka hoʻohana ʻana i nā hāʻina kapuaʻi, a ke alakaʻi nei kēia i kahi mea kūʻai aku laka-i, ʻo ia hoʻi, hoʻopaʻa ʻia i kahi mea hoʻolako. Hoʻohana mākou i nā hoʻonā maʻalahi a hoʻohana nā mea hoʻolako i nā ʻāpana kumu wehe, akā ʻoiaʻiʻo ua nakinaki ʻia lākou i kekahi o nā ao nui. ʻO ia hoʻi, ʻo ke ala maʻalahi a wikiwiki hoʻi e hoʻomoe i ke kumu hāmama (a me ka lako polokalamu kūpono me ia) aia i nā ao, me ka hoʻohana ʻana i kahi API proprietary.

I ka wā e pili ana i nā ʻikepili i ke ao, aia ʻelua ala:

  1. E hōʻuluʻulu i ka ʻikepili waihona, e like me ke kikowaena ʻikepili maʻamau. ʻO ia hoʻi, e lawe i nā poloka hale maʻamau: helu, mālama, a pēlā aku, e hoʻokomo iā Linux a me kahi waihona ma luna o lākou, a hoʻonohonoho iā lākou.
  2. E hoʻohana i ka Pūnaewele ma ke ʻano he lawelawe, kahi e hāʻawi ai ka mea hāʻawi i kahi waihona i hana ʻia i loko o ke ao.

He mākeke ulu wikiwiki ʻo DBaaS i kēia manawa no ka mea hiki i nā mea hoʻomohala ke hana pololei me nā ʻikepili a hōʻemi i ka hana maʻamau. Hoʻoikaika ka mea hoʻolako e hōʻoia i ka Loaʻa kiʻekiʻe a me ka maʻalahi o ka scaling, ka hoʻopaʻa ʻana i ka waihona waihona, nā hoʻihoʻi, a me ka hoʻokō ʻana.

ʻElua ʻano o ka ʻikepili ma ke ʻano he lawelawe e pili ana i ka open source a me kahi ʻano ʻē aʻe ma ke ʻano o Kubernetes

ʻElua ʻano o ka ʻikepili ma ke ʻano he lawelawe no nā ʻikepili wehe:

  1. ʻO kahi huahana open source maʻamau i hoʻopaʻa ʻia i kahi backend hoʻokele no ka maʻalahi o ka waiho ʻana a me ka hoʻokele.
  2. ʻO kahi hopena pāʻoihana holomua me nā mea hoʻohui like ʻole, kūpono me ka open source.

ʻO nā koho ʻelua e hōʻemi i ka hiki ke neʻe i waena o nā ao a hōʻemi i ka portability o ka ʻikepili a me nā noi. No ka laʻana, ʻoiai ʻo nā ʻano ao like ʻole e kākoʻo i ka MySQL maʻamau like, aia nā ʻokoʻa koʻikoʻi ma waena o lākou: i ka hana, hana, hoʻihoʻi, a pēlā aku. He mea paʻakikī ka neʻe ʻana mai kekahi ao a i kekahi, ʻoi aku ka paʻakikī no nā noi paʻakikī.

A eia ka nīnau - hiki ke kiʻi i ka ʻoluʻolu o ka Pūnaewele ma ke ʻano he lawelawe, akā ma ke ʻano he kumu wehe maʻalahi?

ʻO ka lono maikaʻi ʻole, ʻaʻole naʻe, ʻaʻohe ʻano hoʻonā ma ka mākeke. ʻO ka nūhou maikaʻi aia ʻo Kubernetes, kahi e hiki ai iā ʻoe ke hoʻokō i kēlā mau hoʻonā.

He ʻōnaehana hana ʻo Kubernetes no ke ao a i ʻole ke kikowaena ʻikepili e hiki ai iā ʻoe ke hoʻonohonoho a hoʻokele i kahi noi ma waena o nā kikowaena lehulehu i loko o kahi pūʻulu ma mua o kahi hoʻokipa hoʻokahi.

I kēia manawa ʻo Kubernetes ke alakaʻi i ka māhele o ia polokalamu. Nui nā ʻano hoʻonā like ʻole no ia mau pilikia, akā ua lilo ia i mea maʻamau. ʻO nā hui he nui i nānā mua i nā hoʻonā ʻokoʻa ke nānā nei i ka hoʻololi ʻana i kā lākou huahana e kākoʻo iā Kubernetes.

Eia kekahi, ʻo Kubernetes kahi hopena honua i kākoʻo ʻia i nā ao pilikino, lehulehu a me nā hybrid o nā mea kūʻai aku he nui, no ka laʻana: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud Solutions.

Pehea e hana ai ʻo Kubernetes me nā waihona

Ua hoʻolālā mua ʻia ʻo Kubernetes no nā noi mokuʻāina e hoʻoponopono i ka ʻikepili akā ʻaʻole mālama i kekahi mea, e like me ka microservices a i ʻole nā ​​noi pūnaewele. Aia nā ʻikepili ma ka ʻaoʻao ʻē aʻe o ka spectrum, ʻo ia hoʻi, he mau noi mokuʻāina. A ʻaʻole i manaʻo mua ʻia ʻo Kubernetes no ia mau noi.

Eia nō naʻe, aia nā hiʻohiʻona i ʻike ʻia ma Kubernetes i kēia manawa e ʻae i ka hoʻohana ʻana i nā ʻikepili a me nā noi mokuʻāina ʻē aʻe:

  1. ʻO ka manaʻo StatefulSet he pūʻulu holoʻokoʻa o nā primitives no ka hoʻoponopono ʻana i nā hanana e pili ana i ka hoʻōki ʻana i ka hana o nā pods a me ka hoʻokō ʻana i ka Graceful Shutdown (ke pani ʻia o ka noi).
  2. ʻO Persistent Volumes nā hale kūʻai ʻikepili i pili pū me nā pods, nā mea hoʻokele Kubernetes.
  3. Operator Framework - ʻo ia hoʻi, ka hiki ke hana i nā ʻāpana no ka mālama ʻana i nā ʻikepili a me nā noi mokuʻāina ʻē aʻe i puʻunaue ʻia ma nā nodes he nui.

I kēia manawa i loko o nā ao lehulehu aia nā ʻikepili nui ma ke ʻano he lawelawe, ʻo ka hope o ia ʻo Kubernetes, no ka laʻana: CockroachCloud, InfluxDB, PlanetScale. ʻO ia hoʻi, ʻo kahi waihona ma Kubernetes ʻaʻole ia he mea hiki wale nō, akā he mea hana pū kekahi.

Loaʻa iā Percona ʻelua mau kumu hāmama no nā Kubernetes:

  1. Kubernetes Operator no Percona Server no MongoDB.
  2. ʻO Kubernetes Operator no XtraDB CLUSTER kahi lawelawe i kūpono me MySQL a hāʻawi i ka loaʻa kiʻekiʻe a me ke kūpaʻa. Hiki iā ʻoe ke hoʻohana i hoʻokahi node inā ʻaʻole pono ka loaʻa kiʻekiʻe, no ka laʻana no kahi waihona dev.

Hiki ke hoʻokaʻawale ʻia nā mea hoʻohana Kubernetes i ʻelua pūʻulu. Hoʻohana pololei kekahi poʻe i nā Kubernetes Operators - ʻo ia ka poʻe hoʻohana ʻoi loa ka ʻike maikaʻi i ka hana ʻana o ka ʻenehana. Ke holo nei nā poʻe ʻē aʻe ma ke kua hope - makemake nā mea hoʻohana i kahi mea e like me Database as a Service, ʻaʻole lākou makemake e komo i nā nuances o Kubernetes. No ka lua o ka hui o nā mea hoʻohana, loaʻa iā mākou kahi hoʻonā kumu wehe - Percona DBaaS CLI Tool. He hopena hoʻokolohua kēia no ka poʻe makemake e kiʻi i kahi DBaaS open source e pili ana i nā Kubernetes me ka ʻole o ka ʻike hohonu o ka ʻenehana.

Pehea e holo ai ʻo Percona's DBaaS ma Google Kubernetes Engine

ʻO Google Kubernetes Engine, i koʻu manaʻo, ʻo ia kekahi o ka hoʻokō pono loa o ka ʻenehana Kubernetes. Loaʻa ia ma nā wahi he nui o ka honua a loaʻa iā ia kahi mea maʻalahi a maʻalahi Command Line Tool (SDK), hiki iā ʻoe ke hana i nā palapala ma mua o ka hoʻokele lima ʻana i ka paepae.

I mea e hana ai kā mākou DBaaS, pono mākou i kēia mau ʻāpana:

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

E hoʻouka i ka kubectl

Hoʻokomo mākou i ka pūʻolo no kāu ʻōnaehana hana, e nānā mākou i ka laʻana o Ubuntu. Nā kikoʻī hou aku maanei.

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

Ke hoʻouka nei iā Google Cloud SDK

Hoʻokomo mākou i ka pūʻolo polokalamu ma ke ʻano like. Nā kikoʻī hou aku maanei.

# 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

Ke hoʻokomo nei iā Percona DBaaS CLI

E hoʻouka mai nā waihona waihona Percona. He huahana hoʻokolohua ʻo Percona DBaaS CLI Tool, no laila aia ia ma ka waihona hoʻokolohua, pono e hoʻokaʻawale ʻia, ʻoiai inā ua hoʻokomo ʻia nā waihona Percona.

More maanei.

Hoʻokomo algorithm:

  1. Hoʻonohonoho i nā waihona waihona Percona me ka hoʻohana ʻana i ka hāmeʻa hoʻokuʻu percona. Pono mua ʻoe e hoʻoiho a hoʻokomo i ka pākaukau percona-release mai Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. E hoʻā i ka ʻāpana waihona mea hana hoʻokolohua penei:
    sudo percona-release enable tools experimental
    
  3. E hoʻouka i ka pūʻolo percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Hoʻonohonoho i ka hana o nā ʻāpana

Nā mea hou aku e pili ana i nā hoʻonohonoho maanei.

Pono mua ʻoe e komo i kāu moʻokāki Google. Eia kekahi, ʻae ʻo Google Cloud i kahi mea hoʻohana e loaʻa i nā papahana kūʻokoʻa he nui, no laila pono ʻoe e kuhikuhi i kahi papahana hana e hoʻohana ana i ke code no kēia papahana:

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

A laila, hana mākou i kahi hui. No ka demo, ua hana au i kahi hui Kubernetes o ʻekolu nodes wale nō - ʻo ia ka mea liʻiliʻi i koi ʻia no ka loaʻa kiʻekiʻe:

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

Hāʻawi kēia kauoha kubectl i nā pono i makemake ʻia i kā mākou mea hoʻohana i kēia manawa:

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

A laila hana mākou i kahi inoa inoa a hoʻoikaika. ʻO ka namespace, ma ka ʻōlelo ʻana, e like me kahi papahana a i ʻole kaiapuni, akā aia i loko o kahi pūʻulu Kubernetes. He kūʻokoʻa ia mai nā papahana Google Cloud:

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

E hoʻomaka ana i ka hui

Ke hele nei mākou i kēia mau ala liʻiliʻi, hiki iā mākou ke hoʻomaka i kahi hui ʻekolu-node me kēia kauoha maʻalahi:

# 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

Pehea e hoʻohui ai i kahi hui

Ma ka maʻamau, loaʻa wale ia i loko o Kubernetes. ʻO ia, ʻaʻole hiki ke loaʻa mai kēia kikowaena āu i holo ai i ke kauoha "Create". I mea e loaʻa ai, no ka laʻana, no nā hoʻokolohua me kahi mea kūʻai aku, pono ʻoe e hoʻouna i ke awa ma o Port Mapping:

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

A laila hoʻohui mākou i kāu mea kūʻai aku MySQL:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Nā kauoha hoʻokele pūʻulu kiʻekiʻe

ʻIkepili ma IP lehulehu

Inā makemake ʻoe i kahi hopena mau loa no ka loaʻa ʻana o ka cluster, hiki iā ʻoe ke loaʻa i kahi leka uila IP waho. I kēia hihia, hiki ke loaʻa ka waihona mai nā wahi a pau. ʻAʻole palekana kēia, akā ʻoi aku ka maʻalahi. No ka IP waho, hoʻohana mākou i kēia kauoha:

# 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

E hoʻonohonoho pono i ka ʻōlelo huna

Ma kahi o ka ʻōnaehana hana maʻamau i kahi ʻōlelo huna, hiki iā ʻoe ke hoʻonohonoho i ka ʻōlelo huna me ka maopopo:

# 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

Ke hōʻike nei au i ka hoʻopuka o nā palapala ma ke ʻano heluhelu kanaka, akā kākoʻo pū ʻia ke ʻano JSON.

Ke hoʻopau nei i ka loaʻa kiʻekiʻe

Me kēia kauoha hiki iā ʻoe ke hoʻopau i ka loaʻa kiʻekiʻe e kau i kahi node hoʻokahi:

# 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

He hopena kēia no ka hoʻāʻo ʻana i nā hana e hoʻomaka i ka MySQL a me ka maʻalahi e like me ka hiki, e hoʻāʻo iā ia, a laila pani ʻia a hoʻohana paha ia no ka hoʻomohala ʻana.

Kōkua ʻo Percona DBaaS CLI iā ʻoe e hoʻokō i kahi hopena e like me DBaaS ma Kubernetes. I ka manawa like, hoʻomau mākou e hana i kāna hana a me ka hoʻohana.

Ua hoike mua ia keia hoike ma @Hawaii waihona na Mail.ru Cloud Solutions&Tarantool. Nānā wikiō nā hana ʻē aʻe a kau inoa i nā hoʻolaha hanana ma Telegram A puni nā Kubernetes ma Mail.ru Group.

He aha hou aʻe e heluhelu ai ma ke kumuhana:

  1. Nā ʻikepili i kahi kahua IIoT hou.
  2. Pehea e koho ai i kahi waihona no kahi papahana no laila ʻaʻole pono ʻoe e koho hou.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka