DBaaSని భర్తీ చేయగల Kubernetesని ఉపయోగించి హైబ్రిడ్ క్లౌడ్‌ను ఎలా నిర్మించాలి

నా పేరు పీటర్ జైట్సేవ్, నేను CEO, వ్యవస్థాపకుడిని పెర్కోనా и хочу рассказать:

  • మేము ఓపెన్ సోర్స్ సొల్యూషన్స్ నుండి డేటాబేస్‌కి ఒక సర్వీస్‌గా ఎలా వచ్చాము;
  • какие существуют подходы к развертыванию баз данных в облаке;
  • కుబెర్నెటీస్ DBaaSని ఎలా భర్తీ చేయగలదు, విక్రేత డిపెండెన్సీని తొలగిస్తుంది మరియు DBMS యొక్క సరళతను సేవగా కొనసాగిస్తుంది.

Статья подготовлена на основе доклада на @Databases Meetup by Mail.ru Cloud Solutions & Tarantool. Если не хотите читать, можно посмотреть:


Как от open source пришли к Database as a Service в облаке

నేను 90వ దశకం చివరి నుండి ఓపెన్ సోర్స్‌లో పని చేస్తున్నాను. ఇరవై సంవత్సరాల క్రితం, డేటాబేస్ వంటి ఓపెన్ సోర్స్‌ను ఉపయోగించడం అంత సులభం కాదు. సోర్స్ కోడ్‌ను డౌన్‌లోడ్ చేయడం, ప్యాచ్ చేయడం, కంపైల్ చేయడం మరియు ఆపై మాత్రమే ఉపయోగించడం అవసరం.

Затем open source пережил серию упрощений:

  • Tar.gz మరియు కంపైల్ చేయవలసిన మూలాలను ఇన్‌స్టాల్ చేయండి;
  • пакеты с зависимостями типа .deb и.rpm, где нужно только установить набор пакетов;
  • APT మరియు YUM వంటి ప్యాకేజీ రిపోజిటరీలు, దీనితో ఇన్‌స్టాలేషన్ స్వయంచాలకంగా ఉంటుంది;
  • такие решения как Docker и Snap, позволяющие получать пакеты по инсталляции без внешних зависимостей.

ఫలితంగా, ఓపెన్ సోర్స్ సాఫ్ట్‌వేర్‌ను ఉపయోగించడం సులభతరం అవుతుంది మరియు అటువంటి అప్లికేషన్‌లను అభివృద్ధి చేయడంలో ప్రవేశానికి అడ్డంకిని కూడా తగ్గిస్తుంది.

При этом, в отличие от ситуации 20 лет назад, когда все были экспертами по сборке, сейчас большинство разработчиков не могут собрать из исходников используемые инструменты.

На самом деле, это неплохо, так как:

  1. మేము మరింత సంక్లిష్టమైన కానీ మరింత యూజర్ ఫ్రెండ్లీ సాఫ్ట్‌వేర్‌ను ఉపయోగించవచ్చు. ఉదాహరణకు, బ్రౌజర్ ఉపయోగించడానికి అనుకూలమైనది, కానీ ఇది అనేక ఓపెన్ సోర్స్ భాగాలను కలిగి ఉంటుంది మరియు మొదటి నుండి నిర్మించడానికి అసౌకర్యంగా ఉంటుంది.
  2. ఎక్కువ మంది వ్యక్తులు ఓపెన్ సోర్స్ మరియు ఇతర సాఫ్ట్‌వేర్‌ల డెవలపర్‌లుగా మారవచ్చు, వ్యాపారాలు ఎక్కువ సాఫ్ట్‌వేర్‌లను ఉపయోగిస్తాయి మరియు దాని అవసరం ఎక్కువగా ఉంటుంది.

ప్రతికూలత ఏమిటంటే, సరళీకరణలో తదుపరి దశ క్లౌడ్ సొల్యూషన్‌ల ఉపయోగంతో ముడిపడి ఉంటుంది మరియు ఇది ఒక నిర్దిష్ట విక్రేత లాక్-ఇన్‌కు దారి తీస్తుంది, అంటే ఒక సరఫరాదారుకు కట్టుబడి ఉంటుంది. మేము సాధారణ పరిష్కారాలను ఉపయోగిస్తాము మరియు ప్రొవైడర్లు ఓపెన్ సోర్స్ భాగాలను ఉపయోగిస్తాము, కానీ వాస్తవానికి అవి పెద్ద మేఘాలలో ఒకదానికి వ్రేలాడదీయబడతాయి. అంటే, యాజమాన్య APIని ఉపయోగించి క్లౌడ్‌లలో ఓపెన్ సోర్స్ (మరియు దానికి అనుకూలమైన సాఫ్ట్‌వేర్)ని అమలు చేయడానికి సులభమైన మరియు వేగవంతమైన మార్గం.

