翻訳者のまえがき : CockroachDBの紹介を公開してからわずか1週間後に、この分散型でスケーラブルなオープンソースDBMSの最初の最終リリースが行われ、本番環境での公式な準備が整いました。 だから-それは、Kubernetesでのマイクロサービスの現実でそれを「調理する」方法を学ぶ時です。
この記事では、Kubernetesとそのベータ関数StatefulSetを使用して、デプロイメントを調整し、安全でない3ノードCockroachDBクラスターを管理する方法を示します。
はい。KubronetesでCockroachDBなどのステートフルアプリケーションを実行するには、現在ベータレベルでサポートされているシステムの複雑な機能を使用する必要があります。 KubernetesでCockroachDBを実行してテストする方が簡単ですが、ここで説明するアプローチは、Kubernetesで必要な機能が最終的に完成したときに、DBMSを運用環境に展開するように設計されています。 (注perev。:Kubernetesのステートフルアプリケーションの問題とその解決方法の1つについて、 Kubernetes Operatorsについて説明しました 。)
安全でないクラスター(つまり、暗号化を無効にして-およそTransl。)をデプロイすることは 、本番環境のデータには推奨されないことに注意してください。 著者は、安全なクラスターの展開プロセスが改善された後、ガイドを更新することを約束します。
ステップ1.デプロイメントのための環境の選択
KubernetesでCockroachDBを実行する環境(クラウドまたはオンプレミス)を選択します。 記事に記載されている手順では、両方のオプションを考慮に入れており、それぞれに独自のニュアンスがあります。
したがって、初心者にとっては、Kubernetesに関連して使用される用語を理解しておくと便利です。
- minikube [ローカルでのみ使用] -コンピューターの仮想マシン内の単一ノードからKubernetesクラスターを実行できるユーティリティ。
- インスタンス (クラウドでの使用のみに関連)は、物理マシンまたは仮想マシンです。 このガイドでは、Kubernetesのスクリプトがローカルコンピューターから起動され、4つのGCEまたはAWSインスタンスがリモートで作成され、単一のKubernetesクラスターにアタッチされます。
- ポッド (下)は、1つ以上のDockerコンテナーのグループです。 このガイドでは、各サブは個別のインスタンスで起動され、単一のCockroachDBノードが起動される1つのDockerコンテナが含まれます。 3つの囲炉裏から始めて、その数を4に増やします。
- StatefulSet-ステートフルユニットと見なされる炉床のグループ。 各サブには独自のネットワークアドレスがあり、再起動後は常に同じ永続ストレージに関連付けられます。 StatefulSets-Kubernetes 1.5のベータ機能。
- 永続的なボリューム -ネットワークストレージの一部、つまり GCEの永続ディスクとAWSのElastic Block Store [クラウド使用の場合] 、またはsubにマウントされたローカルストレージ[ローカルの場合] 。 パーマネントボリュームのライフタイムは、それを使用する炉のライフタイムに依存せず、各CockroachDBノードは、再起動時に以前のストレージに結び付けられます。
- クラウド使用の明確化:このガイドでは、ボリュームの動的プロビジョニングが利用可能であると想定しています。 それ以外の場合は、 永続ボリューム要求を手動で作成する必要があります。 これに必要な手順はminikube.shで確認できます。
- ローカルでの使用:minikubeを使用する場合、永続ボリュームは一時的な外部ディレクトリであり、手動で削除されるかKubernetesクラスター全体が削除されるまで存在し続けます。
- クラウド使用の明確化:このガイドでは、ボリュームの動的プロビジョニングが利用可能であると想定しています。 それ以外の場合は、 永続ボリューム要求を手動で作成する必要があります。 これに必要な手順はminikube.shで確認できます。
- 永続的ボリューム要求 ( ローカル使用のみに関連) -ポッドが作成されると(CockroachDBノードごとに1つ)、それぞれがノードの永続ストレージを決定するために永続的ボリューム要求を要求します。
ステップ2. Kubernetesをインストールして実行する
クラウドで
プロジェクトのドキュメントに従って、コンピューターからKubernetesクラスターをインストールして起動します。
- GCEの手順については、 Google Compute EngineでのKubernetesの実行をご覧ください。
- AWSの手順については、AWS EC2でのKubernetesの実行を参照してください。
このステップの中心部分はKubernetesスクリプトの起動です。このスクリプトは、GCEまたはAWSの4つのインスタンスを作成し、それらを単一のKubernetesクラスターに結合します。これはすべてコンピューターからリモートで行います。 次の手順もコンピューターから実行されます。
局所的に
Kubernetesのドキュメントに従って、オペレーティングシステムにminikubeとkubectlをインストールします。 その後、ローカルKubernetesクラスターを起動します。
$ minikube start Starting local Kubernetes cluster... Kubectl is now configured to use the cluster.
ステップ3. CockroachDBクラスターの開始
クラウドで
既製のcockroachdb-statefulset.yamlファイルを使用して、コンピューターからStatefulSetを作成します。
kubectl create -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/cockroachdb-statefulset.yaml
翻訳者のメモ :Cockroach Labsの開発者が用意した既製のcockroachdb-statefulset.yaml
を使用する前に、その内容を研究することが役立ちます。 幸いなことに、著者はKubernetesで何がどのように開発されているかを理解するのに役立つコメントを処理しました。 そして、もちろん、CockroachDBの実験操作または戦闘操作からの期待に応じて変更できます。
局所的に
minikube.shスクリプトとcockroachdb-statefulset.yaml構成ファイルをダウンロードし、スクリプトを実行します。
$ wget https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/minikube.sh $ wget https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/cockroachdb-statefulset.yaml $ sh minikube.sh
このスクリプトは、永続ボリュームおよび永続ボリューム要求を作成するプロセスを自動化します。 また、
cockroachdb-statefulset.yaml
構成を使用して
kubectl create
コマンドを実行し、
kubectl create
します。
全般
このステップのその他のアクションは、クラウドおよびオンプレミスのアプリケーションで一般的です。
kubectl get
コマンドを使用して、永続ボリュームと関連するクレームが作成されたことを確認します。
$ kubectl get persistentvolumes NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE pvc-52f51ecf-8bd5-11e6-a4f4-42010a800002 1Gi RWO Delete Bound default/datadir-cockroachdb-0 26s pvc-52fd3a39-8bd5-11e6-a4f4-42010a800002 1Gi RWO Delete Bound default/datadir-cockroachdb-1 27s pvc-5315efda-8bd5-11e6-a4f4-42010a800002 1Gi RWO Delete Bound default/datadir-cockroachdb-2 27s
ローカルボリュームの場合、同じコマンドの出力は次のようになります。
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE pv0 1Gi RWO Bound default/datadir-cockroachdb-0 27s pv1 1Gi RWO Bound default/datadir-cockroachdb-1 26s pv2 1Gi RWO Bound default/datadir-cockroachdb-2 26s
少し待って、3つの囲炉裏が正常に作成されたことを確認します。 それでも表示されない場合は、しばらくしてからもう一度確認してください。
$ kubectl get pods NAME READY STATUS RESTARTS AGE cockroachdb-0 1/1 Running 0 2m cockroachdb-1 1/1 Running 0 2m cockroachdb-2 1/1 Running 0 2m
StatefulSet構成では、すべてのCockroachDBノードがstderrに書き込むように構成されているため、問題を分析するためにログファイルまたはノードにアクセスする必要がある場合は、ハース自体の物理ログチェックの代わりに
kubectl logs <podname>
使用します。
ステップ4.組み込みSQLクライアントの使用
Cockroachdb
cockroachdb-public
ホスト名を置き換えてCockroachDBクラスターに接続する、インタラクティブな一時(1回限りの使用のために作成された)ウィンドウで組み込みのSQLクライアントを実行します。
$ kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never \ -- sql --insecure --host=cockroachdb-public
CockroachDB SQLコマンドを実行します(詳細については、 プロジェクトのドキュメントを参照)。
CREATE DATABASE bank; CREATE TABLE bank.accounts (id INT PRIMARY KEY, balance DECIMAL); INSERT INTO bank.accounts VALUES (1234, 10000.50); SELECT * FROM bank.accounts; +------+----------+ | id | balance | +------+----------+ | 1234 | 10000.50 | +------+----------+ (1 row)
SQLクライアントでのコマンドの実行が完了したら、<Ctrl> + <d>、<Ctrl> + <c>を押すか、
\q
コマンドを入力して一時サブを終了および削除します。
ステップ5.ノードドロップのシミュレーション
replicas: 3
よると
replicas: 3
StatefulSet構成の
replicas: 3
、Kubernetesは3つのポッド/ノードが常に実行されていることを確認します。 サブ/ホストが落ちた場合、Kubernetesは同じネットワーク名と永続ストレージを持つ新しいホストを自動的に作成します。
これを実際に見てみましょう。
- CockroachDBノードの1つを強制終了します。
$ kubectl delete pod cockroachdb-2 pod "cockroachdb-2" deleted
- 再起動中を確認します。
$ kubectl get pod cockroachdb-2 NAME READY STATUS RESTARTS AGE cockroachdb-2 0/1 ContainerCreating 0 3s
- 少し待って、準備ができていることを確認します。
$ kubectl get pod cockroachdb-2 NAME READY STATUS RESTARTS AGE cockroachdb-2 1/1 Running 0 1m
ステップ6.クラスターのスケーリング
クラウドで
Kubernetesスクリプトは4つのノードを作成しました:1つのマスターと3つのワーカー。 ポッドは作業ノードにのみ配置されるため、同じノードに2つのポッドが存在しないようにするには(実稼働のベストプラクティスの推奨事項を参照)、新しい作業ノードを追加し、StatefulSet構成を編集して別のサブを追加する必要があります。
- 作業ノードを追加します。 これを行うには、GCEでマネージドインスタンスグループのサイズを変更し、AWSでAuto Scalingグループのサイズを変更します。
-
kubectl scale
コマンドを使用して、StatefulSetに以下を追加します。
$ kubectl scale statefulset cockroachdb --replicas=4 statefulset "cockroachdb" scaled
- 4番目の下が追加されていることを確認します。
$ kubectl get pods NAME READY STATUS RESTARTS AGE cockroachdb-0 1/1 Running 0 2h cockroachdb-1 1/1 Running 0 2h cockroachdb-2 1/1 Running 0 9m cockroachdb-3 1/1 Running 0 46s
局所的に
ポッドの数を増やすには、同じ
kubectl scale
コマンドを実行し、操作の成功を確認するだけで十分です(
kubectl get pods
)。
ステップ7.クラスターを停止する
クラウドで
CockroachDBクラスターを停止するには:
-
kubectl delete
コマンドを使用して、作成されたすべてのリソース(ログおよび削除された永続ボリュームを含む)をクリアします。
$ kubectl delete pods,statefulsets,services,persistentvolumeclaims,persistentvolumes,poddisruptionbudget \ -l app=cockroachdb
-
kubernetes
ディレクトリからcluster/kube-down.sh
実行しcluster/kube-down.sh
。
最初にリソースを削除せずにKubernetesを停止した場合、削除された永続ボリュームはクラウドに存在し続けることに注意してください。
局所的に
- クラスターを再起動する場合は、
minikube stop
コマンドを使用します。 minikubeで仮想マシンをシャットダウンしますが、作成されたすべてのリソースを保存します。
$ minikube stop Stopping local Kubernetes cluster... Machine stopped.
minikube start
コマンドを使用して、クラスターを最後の状態に復元できます。
- 今後クラスターの起動を計画しない場合は、
minikube delete
コマンドを使用します。 シャットダウンし、minikubeと作成されたすべてのリソース(永続ボリュームを含む)を持つ仮想マシンを削除します。
$ minikube delete Deleting local Kubernetes cluster... Machine deleted.
注 :ログを保存するには、各サブのstderrからログをコピーしてから、クラスターとそのすべてのリソースを削除してください。
kubectl logs <podname>
コマンドを使用して、pod stderrストリームにアクセスします。
翻訳者のあとがき :ここでCockroach LabsのWebサイトから翻訳された資料(リンクはソースで提供されています)は、プロジェクトのGitリポジトリで更新されたマークダウンドキュメントに対応しています。
私たち自身はまだ運用環境でCockroachDBを使用していませんが、この興味深いプロジェクトをよく見て、その潜在的な可能性を確認しています。