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

Deploy StarRocks with Operator

このトピックでは、StarRocks Operator を使用して Kubernetes クラスター上に StarRocks クラスターを自動的にデプロイおよび管理する方法を紹介します。

仕組み

img

始める前に

Kubernetes クラスターを作成する

クラウド管理の Kubernetes サービスを使用することができます。例えば、Amazon Elastic Kubernetes Service (EKS)Google Kubernetes Engine (GKE) クラスター、または自己管理の Kubernetes クラスターです。

StarRocks Operator をデプロイする

  1. カスタムリソース StarRocksCluster を追加します。

    kubectl apply -f https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/deploy/starrocks.com_starrocksclusters.yaml
  2. StarRocks Operator をデプロイします。デフォルトの設定ファイルまたはカスタム設定ファイルを使用して StarRocks Operator をデプロイすることができます。

    1. デフォルトの設定ファイルを使用して StarRocks Operator をデプロイします。

      kubectl apply -f https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/deploy/operator.yaml

      StarRocks Operator は starrocks 名前空間にデプロイされ、すべての名前空間の下のすべての StarRocks クラスターを管理します。

    2. カスタム設定ファイルを使用して StarRocks Operator をデプロイします。

      • StarRocks Operator をデプロイするために使用される設定ファイル operator.yaml をダウンロードします。

        curl -O https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/deploy/operator.yaml
      • 設定ファイル operator.yaml をニーズに合わせて修正します。

      • StarRocks Operator をデプロイします。

        kubectl apply -f operator.yaml
  3. StarRocks Operator の実行状態を確認します。ポッドが Running 状態で、ポッド内のすべてのコンテナが READY であれば、StarRocks Operator は期待通りに動作しています。

    $ kubectl -n starrocks get pods
    NAME READY STATUS RESTARTS AGE
    starrocks-controller-65bb8679-jkbtg 1/1 Running 0 5m6s

NOTE

StarRocks Operator が配置されている名前空間をカスタマイズした場合は、starrocks をカスタマイズした名前空間の名前に置き換える必要があります。

StarRocks クラスターをデプロイする

StarRocks が提供する サンプル設定ファイル を直接使用して、StarRocks クラスター(カスタムリソース StarRocks Cluster を使用してインスタンス化されたオブジェクト)をデプロイできます。例えば、starrocks-fe-and-be.yaml を使用して、3 つの FE ノードと 3 つの BE ノードを含む StarRocks クラスターをデプロイできます。

kubectl apply -f https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/examples/starrocks/starrocks-fe-and-be.yaml

以下の表は、starrocks-fe-and-be.yaml ファイルのいくつかの重要なフィールドを説明しています。

FieldDescription
Kindオブジェクトのリソースタイプです。値は StarRocksCluster でなければなりません。
Metadataメタデータで、以下のサブフィールドがネストされています:
  • name: オブジェクトの名前です。同じリソースタイプのオブジェクトを一意に識別します。
  • namespace: オブジェクトが属する名前空間です。
Specオブジェクトの期待される状態です。有効な値は starRocksFeSpecstarRocksBeSpecstarRocksCnSpec です。

修正された設定ファイルを使用して StarRocks クラスターをデプロイすることもできます。サポートされているフィールドと詳細な説明については、api.md を参照してください。

StarRocks クラスターのデプロイには時間がかかります。この間、kubectl -n starrocks get pods コマンドを使用して StarRocks クラスターの開始状態を確認できます。すべてのポッドが Running 状態で、ポッド内のすべてのコンテナが READY であれば、StarRocks クラスターは期待通りに動作しています。

NOTE

StarRocks クラスターが配置されている名前空間をカスタマイズした場合は、starrocks をカスタマイズした名前空間の名前に置き換える必要があります。

$ kubectl -n starrocks get pods
NAME READY STATUS RESTARTS AGE
starrocks-controller-65bb8679-jkbtg 1/1 Running 0 22h
starrockscluster-sample-be-0 1/1 Running 0 23h
starrockscluster-sample-be-1 1/1 Running 0 23h
starrockscluster-sample-be-2 1/1 Running 0 22h
starrockscluster-sample-fe-0 1/1 Running 0 21h
starrockscluster-sample-fe-1 1/1 Running 0 21h
starrockscluster-sample-fe-2 1/1 Running 0 22h

Note

長時間経過しても一部のポッドが起動しない場合は、kubectl logs -n starrocks <pod_name> を使用してログ情報を確認するか、kubectl -n starrocks describe pod <pod_name> を使用してイベント情報を確認し、問題を特定してください。

