メインコンテンツまでスキップ
バージョン: 3.14

[非推奨] Helm Charts をはじめよう (ScalarDB Server)

注記

このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。

注記

ScalarDB Server は非推奨になりました。代わりに ScalarDB Cluster を使用してください。

このドキュメントでは、Kubernetes クラスター上の Helm Chart をテスト環境として使用して、ScalarDB Server を開始する方法について説明します。ここでは、テスト用の Mac または Linux 環境がすでにあることを前提としています。このドキュメントでは Minikube を使用しますが、これから説明する手順はどの Kubernetes クラスターでも機能するはずです。

要件

※コンテナイメージ (scalardb-server および scalardb-envoy) を取得するには、AWS Marketplace または Azure Marketplace で ScalarDB を購読する必要があります。詳細については、以下のドキュメントを参照してください。

私たちが作るもの

次のように、次のコンポーネントを Kubernetes クラスターにデプロイします。

+--------------------------------------------------------------------------------------------------------------------------------------+
| [Kubernetes クラスター] |
| |
| [ポッド] [ポッド] [ポッド] [ポッド] |
| |
| +-------+ +-----------------+ |
| +---> | Envoy | ---+ +---> | ScalarDB Server | ---+ |
| | +-------+ | | +-----------------+ | |
| | | | | |
| +--------+ +---------+ | +-------+ | +-------------------+ | +-----------------+ | +------------+ |
| | クライアント | ---> | サービス | ---+---> | Envoy | ---+---> | サービス | ---+---> | ScalarDB Server | ---+---> | PostgreSQL | |
| +--------+ | (Envoy) | | +-------+ | | (ScalarDB Server) | | +-----------------+ | +------------+ |
| +---------+ | | +-------------------+ | | |
| | +-------+ | | +-----------------+ | |
| +---> | Envoy | ---+ +---> | ScalarDB Server | ---+ |
| +-------+ +-----------------+ |
| |
+--------------------------------------------------------------------------------------------------------------------------------------+

ステップ1. Kubernetes クラスターを開始する

まず、Kubernetes クラスターを準備する必要があります。minikube 環境を使用する場合は、Scalar Helm Charts をはじめようを参照してください。すでに Kubernetes クラスターを開始している場合は、この手順をスキップできます。

ステップ2. PostgreSQL コンテナーを開始する

ScalarDB は、バックエンドデータベースとして何らかのデータベースシステムを使用します。このドキュメントでは PostgreSQL を使用します。

次のようにして、Kubernetes クラスターに PostgreSQL をデプロイできます。

  1. Bitnami Helm リポジトリを追加します。

    helm repo add bitnami https://charts.bitnami.com/bitnami
  2. PostgreSQLをデプロイします。

    helm install postgresql-scalardb bitnami/postgresql \
    --set auth.postgresPassword=postgres \
    --set primary.persistence.enabled=false
  3. PostgreSQL コンテナが実行されているかどうかを確認します。

    kubectl get pod

    【コマンド実行結果】

    NAME                    READY   STATUS    RESTARTS   AGE
    postgresql-scalardb-0 1/1 Running 0 2m42s

