メインコンテンツまでスキップ

Config クラスター

分離されたcompute-storageクラスターでは、様々なコンポーネントのノードを管理するために管理システムが使用する認証情報など、特定の設定がクラスターレベルで適用されます。

管理ユーザー名とパスワードの設定

Dorisノードを管理するには、MySQLプロトコルを介してユーザー名とパスワードを使用して稼働中のFrontend (FE)ノードに接続する必要があります。Dorisはロールベースアクセス制御(RBAC)のような認可メカニズムを実装しており、ノード管理操作にはNode_priv権限を持つユーザーアカウントが必要です。

デフォルトでは、Doris OperatorはDorisDisaggregatedClusterリソースで定義されたクラスターのデプロイと管理に、完全な権限を持ちパスワードが設定されていないrootユーザーを使用します。rootアカウントにパスワードが設定されると、Doris Operatorが自動管理タスクを継続して実行できるように、DorisDisaggregatedClusterリソースでNode_privを持つユーザー名とパスワードを明示的に設定する必要があります。

パスワード設定方法に関係なく、以下の点にご注意ください:

  • rootやadminなどの既存ユーザーのパスワードは、いかなる場合でもoperatorによって自動的に変更されることはありません。ユーザーが手動で設定または変更する必要があります。
  • operatorの管理ユーザーとしてadminユーザーを使用することは強く推奨されません。adminユーザーは通常、クラスターメンテナンスではなく、最高レベルのデータベース読み書き権限を持つユーザーとして使用されます。adminユーザーにはoperatorの特定の機能に対する特定の権限がありません。
  • rootでないユーザーは、その目的のためだけに使用し、他の用途に使用すべきではありません。これは、パスワード変更がoperatorと同期に失敗したり、権限が失われて運用障害につながることを避けるためです。

DorisDisaggregatedClusterリソースは、クラスターノードの管理に必要な認証情報を設定する2つの方法をサポートしています:環境変数の使用、またはKubernetes Secretの使用。デプロイメントシナリオに応じて、管理認証情報は以下の方法で設定できます:

  • クラスターデプロイメント中にrootユーザーのパスワードを初期化

  • パスワードなしのrootデプロイメントで管理権限を持つroot以外のユーザーを自動作成

  • パスワードなしのrootモードを使用してクラスターがデプロイされた後にrootユーザーにパスワードを割り当て

クラスターデプロイメント中のrootユーザーパスワードの設定

Dorisはfe.confファイル内でrootユーザーパスワードを暗号化形式で指定することをサポートしています。初期デプロイメント中にDoris Operatorがクラスターノードを自動的に管理できるようにするには、以下の手順に従ってrootパスワードを設定してください。

ステップ1:暗号化されたrootパスワードの生成

Dorisでは、暗号化形式を使用してFE設定ファイルでrootユーザーパスワードを設定できます。パスワードは2段階のSHA-1ハッシュアルゴリズムを使用して暗号化されます。以下はこの暗号化を実行する方法を示すコード例です:

Java実装:

import org.apache.commons.codec.digest.DigestUtils;

public static void main(String[] args) {
// Original password
String a = "123456";
String b = DigestUtils.sha1Hex(DigestUtils.sha1(a.getBytes())).toUpperCase();
// Output the two-stage encrypted password
System.out.println("*" + b);
}

Golang実装:

import (
"crypto/sha1"
"encoding/hex"
"fmt"
"strings"
)

func main() {
// Original password
plan := "123456"

// First stage encryption
h := sha1.New()
h.Write([]byte(plan))
eb := h.Sum(nil)

// Second stage encryption
h.Reset()
h.Write(eb)
teb := h.Sum(nil)
dst := hex.EncodeToString(teb)
tes := strings.ToUpper(fmt.Sprintf("%s", dst))

// Output the two-stage encrypted password
fmt.Println("*" + tes)
}

結果の暗号化されたパスワードを必要に応じて fe.conf ファイルに追加します。その後、FE startup configuration section の手順に従って、ConfigMap を使用して設定ファイルを Kubernetes クラスターに配信します。

ステップ 2: DorisDisaggregatedCluster リソースの定義

初期パスワードが fe.conf ファイルに設定されると、最初の Doris FE ノードが開始されるときに root パスワードが即座に有効になります。追加のノードがクラスターに参加する際、Doris Operator は root 認証情報を使用してこれらのノードを管理し追加します。そのため、DorisDisaggregatedCluster リソースに root ユーザー名とパスワードを提供する必要があります。