క్లౌడ్‌లోని డేటాబేస్‌ల విషయానికి వస్తే, రెండు విధానాలు ఉన్నాయి:

  1. సాధారణ డేటా సెంటర్‌లో వలె డేటాబేస్ మౌలిక సదుపాయాలను సమీకరించండి. అంటే, ప్రామాణిక బిల్డింగ్ బ్లాక్‌లను తీసుకోండి: కంప్యూట్, స్టోరేజ్ మరియు మొదలైనవి, వాటిపై Linux మరియు డేటాబేస్‌ను ఇన్‌స్టాల్ చేసి, వాటిని కాన్ఫిగర్ చేయండి.
  2. డేటాబేస్‌ను సేవగా ఉపయోగించండి, ఇక్కడ ప్రొవైడర్ క్లౌడ్ లోపల సిద్ధంగా ఉన్న డేటాబేస్‌ను అందిస్తుంది.

DBaaS ప్రస్తుతం వేగంగా అభివృద్ధి చెందుతున్న మార్కెట్ ఎందుకంటే ఇది డెవలపర్‌లను డేటాబేస్‌లతో నేరుగా పని చేయడానికి అనుమతిస్తుంది మరియు సాధారణ పనిని తగ్గిస్తుంది. అధిక లభ్యత మరియు సులభమైన స్కేలింగ్, డేటాబేస్ ప్యాచింగ్, బ్యాకప్‌లు మరియు పనితీరు ట్యూనింగ్‌ని నిర్ధారించడానికి ప్రొవైడర్ చర్యలు తీసుకుంటుంది.

ఓపెన్ సోర్స్ ఆధారంగా సర్వీస్‌గా రెండు రకాల డేటాబేస్ మరియు కుబెర్నెట్స్ రూపంలో ప్రత్యామ్నాయం

ఓపెన్ డేటాబేస్‌ల కోసం రెండు రకాల డేటాబేస్ సర్వీస్‌గా ఉన్నాయి:

  1. Стандартный open source-продукт, упакованный в бэкенд для администрирования, что упрощает развертывание и управление.
  2. వివిధ యాడ్-ఆన్‌లతో కూడిన అధునాతన వాణిజ్య పరిష్కారం, ఓపెన్ సోర్స్‌కు అనుకూలంగా ఉంటుంది.

రెండు ఎంపికలు మేఘాల మధ్య వలసల అవకాశాన్ని తగ్గిస్తాయి మరియు డేటా మరియు అప్లికేషన్ల పోర్టబిలిటీని తగ్గిస్తాయి. ఉదాహరణకు, వివిధ రకాలైన మేఘాలు తప్పనిసరిగా ఒకే ప్రామాణిక MySQLకి మద్దతు ఇస్తున్నప్పటికీ, వాటి మధ్య ముఖ్యమైన తేడాలు ఉన్నాయి: ఆపరేషన్, పనితీరు, బ్యాకప్ మరియు మొదలైనవి. ఒక క్లౌడ్ నుండి మరొక క్లౌడ్‌కు మారడం సవాలుగా ఉంటుంది, ముఖ్యంగా సంక్లిష్టమైన అప్లికేషన్‌లకు.

మరియు ఇక్కడ ప్రశ్న తలెత్తుతుంది - డేటాబేస్ యొక్క సౌలభ్యాన్ని సేవగా పొందడం సాధ్యమేనా, కానీ సాధారణ ఓపెన్ సోర్స్ పరిష్కారంగా?

చెడు వార్త ఏమిటంటే, దురదృష్టవశాత్తు, మార్కెట్లో ఇంకా అలాంటి పరిష్కారాలు లేవు. శుభవార్త ఏమిటంటే, అటువంటి పరిష్కారాలను అమలు చేయడానికి మిమ్మల్ని అనుమతించే Kubernetes ఉంది.