ステップ3. Helm Charts を使用して Kubernetes クラスターに ScalarDB Server をデプロイする

  1. Scalar helm リポジトリを追加します。

    helm repo add scalar-labs https://scalar-labs.github.io/helm-charts
  2. AWS/Azure Marketplace から ScalarDB コンテナーイメージをプルするためのシークレットリソースを作成します。

    • AWS Marketplace
      kubectl create secret docker-registry reg-ecr-mp-secrets \
      --docker-server=709825985650.dkr.ecr.us-east-1.amazonaws.com \
      --docker-username=AWS \
      --docker-password=$(aws ecr get-login-password --region us-east-1)
    • Azure Marketplace
      kubectl create secret docker-registry reg-acr-secrets \
      --docker-server=<your private container registry login server> \
      --docker-username=<Service principal ID> \
      --docker-password=<Service principal password>

    詳細については、以下のドキュメントを参照してください。

  3. ScalarDB Server のカスタム値ファイル (scalardb-custom-values.yaml) を作成します。

    • AWS Marketplace

      cat << 'EOF' > scalardb-custom-values.yaml
      envoy:
      image:
      repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/scalar/scalardb-envoy"
      version: "1.3.0"
      imagePullSecrets:
      - name: "reg-ecr-mp-secrets"

      scalardb:
      image:
      repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/scalar/scalardb-server"
      tag: "3.7.0"
      imagePullSecrets:
      - name: "reg-ecr-mp-secrets"
      databaseProperties: |
      scalar.db.storage=jdbc
      scalar.db.contact_points=jdbc:postgresql://postgresql-scalardb.default.svc.cluster.local:5432/postgres
      scalar.db.username={{ default .Env.SCALAR_DB_POSTGRES_USERNAME "" }}
      scalar.db.password={{ default .Env.SCALAR_DB_POSTGRES_PASSWORD "" }}
      secretName: "scalardb-credentials-secret"
      EOF
    • Azure Marketplace

      cat << 'EOF' > scalardb-custom-values.yaml
      envoy:
      image:
      repository: "<your private container registry>/scalarinc/scalardb-envoy"
      version: "1.3.0"
      imagePullSecrets:
      - name: "reg-acr-secrets"

      scalardb:
      image:
      repository: "<your private container registry>/scalarinc/scalardb-server"
      tag: "3.7.0"
      imagePullSecrets:
      - name: "reg-acr-secrets"
      databaseProperties: |
      scalar.db.storage=jdbc
      scalar.db.contact_points=jdbc:postgresql://postgresql-scalardb.default.svc.cluster.local:5432/postgres
      scalar.db.username={{ default .Env.SCALAR_DB_POSTGRES_USERNAME "" }}
      scalar.db.password={{ default .Env.SCALAR_DB_POSTGRES_PASSWORD "" }}
      secretName: "scalardb-credentials-secret"
      EOF
  4. PostgreSQL のユーザー名とパスワードを含む Secret リソースを作成します。

    kubectl create secret generic scalardb-credentials-secret \
    --from-literal=SCALAR_DB_POSTGRES_USERNAME=postgres \
    --from-literal=SCALAR_DB_POSTGRES_PASSWORD=postgres
  5. ScalarDB Server をデプロイします。

    helm install scalardb scalar-labs/scalardb -f ./scalardb-custom-values.yaml
  6. ScalarDB Server ポッドがデプロイされているかどうかを確認します。

    kubectl get pod

    【コマンド実行結果】

    NAME                              READY   STATUS    RESTARTS   AGE
    postgresql-scalardb-0 1/1 Running 0 9m48s
    scalardb-765598848b-75csp 1/1 Running 0 6s
    scalardb-765598848b-w864f 1/1 Running 0 6s
    scalardb-765598848b-x8rqj 1/1 Running 0 6s
    scalardb-envoy-84c475f77b-kpz2p 1/1 Running 0 6s
    scalardb-envoy-84c475f77b-n74tk 1/1 Running 0 6s
    scalardb-envoy-84c475f77b-zbrwz 1/1 Running 0 6s

    ScalarDB Server ポッドが適切にデプロイされている場合、STATUS が Running であることがわかります。

  7. ScalarDB Server サービスがデプロイされているかどうかを確認します。

    kubectl get svc

    【コマンド実行結果】

    NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
    kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 47d
    postgresql-scalardb ClusterIP 10.109.118.122 <none> 5432/TCP 10m
    postgresql-scalardb-hl ClusterIP None <none> 5432/TCP 10m
    scalardb-envoy ClusterIP 10.110.110.250 <none> 60051/TCP 41s
    scalardb-envoy-metrics ClusterIP 10.107.98.227 <none> 9001/TCP 41s
    scalardb-headless ClusterIP None <none> 60051/TCP 41s
    scalardb-metrics ClusterIP 10.108.188.10 <none> 8080/TCP 41s

    ScalarDB Server サービスが適切にデプロイされている場合は、CLUSTER-IP 列にプライベート IP アドレスが表示されます。(注記: scalardb-headless には CLUSTER-IP がありません。)

ステップ4. クライアントコンテナを開始する

  1. Kubernetes クラスター上でクライアントコンテナーを起動します。

    kubectl run scalardb-client --image eclipse-temurin:8-jdk --command sleep inf
  2. クライアントコンテナが実行されているかどうかを確認します。

    kubectl get pod scalardb-client

    【コマンド実行結果】

    NAME              READY   STATUS    RESTARTS   AGE
    scalardb-client 1/1 Running 0 23s

ステップ5. クライアントコンテナで ScalarDB サンプルアプリケーションを実行する

