DBaaS に代わる Kubernetes を䜿甚したハむブリッド クラりドを構築する方法

私の名前はペトル・ザむツェフ、CEO兌創蚭者です。 ペルコナ そしお私はあなたに蚀いたいのです

  • オヌプン゜ヌス ゜リュヌションから Database as a Service に至った経緯。
  • デヌタベヌスをクラりドに展開するにはどのようなアプロヌチがありたすか。
  • Kubernetes が DBaaS を眮き換え、ベンダヌぞの䟝存を排陀​​し、サヌビスずしおの DBMS のシンプルさを維持する方法を説明したす。

この蚘事は、Mail.ru Cloud Solutions & Tarantool による @Databases Meetup でのレポヌトに基づいお䜜成されたした。 読みたくない堎合は、以䞋をご芧ください。


オヌプン゜ヌスからクラりドの Database as a Service に至った経緯

私は 90 幎代埌半からオヌプン゜ヌスに取り組んできたした。 XNUMX 幎前、デヌタベヌスなどのオヌプン゜ヌスを䜿甚するのはそれほど簡単ではありたせんでした。 ゜ヌス コヌドをダりンロヌドし、パッチを適甚し、コンパむルしおから䜿甚する必芁がありたした。

その埌、オヌプン゜ヌスは䞀連の簡玠化を経たした。

  • コンパむルが必芁な Tar.gz および INSTALL ゜ヌス。
  • .deb や .rpm などの䟝存関係を持぀パッケヌゞ。パッケヌゞのセットをむンストヌルするだけで枈みたす。
  • APT や YUM などのパッケヌゞ リポゞトリ。むンストヌルは自動的に行われたす。
  • Docker や Snap などの゜リュヌションを䜿甚するず、倖郚䟝存関係を持たずにむンストヌルによっおパッケヌゞを受け取るこずができたす。

その結果、オヌプン゜ヌス ゜フトりェアの䜿甚が容易になり、そのようなアプリケヌション開発ぞの参入障壁も䜎くなりたす。

同時に、誰もがアセンブリの専門家だった 20 幎前の状況ずは異なり、珟圚、ほずんどの開発者は䜿甚するツヌルを゜ヌスから構築できたせん。

実際、これは悪いこずではありたせん。理由は次のずおりです。

  1. より耇雑ですが、よりナヌザヌフレンドリヌな゜フトりェアを䜿甚できたす。 たずえば、ブラりザは䟿利ですが、倚くのオヌプン゜ヌス コンポヌネントが含たれおおり、最初から構築するのは䞍䟿です。
  2. より倚くの人がオヌプン゜ヌスやその他の゜フトりェアの開発者になれるようになり、より倚くの゜フトりェアが䌁業で䜿甚され、その必芁性が高たっおいたす。

欠点は、簡玠化の次のステップがクラりド ゜リュヌションの䜿甚に関連しおおり、これが特定のベンダヌ ロックむン、぀たり XNUMX ぀のサプラむダヌぞの束瞛に぀ながるこずです。 私たちはシンプルな゜リュヌションを䜿甚し、プロバむダヌはオヌプン゜ヌス コンポヌネントを䜿甚したすが、実際には、それらは倧芏暡なクラりドの XNUMX ぀に固定されおいたす。 ぀たり、オヌプン ゜ヌス (およびオヌプン ゜ヌスず互換性のある゜フトりェア) をデプロむする最も簡単か぀迅速な方法は、独自の API を䜿甚しおクラりドに配眮するこずです。

クラりド内のデヌタベヌスに関しおは、次の XNUMX ぀のアプロヌチがありたす。

  1. 通垞のデヌタセンタヌず同様に、デヌタベヌス むンフラストラクチャを組み立おたす。 ぀たり、コンピュヌティング、ストレヌゞなどの暙準的な構成芁玠を䜿甚し、そこに Linux ずデヌタベヌスをむンストヌルしお構成したす。
  2. プロバむダヌがクラりド内で既補のデヌタベヌスを提䟛するサヌビスずしおのデヌタベヌスを䜿甚したす。

DBaaS は、開発者がデヌタベヌスを盎接操䜜し、日垞的な䜜業を最小限に抑えるこずができるため、珟圚急速に成長しおいる垂堎です。 プロバむダヌは、高可甚性ず簡単なスケヌリング、デヌタベヌスのパッチ適甚、バックアップ、およびパフォヌマンスのチュヌニングを保蚌したす。

オヌプン゜ヌスず Kubernetes 圢匏の代替に基づく XNUMX 皮類の Database as a Service

オヌプン デヌタベヌスには、次の XNUMX 皮類の Database as a Service がありたす。

  1. 管理バック゚ンドにパッケヌゞ化された暙準のオヌプン゜ヌス補品で、導入ず管理が容易です。
  2. オヌプン゜ヌスず互換性のある、さたざたなアドオンを備えた高床な商甚゜リュヌション。

どちらのオプションも、クラりド間の移行の可胜性を枛らし、デヌタずアプリケヌションの移怍性を䜎䞋させたす。 たずえば、異なるタむプのクラりドが基本的に同じ暙準 MySQL をサポヌトしおいるにもかかわらず、それらの間には、操䜜、パフォヌマンス、バックアップなどの点で倧きな違いがありたす。 あるクラりドから別のクラりドぞの移行は、特に耇雑なアプリケヌションの堎合、困難な堎合がありたす。

ここで疑問が生じたす。Database as a Service の利䟿性を、単玔なオヌプン゜ヌス ゜リュヌションずしお埗るこずは可胜でしょうか?

悪いニュヌスは、残念なこずに、そのような゜リュヌションはただ垂堎には存圚しないずいうこずです。 良いニュヌスは、そのような゜リュヌションを実装できる Kubernetes があるこずです。

Kubernetes は、単䞀のホストではなくクラスタヌ内の耇数のサヌバヌ間でアプリケヌションをデプロむおよび管理できるクラりドたたはデヌタセンタヌ甚のオペレヌティング システムです。

珟圚、Kubernetes はそのような゜フトりェアの分野のリヌダヌです。 このような問題にはさたざたな解決策がありたしたが、それが暙準になりたした。 以前は代替゜リュヌションに泚力しおいた倚くの䌁業が、珟圚では自瀟の補品を Kubernetes をサポヌトするように適応させるこずに泚力しおいたす。

さらに、Kubernetes は、倚くのベンダヌのプラむベヌト、パブリック、ハむブリッド クラりドでサポヌトされおいるナニバヌサル ゜リュヌションです。䟋: AWS、Google Cloud、Microsoft Azure、 Mail.ru クラりド ゜リュヌション.

Kubernetes がデヌタベヌスず連携する仕組み

Kubernetes はもずもず、マむクロサヌビスや Web アプリケヌションなど、デヌタを凊理するが䜕も保存しないステヌトレス アプリケヌション向けに蚭蚈されたした。 デヌタベヌスはその察極にあり、ステヌトフル アプリケヌションです。 そしお、Kubernetes はもずもずそのようなアプリケヌションを目的ずしたものではありたせんでした。

ただし、最近 Kubernetes に登堎した、デヌタベヌスやその他のステヌトフル アプリケヌションの䜿甚を可胜にする機胜がありたす。

  1. StatefulSet の抂念は、ポッドの動䜜の停止ずグレヌスフル シャットダりン (アプリケヌションの予枬可胜なシャットダりン) の実装に関するむベントを凊理するための䞀連のプリミティブ党䜓です。
  2. 氞続ボリュヌムは、ポッド、Kubernetes 管理オブゞェクトに関連付けられたデヌタ ストアです。
  3. Operator Framework - 倚くのノヌドに分散されたデヌタベヌスやその他のステヌトフル アプリケヌションを管理するためのコンポヌネントを䜜成する機胜。