Kubernetes అనేది క్లౌడ్ లేదా డేటా సెంటర్ కోసం ఒక ఆపరేటింగ్ సిస్టమ్, ఇది ఒకే హోస్ట్‌లో కాకుండా క్లస్టర్‌లో బహుళ సర్వర్‌లలో అప్లికేషన్‌ను అమలు చేయడానికి మరియు నిర్వహించడానికి మిమ్మల్ని అనుమతిస్తుంది.

ఇప్పుడు కుబెర్నెటెస్ అటువంటి సాఫ్ట్‌వేర్ విభాగంలో నాయకుడు. అటువంటి సమస్యలకు అనేక విభిన్న పరిష్కారాలు ఉన్నాయి, కానీ అది ప్రమాణంగా మారింది. ప్రత్యామ్నాయ పరిష్కారాలపై దృష్టి సారించే చాలా కంపెనీలు ఇప్పుడు కుబెర్నెట్‌లకు మద్దతు ఇచ్చేలా తమ ఉత్పత్తులను స్వీకరించడంపై దృష్టి సారిస్తున్నాయి.

Кроме того, Kubernetes — универсальное решение, которое поддерживается в частных, общедоступных и гибридных облаках многих вендоров, например: AWS, Google Cloud, Microsoft Azure, Mail.ru క్లౌడ్ సొల్యూషన్స్.

Как Kubernetes работает с базами данных

కుబెర్నెటెస్ వాస్తవానికి డేటాను ప్రాసెస్ చేసే స్థితిలేని అప్లికేషన్‌ల కోసం రూపొందించబడింది, అయితే మైక్రోసర్వీస్‌లు లేదా వెబ్ అప్లికేషన్‌లు వంటి దేనినీ నిల్వ చేయదు. డేటాబేస్‌లు స్పెక్ట్రం యొక్క మరొక చివరలో ఉన్నాయి, అంటే అవి స్టేట్‌ఫుల్ అప్లికేషన్‌లు. మరియు కుబెర్నెటెస్ వాస్తవానికి అటువంటి అనువర్తనాల కోసం ఉద్దేశించబడలేదు.

Однако есть фичи, которые появились в Kubernetes в последнее время и позволяют использовать базы данных и другие stateful-приложения:

  1. Концепт StatefulSet — целая серия примитивов для обработки событий об остановке работы подов и осуществления Graceful Shutdown (предсказуемого завершения работы приложения).
  2. పెర్సిస్టెంట్ వాల్యూమ్‌లు పాడ్‌లు, కుబెర్నెట్స్ మేనేజ్‌మెంట్ ఆబ్జెక్ట్‌లతో అనుబంధించబడిన డేటా స్టోర్‌లు.
  3. ఆపరేటర్ ఫ్రేమ్‌వర్క్ - అంటే, అనేక నోడ్‌లలో పంపిణీ చేయబడిన డేటాబేస్‌లు మరియు ఇతర స్టేట్‌ఫుల్ అప్లికేషన్‌లను నిర్వహించడానికి భాగాలను సృష్టించగల సామర్థ్యం.

Уже сейчас в публичных облаках есть крупные Database as a Service, в бэкенде которых Kubernetes, например: CockroachCloud, InfluxDB, PlanetScale. То есть база данных на Kubernetes — это не только то, что теоретически возможно, но и то, что работает на практике.

У Percona есть два open source решения для Kubernetes:

  1. MongoDB కోసం Percona సర్వర్ కోసం Kubernetes ఆపరేటర్.
  2. Kubernetes Operator for XtraDB CLUSTER — сервис, который совместим с MySQL, обеспечивает высокую доступность и консистентность. Также можно использовать single node, если высокая доступность не нужна, например для dev database.