以下に最低限の手順を説明します。ScalarDB についてさらに詳しく知りたい場合は、Getting Started with ScalarDB を参照してください。

  1. クライアントコンテナで bash を実行します。

    kubectl exec -it scalardb-client -- bash

    この手順の後、クライアントコンテナで各コマンドを実行します。

  2. git およびcurl コマンドをクライアントコンテナにインストールします。

    apt update && apt install -y git curl
  3. ScalarDB git リポジトリのクローンを作成します。

    git clone https://github.com/scalar-labs/scalardb.git
  4. ディレクトリを scalardb/ に変更します。

    cd scalardb/
    pwd

    【コマンド実行結果】

    /scalardb
  5. ブランチを任意のバージョンに変更します。

    git checkout -b v3.7.0 refs/tags/v3.7.0
    git branch

    【コマンド実行結果】

      master
    * v3.7.0

    別のバージョンを使用する場合は、使用するバージョン (タグ) を指定してください。

  6. ディレクトリを docs/getting-started/ に変更します。

    cd docs/getting-started/
    pwd

    【コマンド実行結果】

    /scalardb/docs/getting-started
  7. ScalarDB Releases から Schema Loader をダウンロードします。

    curl -OL https://github.com/scalar-labs/scalardb/releases/download/v3.7.0/scalardb-schema-loader-3.7.0.jar

    同じバージョンの ScalarDB と Schema Loader を使用する必要があります。

  8. Kubernetes クラスター上の ScalarDB Server にアクセスするための構成ファイル (scalardb.properties) を作成します。

    cat << 'EOF' > scalardb.properties
    scalar.db.contact_points=scalardb-envoy.default.svc.cluster.local
    scalar.db.contact_port=60051
    scalar.db.storage=grpc
    scalar.db.transaction_manager=grpc
    EOF
  9. サンプルアプリケーションの DB スキーマを定義する JSON ファイル (emoney-transaction.json) を作成します。

    cat << 'EOF' > emoney-transaction.json
    {
    "emoney.account": {
    "transaction": true,
    "partition-key": [
    "id"
    ],
    "clustering-key": [],
    "columns": {
    "id": "TEXT",
    "balance": "INT"
    }
    }
    }
    EOF
  10. Schema Loader を実行します (サンプル TABLE を作成します)。

    java -jar ./scalardb-schema-loader-3.7.0.jar --config ./scalardb.properties -f emoney-transaction.json --coordinator
  11. サンプルアプリケーションを実行します。

    • 1000user1 に請求します。
      ./gradlew run --args="-action charge -amount 1000 -to user1"
    • merchant10 を請求します (merchant1 のアカウントを作成するだけです):
      ./gradlew run --args="-action charge -amount 0 -to merchant1"
    • user1 から merchant1100 を支払います。
      ./gradlew run --args="-action pay -amount 100 -from user1 -to merchant1"
    • user1 の残高を取得します。
      ./gradlew run --args="-action getBalance -id user1"
    • merchant1 の残高を取得します。
      ./gradlew run --args="-action getBalance -id merchant1"
  12. (オプション) 次のコマンドを使用して、サンプルアプリケーションを通じて挿入および変更された (INSERT/UPDATE) データを確認できます。(このコマンドは、クライアントコンテナではなくローカルホストで実行する必要があります。)

    kubectl exec -it postgresql-scalardb-0 -- bash -c 'export PGPASSWORD=postgres && psql -U postgres -d postgres -c "SELECT * FROM emoney.account"'

    【コマンド実行結果】

        id     | balance |                tx_id                 | tx_state | tx_version | tx_prepared_at | tx_committed_at |             before_tx_id             | before_tx_state | before_tx_version | before_tx_prepared_at | before_tx_committed_at | before_balance
    -----------+---------+--------------------------------------+----------+------------+----------------+-----------------+--------------------------------------+-----------------+-------------------+-----------------------+------------------------+----------------
    merchant1 | 100 | 65a90225-0846-4e97-b729-151f76f6ca2f | 3 | 2 | 1667361909634 |1667361909679 | 3633df99-a8ed-4301-a8b9-db1344807d7b | 3 | 1 | 1667361902466 | 1667361902485 | 0
    user1 | 900 | 65a90225-0846-4e97-b729-151f76f6ca2f | 3 | 2 | 1667361909634 |1667361909679 | 5520cba4-625a-4886-b81f-6089bf846d18 | 3 | 1 | 1667361897283 | 1667361897317 | 1000
    (2 rows)
    • 注記:
      • 通常はScalarDB経由でデータ (レコード) にアクセスする必要があります。上記のコマンドはサンプルアプリケーションの動作を説明、確認するために使用します。

ステップ6. すべてのリソースを削除する

Kubernetes クラスター上で ScalarDB Server テストが完了したら、すべてのリソースを削除します。

  1. ScalarDB Server と PostgreSQL をアンインストールします。

    helm uninstall scalardb postgresql-scalardb
  2. クライアントコンテナを削除します。

    kubectl delete pod scalardb-client --force --grace-period 0

参考文献

Scalar 製品の監視またはログ記録を開始する方法については、次のドキュメントで説明しています。