オプション 1: 環境変数の使用
DorisDisaggregatedCluster リソースの .spec.adminUser.name および .spec.adminUser.password フィールドに root 認証情報を指定します。Doris Operator はこれらの値を自動的にコンテナ環境変数に変換します。コンテナ内の補助サービスは、これらの環境変数を使用してノードをクラスターに追加します。 設定例:

spec:
adminUser:
name: root
password: ${password}

ここで、${password} は root ユーザーの平文(暗号化されていない)パスワードである必要があります。

オプション 2: Secret の使用
Doris Operator は Basic Authentication Secret を使用して root のユーザー名とパスワードを提供することもサポートしています。Doris Operator はこの Secret をファイルとしてコンテナにマウントし、補助サービスがそれを解析して認証情報を取得し、クラスターにノードを自動的に追加するために使用します。

Secret は正確に2つのフィールドを含む必要があります:usernamepassword

  1. Secret の定義
    以下の形式で Basic Authentication Secret を作成します:

    stringData:
    username: root
    password: ${password}

${password} は root ユーザーのプレーンテキストパスワードです。 以下のコマンドを使用して Secret を Kubernetes クラスターにデプロイします:

```yaml
kubectl -n ${namespace} apply -f ${secretFileName}.yaml
```

${namespace}: DorisDisaggregatedClusterがデプロイされるターゲットのnamespace
${secretFileName}: Secret定義を含むYAMLファイルの名前

  1. DorisDisaggregatedClusterリソースの設定
    spec.authSecretフィールドを使用して、DorisDisaggregatedClusterリソース内でSecretを参照します:

    spec:
    authSecret: ${secretName}

ここで、${secretName} は root ユーザーの資格情報を含む Kubernetes Secret の名前です。

デプロイメント時の非 root 管理ユーザーとパスワードの自動作成(推奨)

初回デプロイメント時に root ユーザーの初期パスワードを設定しない場合、環境変数または Kubernetes Secret を使用して非 root 管理ユーザーとそのパスワードを設定できます。コンテナ内の Doris の補助サービスが Doris 内にこのユーザーを自動的に作成し、指定されたパスワードを割り当て、Node_priv 権限を付与します。その後、Doris Operator はこの自動作成されたユーザーアカウントを使用してクラスターノードを管理します。

オプション 1: 環境変数の使用

以下のように DorisDisaggregatedCluster リソースを定義します:

spec:
adminUser:
name: ${DB_ADMIN_USER}
password: ${DB_ADMIN_PASSWD}

${DB_ADMIN_USER}: 管理者権限を持つ新しい非rootユーザーの名前。${DB_ADMIN_PASSWD}: 新しいユーザーに割り当てるパスワード。

オプション2: Secretを使用する

a. 必要なSecretを作成する
次の形式を使用してBasic Authentication Secretを定義します:

stringData:
username: ${DB_ADMIN_USER}
password: ${DB_ADMIN_PASSWD}

${DB_ADMIN_USER}: 新しい管理ユーザーのユーザー名。${DB_ADMIN_PASSWD}: 新しいユーザーに割り当てるパスワード。 次を使用してKubernetesクラスターにSecretをデプロイします:

kubectl -n ${namespace} apply -f ${secretFileName}.yaml

${namespace}: DorisDisaggregatedClusterリソースがデプロイされる名前空間。${secretFileName}: Secretを定義するYAMLファイルの名前。

b. DorisDisaggregatedClusterリソースを更新する
DorisDisaggregatedClusterリソースでSecretを指定します:

spec:
authSecret: ${secretName}

${secretName}: 非root管理ユーザーの資格情報を含むSecretの名前。

Note

デプロイ後、rootユーザーのパスワードを設定することを推奨します。これが完了すると、Doris Operatorは新しい非rootユーザーを使用してクラスターノードの管理に切り替わります。このユーザーが作成された後は削除しないでください。

クラスターデプロイ後のRootユーザーパスワード設定

初期デプロイ時にrootユーザーパスワードが設定されていない場合、Doris Operatorがクラスターノードを自動的に管理し続けるために、Node_priv権限を持つユーザーを提供する必要があります。この目的でrootユーザーを使用することは推奨されません。代わりに、ユーザー作成と権限割り当てドキュメントを参照して新しいユーザーを作成し、必要な権限を割り当ててください。ユーザー作成後、環境変数またはKubernetes Secretを使用して資格情報を設定し、それに応じてDorisDisaggregatedClusterリソースを更新してください。