కుబెర్నెట్స్ వినియోగదారులను రెండు గ్రూపులుగా విభజించవచ్చు. కొంతమంది వ్యక్తులు నేరుగా Kubernetes ఆపరేటర్‌లను ఉపయోగిస్తున్నారు - వీరు ప్రధానంగా సాంకేతికత ఎలా పనిచేస్తుందనే దానిపై మంచి అవగాహన ఉన్న అధునాతన వినియోగదారులు. ఇతరులు దీన్ని బ్యాకెండ్‌లో అమలు చేస్తారు - అటువంటి వినియోగదారులు డేటాబేస్ వంటి వాటిపై సేవగా ఆసక్తి కలిగి ఉంటారు, వారు కుబెర్నెట్స్ యొక్క సూక్ష్మ నైపుణ్యాలను పరిశోధించడానికి ఇష్టపడరు. రెండవ సమూహ వినియోగదారుల కోసం, మాకు మరొక ఓపెన్ సోర్స్ సొల్యూషన్ ఉంది - Percona DBaaS CLI టూల్. సాంకేతికతపై లోతైన అవగాహన లేకుండా కుబెర్నెట్స్ ఆధారంగా ఓపెన్ సోర్స్ DBaaSని పొందాలనుకునే వారికి ఇది ప్రయోగాత్మక పరిష్కారం.

Как запустить DBaaS от Percona на Google Kubernetes Engine

Google Kubernetes Engine, на мой взгляд, одна из самых функциональных реализаций технологии Kubernetes. Она доступно во многих регионах мира и обладает простым и удобным Command Line Tool (SDK), позволяющим создавать скрипты, а не управлять платформой вручную.

మా DBaaS పని చేయడానికి, మాకు ఈ క్రింది భాగాలు అవసరం:

  1. Kubectl.
  2. Google క్లౌడ్ SDK.
  3. పెర్కోనా 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. Percona DBaaS CLI Tool — продукт пока экспериментальный, поэтому находится в экспериментальном репозитории, который нужно включить отдельно, даже если у вас уже установлены репозитории Percona.

మరింత చదవండి ఇక్కడ.

ఇన్‌స్టాలేషన్ అల్గోరిథం:

  1. పెర్కోనా-విడుదల సాధనాన్ని ఉపయోగించి పెర్కోనా రిపోజిటరీలను సెటప్ చేయండి. ముందుగా మీరు పెర్కోనా నుండి అధికారిక పెర్కోనా-విడుదల ప్యాకేజీని డౌన్‌లోడ్ చేసి, ఇన్‌స్టాల్ చేయాలి:
    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 క్లౌడ్ అనేక స్వతంత్ర ప్రాజెక్ట్‌లను కలిగి ఉండటానికి ఒక వినియోగదారుని అనుమతిస్తుంది, కాబట్టి మీరు ఈ ప్రాజెక్ట్ కోసం కోడ్‌ని ఉపయోగించి పని చేసే ప్రాజెక్ట్‌ను పేర్కొనాలి:

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

తరువాత, మేము ఒక క్లస్టర్ను సృష్టిస్తాము. డెమో కోసం, నేను కేవలం మూడు నోడ్‌లతో కూడిన కుబెర్నెటెస్ క్లస్టర్‌ని సృష్టించాను - ఇది అధిక లభ్యతకు అవసరమైన కనిష్టం:

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)

Затем мы создаем namespace и делаем его активным. Namespace — это, грубо говоря, тоже как проект или environment, но уже внутри 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. То есть с этого сервера, с которого вы запустили команду «Создать», он не доступен. Чтобы он стал доступен, например для тестов с клиентом, нужно прокинуть порт через Port Mapping:

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.

Выключаем высокую доступность

Следующей командой можно выключить высокую доступность, чтобы развернуть single node:

# 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 సాధనం కుబెర్నెట్స్‌లో DBaaS-వంటి పరిష్కారాన్ని సాధించడంలో మీకు సహాయపడుతుంది. అదే సమయంలో, మేము దాని కార్యాచరణ మరియు వినియోగంపై పనిని కొనసాగిస్తాము.

ఈ నివేదిక మొదట సమర్పించబడింది @డేటాబేస్‌ల సమావేశం Mail.ru క్లౌడ్ సొల్యూషన్స్&Tarantool ద్వారా. చూడు видео ఇతర ప్రదర్శనలు మరియు టెలిగ్రామ్‌లో ఈవెంట్ ప్రకటనలకు సభ్యత్వాన్ని పొందండి Mail.ru గ్రూప్‌లో కుబెర్నెట్స్ చుట్టూ.

అంశంపై ఇంకా ఏమి చదవాలి:

  1. ఆధునిక IIoT ప్లాట్‌ఫారమ్‌లోని డేటాబేస్‌లు.
  2. Как выбрать базу данных для проекта, чтобы не выбирать снова.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి