1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

YugaByteDBインストール(on k8s)

Posted at

この記事について

この記事は分散データベース YugaByteDB を手元のKubernetesクラスタ(k8s)にインストールした際の手順をまとめます。

技術的にYugaByteDBのような分散DBに興味があり、触ってみるための環境を手に入れるためにインストールを行いました。
したがって、プロダクション環境のインストール手順ではないことをご承知おきください。

また、「YugaByteDBって何?」「何ができるの?」と言った内容は筆者もこれから勉強するので記載しません。
詳しい方の記事を読まれることをお勧めします。

環境

インストールした環境は基本的にはセルフマネージドk8sになります。
一般的なk8s環境であれば環境に依存する部分は少ないと思いますが、環境の詳細を以下に示します。

インストール環境の詳細
  • 仮想マシン:
    • AWS EC2 t3a.medium (マスター1台+ワーカー3台=4台)
    • 2つのAvailability Zoneに2台ずつ配置(同一Region)
  • OS:
    • Ubuntu 18.04
  • container runtime:
  • Kubernetes:
    • installed by kubeadm
    • CNI Plugin: Weave Net
    • v1.17.4
    • StorageClass
      • 筆者の環境ではRook Cephを使ってCephクラスターを構築しレプリケーションなしのRBDストレージを使用

YugaByteDB operator のインストール

YugabyteDB operatorについて

YugaByteDB公式のインストール手順 では4種類のインストール方法が選択できます。

  • Helm Chart
  • Operator
    • YugaByteDB operator
    • Operator Hub
    • Rook operator

Helmは基本的にインストール時の静的なマニフェストをテンプレートから生成するものです。
一方でOperatorはそれ自体k8s上のアプリケーションとして稼働して、今回の場合で言えばYugaByteDBのようなリソースを管理してくれます。
Operatorのほうが任せられることが多いですが、何をしてくれるかはOperatorの作りによります。
開発者がアプリケーションの知識を詰め込める(=自分でやることが少ない)だろうと想定してOperatorを使用しましたが、後述の通りOperator実装に問題があり、修正することになりました。ただ、自分の簡単な修正だけできちんと動いているので基本的な実装には問題ないようです。

また、Operatorの中でもYugaByteDB operatorを選んだのはドキュメントの

This operator currently provides more configuration options as compared to the Rook operator.

という一文を信じてのことです。

インストール

先にも書きましたが、現在リリースされているYugaByteDB operatorには問題があります。
既存のoperatorを使うとYBClusterリソースのstorageClassの設定値が実際に作成されるリソースに反映されません。
すでにissuePRも提出されているのでそのうち直ると思いますが、執筆時点では手元で修正する必要があります。
筆者の修正例も掲載しますが、PRの修正済みブランチからソースコードを取得するほうがよいでしょう。

筆者による修正例
diff --git a/pkg/controller/ybcluster/ybcluster_create_controller.go
 b/pkg/controller/ybcluster/ybcluster_create_controller.go
index 07d0677..b3c0a78 100644
--- a/pkg/controller/ybcluster/ybcluster_create_controller.go
+++ b/pkg/controller/ybcluster/ybcluster_create_controller.go
@@ -229,6 +229,7 @@ func createStatefulSet(cluster *yugabytev1alpha1.YBCluster, isTServerStatefulset
 func getVolumeClaimTemplates(storageSpec *yugabytev1alpha1.YBStorageSpec) *[]corev1.PersistentVolumeClaim {
        volumeClaimTemplates := make([]corev1.PersistentVolumeClaim, storageSpec.Count)
        for i := 0; i < int(storageSpec.Count); i++ {
+               storageClassName := storageSpec.StorageClass
                volumeClaimTemplates[i] = corev1.PersistentVolumeClaim{
                        ObjectMeta: metav1.ObjectMeta{
                                Name: fmt.Sprintf("%s%d", volumeMountName, i),
@@ -240,6 +241,7 @@ func getVolumeClaimTemplates(storageSpec *yugabytev1alpha1.YBStorageSpec) *[]cor
                                                corev1.ResourceStorage: resource.MustParse(storageSpec.Size),
                                        },
                                },
+                               StorageClassName: &storageClassName,
                        },
                }
        }

修正済みソースコードのルートディレクトリから build/Dockerfile をビルドし、適当なコンテナレジストリに置きます。

CustomResourceDefinition(crd)をインストールします。

kubectl create -f deploy/crds/yugabyte_v1alpha1_ybcluster_crd.yaml

operatorをインストール時に修正したコンテナイメージを使用するためにマニフェストを修正します。

diff --git a/deploy/operator.yaml b/deploy/operator.yaml
index 53d8eea..0e762d7 100644
--- a/deploy/operator.yaml
+++ b/deploy/operator.yaml
@@ -104,7 +104,7 @@ spec:
       containers:
         - name: yugabyte-k8s-operator
           # Replace this with the built image name
-          image: quay.io/yugabyte/yugabytedb-operator
+          image: uri.example.com/to/your/operator/repository
           command:
             - yugabyte-k8s-operator
           imagePullPolicy: Always

YugaByteDB のインストール

公式の手順通り行いますが、StorageClassなどを必要に応じて修正しておきます。

kubectl create -f deploy/crds/yugabyte_v1alpha1_ybcluster_cr.yaml

YugaByteDB へのアクセス

公式の手順通りに ysqlshycqlsh といった専用のツールでアクセス可能です。なおデフォルトではアクセスの認証情報以下の通りです。

  • ユーザ名: postgres
  • パスワード: なし
    • パスワード認証を行わない
kubectl exec -it yb-tserver-0 /home/yugabyte/bin/ysqlsh -- -h yb-tserver-0 --echo-queries
kubectl exec -it yb-tserver-0 /home/yugabyte/bin/cqlsh yb-tserver-0

また、上記はYugaByteDBクラスタ内のPodからのアクセスですが、クラスタ外のPodからもアクセスできます。特にpsqlのようなPostgreSQL互換クライアントから以下のようにアクセス可能です。

kubectl run -it --rm --restart=Never --image=postgres psql -- psql -h yb-tservers -p 5433 -U postgres

パスワード認証は行わないので -W オプションは不要です。

ポートが5433であることに注意すれば通常通り接続できます。

感想

インストールしただけだと普通のPostgreSQLですね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?