DBaaSを置き換えるためにKubernetesを使用してハイブリッドクラウドを構築する方法

私の名前はPetrZaitsevです。私PerconaのCEOであり、創設者です。



  • オープンソースソリューションからDatabaseas aServiceにどのように移行したか。
  • クラウドにデータベースをデプロイするためのアプローチは何ですか。
  • ベンダーの依存関係を取り除き、DBMSをサービスとして可能な限りシンプルに保つことにより、KubernetesがDBaaSを置き換える方法。


この記事は、Mail.ru Cloud Solutions&Tarantoolによる@DatabasesMeetupのレポートに基づいています。読みたくない場合は、次のように表示されます。







オープンソースからクラウド内のサービスとしてのデータベースにどのように到達したか



私は90年代後半からオープンソースをやっています。20年前、データベースなどのオープンソースを使用することは容易ではありませんでした。ソースをダウンロードし、パッチを適用し、コンパイルしてから使用する必要がありました。



次に、オープンソースは一連の簡略化を行いました。



  • コンパイルする必要のあるTar.gzおよびINSTALLソース。
  • .debや.rpmなどの依存関係を持つパッケージ。パッケージのセットをインストールするだけで済みます。
  • インストールが自動的に行われるAPTやYUMなどのパッケージリポジトリ。
  • DockerやSnapなどのソリューション。これにより、外部の依存関係なしにインストール時にパッケージを取得できます。


その結果、オープンソースソフトウェアの使用が容易になり、そのようなアプリケーションの開発への参入の障壁が軽減されます。



同時に、20年前の状況とは異なり、誰もが組み立ての専門家でしたが、今ではほとんどの開発者はソースから使用されるツールを組み立てることができません。



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



  1. より複雑ですが、より便利なソフトウェアを使用できます。たとえば、ブラウザは使い勝手が良いですが、多くのオープンソースコンポーネントが含まれているため、最初から作成するのは不便です。
  2. より多くの人々がオープンソースやその他のソフトウェアの開発者になることができ、より多くのソフトウェアがビジネスで使用され、その必要性が高まっています。


欠点は、簡素化の次のステップがクラウドソリューションの使用に関連していることです。これにより、特定のベンダーのロックイン、つまり1つのベンダーへのバインドが発生します。私たちはシンプルなソリューションを使用し、プロバイダーはオープンソースコンポーネントを使用していますが、実際にはそれらは大きなクラウドの1つに釘付けになっています。つまり、オープンソース(および互換性のあるソフトウェア)を展開する最も簡単で最速の方法は、独自のAPIを使用してクラウドに配置することです。



クラウド内のデータベースに関しては、2つのアプローチがあります。



  1. 通常のデータセンターと同様に、データベースインフラストラクチャを構築します。つまり、コンピューティング、ストレージなどの標準的な構成要素を採用し、それらにLinuxを配置し、データベースを構成します。
  2. Database as a Serviceを使用します。プロバイダーは、クラウド内で既製のデータベースを提供します。


現在、DBaaSは急速に成長している市場です。このようなサービスにより、開発者はデータベースを直接操作でき、日常業務を最小限に抑えることができます。プロバイダーは、高可用性(高可用性)と簡単なスケーリング、データベースパッチ、バックアップ、パフォーマンスチューニングの提供を前提としています。



オープンソースに基づく2種類のサービスとしてのデータベースとKubernetesの形式の代替



オープンソースデータベースのサービスとしてのデータベースには、次の2つのタイプがあります。



  1. 簡単な展開と管理のために管理バックエンドにパッケージ化された標準のオープンソース製品。
  2. オープンソースと互換性のある、さまざまなアドオンを備えた高度な商用ソリューション。


どちらのオプションも、クラウド間で移行する機能を低下させ、データとアプリケーションの移植性を低下させます。たとえば、さまざまなタイプのクラウドが実際には同じ標準のMySQLをサポートしているにもかかわらず、操作、パフォーマンス、バックアップなど、それらの間には大きな違いがあります。あるクラウドから別のクラウドへの移行は、特に複雑なアプリケーションの場合、困難な場合があります。



そして、ここで疑問が生じます-サービスとしてのデータベースの利便性を得ることができますが、単純なオープンソースソリューションとしてですか?



悪いニュースは、残念ながら、そのようなソリューションはまだ市場に出ていないということです。良いニュースは、そのようなソリューションを実装できるKubernetesがあることです。



Kubernetesは、単一のホストではなく、クラスター内の複数のサーバーにアプリケーションを展開および管理できるようにするクラウドまたはデータセンターのオペレーティングシステムです。