StarRocks クラスターを管理する

StarRocks クラスターにアクセスする

StarRocks クラスターのコンポーネントには、FE サービスなどの関連するサービスを通じてアクセスできます。サービスとそのアクセスアドレスの詳細については、api.md および Services を参照してください。

NOTE

  • デフォルトでは FE サービスのみがデプロイされます。BE サービスと CN サービスをデプロイする必要がある場合は、StarRocks クラスター設定ファイルで starRocksBeSpecstarRocksCnSpec を設定する必要があります。
  • サービスの名前はデフォルトで <cluster name>-<component name>-service です。例えば、starrockscluster-sample-fe-service です。各コンポーネントの spec でサービス名を指定することもできます。

Kubernetes クラスター内から StarRocks クラスターにアクセスする

Kubernetes クラスター内からは、FE サービスの ClusterIP を通じて StarRocks クラスターにアクセスできます。

  1. FE サービスの内部仮想 IP アドレス CLUSTER-IP とポート PORT(S) を取得します。

    $ kubectl -n starrocks get svc 
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    be-domain-search ClusterIP None <none> 9050/TCP 23m
    fe-domain-search ClusterIP None <none> 9030/TCP 25m
    starrockscluster-sample-fe-service ClusterIP 10.100.162.xxx <none> 8030/TCP,9020/TCP,9030/TCP,9010/TCP 25m
  2. Kubernetes クラスター内から MySQL クライアントを使用して StarRocks クラスターにアクセスします。

    mysql -h 10.100.162.xxx -P 9030 -uroot

Kubernetes クラスター外から StarRocks クラスターにアクセスする

Kubernetes クラスター外からは、FE サービスの LoadBalancer または NodePort を通じて StarRocks クラスターにアクセスできます。このトピックでは LoadBalancer を例として使用します:

  1. コマンド kubectl -n starrocks edit src starrockscluster-sample を実行して StarRocks クラスター設定ファイルを更新し、starRocksFeSpec のサービスタイプを LoadBalancer に変更します。

    starRocksFeSpec:
    image: starrocks/fe-ubuntu:3.0-latest
    replicas: 3
    requests:
    cpu: 4
    memory: 16Gi
    service:
    type: LoadBalancer # LoadBalancer として指定
  2. FE サービスが外部に公開する IP アドレス EXTERNAL-IP とポート PORT(S) を取得します。

    $ kubectl -n starrocks get svc
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    be-domain-search ClusterIP None <none> 9050/TCP 127m
    fe-domain-search ClusterIP None <none> 9030/TCP 129m
    starrockscluster-sample-fe-service LoadBalancer 10.100.162.xxx a7509284bf3784983a596c6eec7fc212-618xxxxxx.us-west-2.elb.amazonaws.com 8030:30629/TCP,9020:32544/TCP,9030:32244/TCP,9010:32024/TCP 129m ClusterIP None <none> 9030/TCP 23h
  3. マシンホストにログインし、MySQL クライアントを使用して StarRocks クラスターにアクセスします。

    mysql -h a7509284bf3784983a596c6eec7fc212-618xxxxxx.us-west-2.elb.amazonaws.com -P9030 -uroot

StarRocks クラスターをアップグレードする

BE ノードをアップグレードする

次のコマンドを実行して、新しい BE イメージファイルを指定します。例えば、starrocks/be-ubuntu:latest です。

kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksBeSpec":{"image":"starrocks/be-ubuntu:latest"}}}'

FE ノードをアップグレードする

次のコマンドを実行して、新しい FE イメージファイルを指定します。例えば、starrocks/fe-ubuntu:latest です。

kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksFeSpec":{"image":"starrocks/fe-ubuntu:latest"}}}'

アップグレードプロセスには時間がかかります。kubectl -n starrocks get pods コマンドを実行して、アップグレードの進行状況を確認できます。

StarRocks クラスターをスケールする

このトピックでは、BE と FE クラスターのスケールアウトを例として取り上げます。

BE クラスターをスケールアウトする

次のコマンドを実行して、BE クラスターを 9 ノードにスケールアウトします。

kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksBeSpec":{"replicas":9}}}'

FE クラスターをスケールアウトする

次のコマンドを実行して、FE クラスターを 4 ノードにスケールアウトします。

kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksFeSpec":{"replicas":4}}}'

スケーリングプロセスには時間がかかります。kubectl -n starrocks get pods コマンドを使用して、スケーリングの進行状況を確認できます。