ステップ1: Node_priv権限を持つユーザーの作成

MySQLプロトコルを使用してデータベースに接続し、以下のSQLコマンドを実行して新しいユーザーを作成しパスワードを割り当てます:

CREATE USER '${DB_ADMIN_USER}' IDENTIFIED BY '${DB_ADMIN_PASSWD}';

${DB_ADMIN_USER}: 作成するユーザーの名前。${DB_ADMIN_PASSWD}: 新しいユーザーのパスワード。

ステップ2: ユーザーにNode_priv権限を付与する

MySQLプロトコル経由で接続したまま、以下のコマンドを実行してNode_priv権限を付与します:

GRANT NODE_PRIV ON *.*.* TO ${DB_ADMIN_USER};

詳細なユーザー作成と権限割り当てについては、公式のCREATE USER documentationを参照してください。

Step 3: DorisDisaggregatedCluster Resourceの更新

  • Option 1: Environment Variablesの使用
    DorisDisaggregatedCluster resourceで新しく作成されたユーザーとパスワードを指定します:

    spec:
    adminUser:
    name: ${DB_ADMIN_USER}
    password: ${DB_ADMIN_PASSWD}

${DB_ADMIN_USER}: 新しい管理ユーザーの名前。${DB_ADMIN_PASSWD}: 対応するパスワード。

  • オプション2: Secretを使用する
    a. Secretを定義する
    以下の形式でBasic認証Secretを作成します:

    stringData:
    username: ${DB_ADMIN_USER}
    password: ${DB_ADMIN_PASSWD}

以下のコマンドを使用してSecretをKubernetesクラスターにデプロイします:

```shell
kubectl -n ${namespace} apply -f ${secretFileName}.yaml
```

${namespace}: DorisDisaggregatedClusterリソースがデプロイされる名前空間。${secretFileName}: Secret定義ファイルの名前。

b. DorisDisaggregatedClusterリソースの更新
リソース設定でSecretを参照する:

```yaml
spec:
authSecret: ${secretName}
```

${secretName}: ユーザー認証情報を含むSecretの名前。

Note
  • rootパスワードを設定し、ノード管理権限を持つ新しいユーザーを指定した後、Doris Operatorはクラスター内の既存サービスのローリング再起動をトリガーします。

Kerberos認証の使用

Doris Operatorは、バージョン25.5.1以降、Kubernetes上のDoris(バージョン2.1.10、3.0.6以降)に対するKerberos認証をサポートしています。DorisでKerberos認証を有効にするには、krb5.confファイルkeytabファイルの両方が必要です。 Doris Operatorは、ConfigMapリソースを使用してkrb5.confファイルをマウントし、Secretリソースを使用してkeytabファイルをマウントします。Kerberos認証を有効にするワークフローは以下の通りです:

  1. krb5.confファイルを含むConfigMapを作成する:

    kubectl create -n ${namespace} configmap ${name} --from-file=krb5.conf

${namespace} をDorisDisaggregatedClusterがデプロイされているnamespaceに、${name} をConfigMapの希望する名前に置き換えてください。 2. keytabファイルを含むSecretを作成します:

```shell
kubectl create -n ${namespace} secret generic ${name} --from-file=${xxx.keytab}
```

${namespace}をDorisDisaggregatedClusterがデプロイされているnamespaceに、${name}をSecretの希望する名前に置き換えてください。複数のkeytabファイルをマウントする必要がある場合は、kubectl create Secret documentationを参照して、それらを単一のSecretに含めてください。 3. krb5.confを含むConfigMapとkeytabファイルを含むSecretを指定するように、DorisDisaggregatedClusterリソースを設定します:

```yaml
spec:
kerberosInfo:
krb5ConfigMap: ${krb5ConfigMapName}
keytabSecretName: ${keytabSecretName}
keytabPath: ${keytabPath}
```

${krb5ConfigMapName}: krb5.confファイルを含むConfigMapの名前。${keytabSecretName}: keytabファイルを含むSecretの名前。${keytabPath}: Secretがkeytabファイルをマウントするコンテナ内のディレクトリパス。このパスは、カタログ作成時にhadoop.kerberos.keytabで指定するディレクトリと一致する必要があります。カタログ設定の詳細については、Hive Catalog configurationドキュメントを参照してください。