Kubernetesは現在、このカテゴリのソフトウェアのリーダーです。そのようなタスクにはさまざまな解決策がありましたが、標準になったのは彼でした。以前は代替ソリューションに手を出した多くの企業が、現在、Kubernetesをサポートするために自社製品を適応させることに焦点を合わせています。



さらに、Kubernetesは、AWS、Google Cloud、Microsoft Azure、Mail.ru Cloud Solutionsなど、多くのベンダーのプライベート、パブリック、およびハイブリッドクラウドでサポートされているユニバーサルソリューションです。



Kubernetesがデータベースと連携する方法



Kubernetesは元々、データを処理するが何も保存しないステートレスアプリケーション(マイクロサービスやWebアプリケーションなど)用に設計されました。データベースはスペクトルの反対側にあります。つまり、データベースはステートフルなアプリケーションです。そして、Kubernetesはもともとそのようなアプリケーションのために設計されていませんでした。



ただし、最近Kubernetesに登場し、データベースやその他のステートフルアプリケーションの使用を可能にする機能があります。



  1. StatefulSetの概念は、ポッドのシャットダウンイベントを処理し、Graceful Shutdown(予測可能なアプリケーションのシャットダウン)を実行するための一連のプリミティブです。
  2. 永続ボリューム-ポッド、Kubernetes管理オブジェクトに関連付けられているデータストア。
  3. オペレーターフレームワーク-つまり、多くのノードに分散されたデータベースやその他のステートフルアプリケーションを管理するためのコンポーネントを作成する機能。


パブリッククラウドにはすでに大規模なサービスとしてのデータベースがあり、そのバックエンドにはKubernetesがあります(例:CockroachCloud、InfluxDB、PlanetScale)。つまり、Kubernetesのデータベースは、理論的に可能なものであるだけでなく、実際に機能するものでもあります。



Perconaには2つのオープンソースKubernetesソリューションがあります。



  1. MongoDB用PerconaサーバーのKubernetesオペレーター。
  2. XtraDBCLUSTERのKubernetesOperatorは、高い可用性と一貫性を提供するMySQL互換サービスです。開発データベースなど、高可用性が必要ない場合は、単一ノードを使用することもできます。


Kubernetesユーザーは2つのグループに分けることができます。Kubernetes Operatorsを直接使用する人もいます。これらは主に、テクノロジーの仕組みをよく理解している上級ユーザーです。他の人はバックエンドでそれを実行します-そのようなユーザーはサービスとしてのデータベースのようなものに興味があり、Kubernetesのニュアンスを掘り下げたくありません。2番目のユーザーグループには、別のオープンソースソリューションであるPercona DBaaSCLIツールがあります。これは、テクノロジーを深く理解せずに、Kubernetesに基づくオープンソースDBaaSを入手したい人のための実験的なソリューションです。



Google KubernetesEngineでPerconaからDBaaSを実行する方法



私の意見では、Google Kubernetes Engineは、Kubernetesテクノロジーの最も機能的な実装の1つです。世界の多くの地域で利用可能であり、プラットフォームを手動で操作するのではなく、スクリプトを作成できるシンプルで便利なコマンドラインツール(SDK)を備えています。



DBaaSを機能させるには、次のコンポーネントが必要です。



  1. Kubectl。
  2. Google CloudSDK。
  3. Percona DBaaSCLI。


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 CloudSDKのインストール



同じ方法でソフトウェアパッケージをインストールします。詳細はこちら



# 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 DBaaSCLIをインストールします



Perconaリポジトリからインストールします。Percona DBaaS CLIツールはまだ実験的な製品であるため、実験的なリポジトリにあります。Perconaリポジトリがすでにインストールされている場合でも、個別に含める必要があります。



詳細はこちら



インストールアルゴリズム:



  1. percona-releaseツールを使用して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では、1人のユーザーが多数の独立したプロジェクトを持つことができるため、このプロジェクトのコードを使用して作業プロジェクトを指定する必要があります。



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


次に、クラスターを作成します。デモでは、3つのノードのみの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クラスター内にあります。これは、GoogleCloudプロジェクトから独立しています。



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


クラスターを開始します



これらのいくつかの手順を実行した後、次の簡単なコマンドで3つのノードのクラスターを開始できます。



# 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内でのみ使用できます。つまり、Createコマンドを実行したこのサーバーからは使用できません。たとえば、クライアントを使用したテストで使用できるようにするには、ポートマッピングを介してポートを渡す必要があります。



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 Cloud Solutions&Tarantoolによる@DatabasesMeetupで最初に発表されました。ウォッチの動画、他のスピーチや電報でイベントの告知をサブスクライブMail.ruグループでKubernetes周り



このトピックについて他に読むべきこと:



  1. 最新のIIoTプラットフォームのデータベース。
  2. 再度選択しないように、プロジェクトのデータベースを選択する方法。



All Articles