CN クラスターの自動スケーリング

コマンド kubectl -n starrocks edit src starrockscluster-sample を実行して、CN クラスターの自動スケーリングポリシーを設定します。CN のリソースメトリクスとして、平均 CPU 使用率、平均メモリ使用量、弾性スケーリングしきい値、上限弾性スケーリング制限、下限弾性スケーリング制限を指定できます。上限弾性スケーリング制限と下限弾性スケーリング制限は、弾性スケーリングに許可される CN の最大数と最小数を指定します。

NOTE

CN クラスターの自動スケーリングポリシーが設定されている場合は、StarRocks クラスター設定ファイルの starRocksCnSpec から replicas フィールドを削除してください。

Kubernetes はまた、behavior を使用してビジネスシナリオに応じたスケーリング動作をカスタマイズし、迅速または遅いスケーリングを実現したり、スケーリングを無効にしたりすることをサポートしています。自動スケーリングポリシーの詳細については、Horizontal Pod Scaling を参照してください。

以下は、StarRocks が提供する自動スケーリングポリシーを設定するためのテンプレートです。

  starRocksCnSpec:
image: starrocks/cn-ubuntu:latest
limits:
cpu: 16
memory: 64Gi
requests:
cpu: 16
memory: 64Gi
autoScalingPolicy: # CN クラスターの自動スケーリングポリシー。
maxReplicas: 10 # CN の最大数を 10 に設定。
minReplicas: 1 # CN の最小数を 1 に設定。
# operator は以下のフィールドに基づいて HPA リソースを作成します。
# 詳細については https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/ を参照してください。
hpaPolicy:
metrics: # リソースメトリクス
- type: Resource
resource:
name: memory # CN の平均メモリ使用量をリソースメトリクスとして指定。
target:
# 弾性スケーリングしきい値は 60%。
# CN の平均メモリ使用率が 60% を超えると、スケールアウトのために CN の数が増加。
# CN の平均メモリ使用率が 60% 未満になると、スケールインのために CN の数が減少。
averageUtilization: 60
type: Utilization
- type: Resource
resource:
name: cpu # CN の平均 CPU 使用率をリソースメトリクスとして指定。
target:
# 弾性スケーリングしきい値は 60%。
# CN の平均 CPU 使用率が 60% を超えると、スケールアウトのために CN の数が増加。
# CN の平均 CPU 使用率が 60% 未満になると、スケールインのために CN の数が減少。
averageUtilization: 60
type: Utilization
behavior: # ビジネスシナリオに応じたスケーリング動作をカスタマイズし、迅速または遅いスケーリングを実現したり、スケーリングを無効にしたりします。
scaleUp:
policies:
- type: Pods
value: 1
periodSeconds: 10
scaleDown:
selectPolicy: Disabled

以下の表は、いくつかの重要なフィールドを説明しています。

  • 上限および下限の弾性スケーリング制限。
maxReplicas: 10 # CN の最大数を 10 に設定。
minReplicas: 1 # CN の最小数を 1 に設定。
  • 弾性スケーリングしきい値。
# 例えば、CN の平均 CPU 使用率をリソースメトリクスとして指定。
# 弾性スケーリングしきい値は 60%。
# CN の平均 CPU 使用率が 60% を超えると、スケールアウトのために CN の数が増加。
# CN の平均 CPU 使用率が 60% 未満になると、スケールインのために CN の数が減少。
- type: Resource
resource:
name: cpu
target:
averageUtilization: 60

FAQ

問題の説明: カスタムリソース StarRocksCluster を kubectl apply -f xxx を使用してインストールすると、The CustomResourceDefinition 'starrocksclusters.starrocks.com' is invalid: metadata.annotations: Too long: must have at most 262144 bytes というエラーが返されます。

原因の分析: kubectl apply -f xxx を使用してリソースを作成または更新するたびに、メタデータアノテーション kubectl.kubernetes.io/last-applied-configuration が追加されます。このメタデータアノテーションは JSON 形式で、last-applied-configuration を記録します。kubectl apply -f xxx はほとんどのケースに適していますが、カスタムリソースの設定ファイルが大きすぎる場合など、まれにメタデータアノテーションのサイズが制限を超えることがあります。

解決策: カスタムリソース StarRocksCluster を初めてインストールする場合は、kubectl create -f xxx を使用することをお勧めします。環境にすでにカスタムリソース StarRocksCluster がインストールされており、その設定を更新する必要がある場合は、kubectl replace -f xxx を使用することをお勧めします。