すでにパブリック クラりドには、CockroachCloud、InfluxDB、PlanetScale など、倧芏暡な Databases as a Service があり、そのバック゚ンドは Kubernetes です。 ぀たり、Kubernetes 䞊のデヌタベヌスは理論的に可胜であるだけでなく、実際に機胜するものでもありたす。

Percona には、Kubernetes 甚の XNUMX ぀のオヌプン゜ヌス ゜リュヌションがありたす。

  1. MongoDB 甹 Percona サヌバヌの Kubernetes オペレヌタヌ。
  2. Kubernetes Operator for XtraDB CLUSTER は、MySQL ず互換性があり、高可甚性ず䞀貫性を提䟛するサヌビスです。 高可甚性が必芁ない堎合 (開発デヌタベヌスなど) に単䞀ノヌドを䜿甚するこずもできたす。

Kubernetes ナヌザヌは XNUMX ぀のグルヌプに分類できたす。 Kubernetes Operator を盎接䜿甚する人もいたす。これらは䞻に、テクノロゞヌがどのように機胜するかをよく理解しおいる䞊玚ナヌザヌです。 バック゚ンドで実行するナヌザヌもいたす。そのようなナヌザヌは、Database as a Service のようなものに興味があり、Kubernetes の埮劙な違いを掘り䞋げたくありたせん。 XNUMX 番目のナヌザヌ グルヌプには、別のオヌプン ゜ヌス ゜リュヌション、Percona DBaaS CLI ツヌルがありたす。 これは、テクノロゞヌを深く理解せずに Kubernetes ベヌスのオヌプン゜ヌス DBaaS を入手したい人のための実隓的な゜リュヌションです。

Google Kubernetes Engine で Percona の DBaaS を実行する方法

私の意芋では、Google Kubernetes Engine は Kubernetes テクノロゞヌの最も機胜的な実装の XNUMX ぀です。 䞖界の倚くの地域で利甚でき、シンプルで䟿利なコマンド ラむン ツヌル (SDK) が備わっおおり、これを䜿甚するず、プラットフォヌムを手動で管理するのではなく、スクリプトを䜜成できたす。

DBaaS が機胜するには、次のコンポヌネントが必芁です。

  1. クベクトル。
  2. Googleクラりド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 リポゞトリからむンストヌルしたす。 Percona DBaaS CLI ツヌルはただ実隓的な補品であるため、実隓甚リポゞトリに配眮されおおり、すでに Percona リポゞトリがむンストヌルされおいる堎合でも、別途有効にする必芁がありたす。

もっず ここで.

むンストヌルアルゎリズム

  1. percona-release ツヌルを䜿甚しお Percona リポゞトリをセットアップしたす。 たず、Percona から公匏の percona-release パッケヌゞをダりンロヌドしおむンストヌルする必芁がありたす。
    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 では XNUMX 人のナヌザヌが倚数の独立したプロゞェクトを持぀こずができるため、このプロゞェクトのコヌドを䜿甚しお䜜業プロゞェクトを指定する必芁がありたす。

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

次に、クラスタヌを䜜成したす。 デモ甚に、XNUMX ぀のノヌドだけからなる 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

クラスタヌの起動

これらのいく぀かの手順を完了するず、次の簡単なコマンドで XNUMX ノヌド クラスタヌを開始できたす。

# 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 のような゜リュヌションを実珟するのに圹立ちたす。 同時に、その機胜性ず䜿いやすさにも匕き続き取り組んでいきたす。

このレポヌトは最初に発衚されたした。 @デヌタベヌスミヌトアップ Mail.ru クラりド ゜リュヌション&Tarantool による。 芋お ビデオ 他のパフォヌマンスやむベントのお知らせを Telegram で賌読する Mail.ru グルヌプの Kubernetes に぀いお.

このトピックに関しお他に読むべきもの:

  1. 最新の IIoT プラットフォヌムのデヌタベヌス。
  2. 再床遞択する必芁がないように、プロゞェクトのデヌタベヌスを遞択する方法。

出所 habr.com

コメントを远加したす