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つのフィールドを含む必要があります:username と password。
-
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ファイルの名前
-
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の名前。
デプロイ後、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の名前。
- 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認証を有効にするワークフローは以下の通りです:
-
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ドキュメントを参照してください。