[非推奨] 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 を購読する必要があります。 詳細については、以下のドキュメントを参照してください。
- How to install Scalar products through AWS Marketplace
- How to install Scalar products through Azure Marketplace
私たちが作るもの
次のように、次のコンポーネントを 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 をデプロイできます。
-
Bitnami Helm リポジトリを追加します。
helm repo add bitnami https://charts.bitnami.com/bitnami
-
PostgreSQLをデプロイします。
helm install postgresql-scalardb bitnami/postgresql \
--set auth.postgresPassword=postgres \
--set primary.persistence.enabled=false -
PostgreSQL コンテナが実行されているかどうかを確認します。
kubectl get pod
【コマンド実行結果】
NAME READY STATUS RESTARTS AGE
postgresql-scalardb-0 1/1 Running 0 2m42s
ステップ 3. Helm Charts を使用して Kubernetes クラスターに ScalarDB Server をデプロイする
-
Scalar helm リポジトリを追加します。
helm repo add scalar-labs https://scalar-labs.github.io/helm-charts
-
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>
詳細については、以下のドキュメントを参照してください。
- AWS Marketplace
-
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
-
-
PostgreSQL のユーザー名とパスワードを含む Secret リソースを作成します。
kubectl create secret generic scalardb-credentials-secret \
--from-literal=SCALAR_DB_POSTGRES_USERNAME=postgres \
--from-literal=SCALAR_DB_POSTGRES_PASSWORD=postgres -
ScalarDB Server をデプロイします。
helm install scalardb scalar-labs/scalardb -f ./scalardb-custom-values.yaml
-
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 6sScalarDB Server ポッドが適切にデプロイされている場合、STATUS が Running であることがわかります。
-
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 41sScalarDB Server サービスが適切にデプロイされている場合は、CLUSTER-IP 列にプライベート IP アドレスが表示されます。 (注記:
scalardb-headless
には CLUSTER-IP がありません。)
ステップ 4. クライアントコンテナを開始する
-
Kubernetes クラスター上でクライアント コンテナーを起動します。
kubectl run scalardb-client --image eclipse-temurin:8 --command sleep inf
-
クライアントコンテナが実行されているかどうかを確認します。
kubectl get pod scalardb-client
【コマンド実行結果】
NAME READY STATUS RESTARTS AGE
scalardb-client 1/1 Running 0 23s
ステップ 5. クライアント コンテナで ScalarDB サンプル アプリケーションを実行する
以下に最低限の手順を説明します。 ScalarDB についてさらに詳しく知りたい場合は、Getting Started with ScalarDB を参照してください。
-
クライアントコンテナで bash を実行します。
kubectl exec -it scalardb-client -- bash
この手順の後、クライアント コンテナで各コマンドを実行します。
-
git およびcurl コマンドをクライアント コンテナにインストールします。
apt update && apt install -y git curl
-
ScalarDB git リポジトリのクローンを作成します。
git clone https://github.com/scalar-labs/scalardb.git
-
ディレクトリを
scalardb/
に変更します。cd scalardb/
pwd
【コマンド実行結果】
/scalardb
-
ブランチを任意のバージョンに変更します。
git checkout -b v3.7.0 refs/tags/v3.7.0
git branch
【コマンド実行結果】
master
* v3.7.0別のバージョンを使用する場合は、使用するバージョン(タグ)を指定してください。
-
ディレクトリを
docs/getting-started/
に変更します。cd docs/getting-started/
pwd
【コマンド実行結果】
/scalardb/docs/getting-started
-
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 を使用する必要があります。
-
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 -
サンプル アプリケーションの 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 -
Schema Loader を実行します (サンプル TABLE を作成します)。
java -jar ./scalardb-schema-loader-3.7.0.jar --config ./scalardb.properties -f emoney-transaction.json --coordinator
-
サンプル アプリケーションを実行します。
1000
をuser1
に請求します。./gradlew run --args="-action charge -amount 1000 -to user1"
merchant1
に0
を請求します (merchant1
のアカウントを作成するだけです):./gradlew run --args="-action charge -amount 0 -to merchant1"
user1
からmerchant1
に100
を支払います。./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"
-
(オプション) 次のコマンドを使用して、サンプル アプリケーションを通じて挿入および変更された (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 テストが完了したら、すべてのリソースを削除します。
-
ScalarDB Server と PostgreSQL をアンインストールします。
helm uninstall scalardb postgresql-scalardb
-
クライアントコンテナを削除します。
kubectl delete pod scalardb-client --force --grace-period 0
参考文献
Scalar 製品の監視またはログ記録を開始する方法については、次のドキュメントで説明しています。