外部データストア

外部データストアを使用することは、Kubernetesクラスターの外部に存在するデータベースを活用することを意味します。Kubernetesは、クラスター内に含まれるのではなく、ネットワークを介して外部データストアにアクセスします。このアプローチは、既存のデータベースインフラストラクチャを持つ組織や、MySQLやPostgreSQLのようなエンタープライズグレードのSQLデータベースを運用する経験が豊富な組織にとって一般的である可能性があります。プロジェクト kineはSQLデータベース用に使用されます。外部データストアの代替は組み込みデータストアです。

データストアオプション

  • 外部データベース

    • etcd(バージョン3.5.4に対して認証済み)

    • MySQL(バージョン5.7および8.0に対して認証済み)

    • MariaDB(バージョン10.6.8に対して認証済み)

    • PostgreSQL(バージョン12.16、13.12、14.9および15.4に対して認証済み)

プリペアドステートメントサポート

RKE2はDBからプリペアドステートメントのサポートを必要とします。これは、 PgBouncerのような接続プーラーがRKE2と連携するために追加の設定を必要とする可能性があることを意味します。

外部データストア構成パラメータ

PostgreSQL、MySQL、またはetcdのような外部データストアを使用する場合は、RKE2が接続方法を知るために`datastore-endpoint`設定を行う必要があります。接続の認証と暗号化を構成するためのパラメータを指定することもできます。以下の表はこれらのオプションを要約しています。

オプション 環境変数 説明

datastore-endpoint

RKE2_DATASTORE_ENDPOINT

PostgreSQL、MySQL、またはetcdの接続文字列を指定します。これは、データストアへの接続を説明するために使用される文字列です。この文字列の構造は各バックエンドに特有であり、以下に詳細が記載されています。

datastore-cafile

RKE2_DATASTORE_CAFILE

データストアとの通信を保護するために使用されるTLS証明書機関(CA)ファイル。データストアがカスタム証明書機関によって署名された証明書を使用してTLS経由でリクエストを処理する場合、RKE2クライアントが証明書を適切に検証できるように、このパラメータを使用してそのCAを指定できます。

datastore-certfile

RKE2_DATASTORE_CERTFILE

データストアへのクライアント証明書ベースの認証に使用されるTLS証明書ファイル。この機能を使用するには、データストアがクライアント証明書ベースの認証をサポートするように構成されている必要があります。このパラメータを指定する場合は、`datastore-keyfile`パラメータも指定する必要があります。

datastore-keyfile

RKE2_DATASTORE_KEYFILE

データストアへのクライアント証明書ベースの認証に使用されるTLSキーファイル。詳細については、前の`datastore-certfile`パラメータを参照してください。

データストアエンドポイントの形式と機能

前述のように、`datastore-endpoint`パラメータに渡される値の形式は、データストアのバックエンドに依存します。以下は、各サポートされている外部データストアの形式と機能の詳細です。

  • PostgreSQL

  • MySQL / MariaDB

  • etcd

PostgreSQLの典型的な`datastore-endpoint`オプションは次の形式を持っています:

postgres://username:password@hostname:port/database-name

より高度な設定パラメータが利用可能です。これらの詳細については、 https://godoc.org/github.com/lib/pq.を参照してください。

データベース名を指定し、それが存在しない場合、サーバーはそれを作成しようとします。

エンドポイントとして`postgres://`のみを指定した場合、RKE2は次のことを試みます:

  • ユーザー名とパスワードとして`postgres`を使用してlocalhostに接続します。

  • `kubernetes`という名前のデータベースを作成します。

MySQLおよびMariaDBの典型的な`datastore-endpoint`オプションは、次の形式を持っています:

mysql://username:password@tcp(hostname:3306)/database-name

より高度な設定パラメータが利用可能です。詳細については、 https://github.com/go-sql-driver/mysql#dsn-data-source-name.を参照してください。

データベース名を指定し、それが存在しない場合、サーバーはそれを作成しようとします。

エンドポイントとして`mysql://`のみを指定した場合、RKE2は次のことを試みます:

  • ユーザー`root`を使用して`/var/run/mysqld/mysqld.sock`のMySQLソケットに接続し、パスワードは使用しません。

  • `kubernetes`という名前のデータベースを作成します。

etcdの典型的な`datastore-endpoint`オプションは、次の形式を持っています:

https://etcd-host-1:2379,https://etcd-host-2:2379,https://etcd-host-3:2379

上記は、典型的な三ノードのetcdクラスターを前提としています。このパラメータは、カンマ区切りのetcd URLを受け入れます。

外部データベース

1.外部データストアを作成する

まず、クラスター用の外部データストアを作成する必要があります。詳細については、[Datastore Options]セクションを参照してください。

2.サーバーノードを起動する

RKE2は、このHA構成に2つ以上のサーバーノードを必要とします。最小マシン要件については、要件ガイドを参照してください。

これらのノードで`systemctl start rke2-server`を使用して`rke2-server`サービスを起動する際には、RKE2が外部データストアに接続する方法を知るために、設定で`datastore-endpoint`オプションを設定する必要があります。`token`オプションは、ノードを追加する際に決定論的トークンを設定するためにも使用できます。空の場合、このトークンは自動的に生成され、今後使用されます。

例えば、次のような`config.yaml`を使用して、外部データストアとしてMySQLデータベースを持つRKE2を構成し、トークンを設定することができます:

RKE2の設定ファイルは手動で作成する必要があります。特権ユーザーとしてtouch /etc/rancher/rke2/config.yamlを実行することで、それを行うことができます。

datastore-endpoint: "mysql://username:password@tcp(hostname:3306)/database-name"
token: SECRET

データストアエンドポイントの形式は、データベースの種類に基づいて異なります。詳細については、データストアエンドポイント形式に関するセクションを参照してください。

サーバーノードを起動する際にTLS証明書を構成するには、データストア構成セクションを参照してください。

デフォルトでは、サーバーノードはスケジュール可能であり、そのためワークロードを起動できます。ユーザーのワークロードが実行されない専用のコントロールプレーンを持ちたい場合は、テイントを使用できます。

すべてのサーバーノードで`rke2-server`プロセスを開始したら、クラスターが正しく立ち上がったことを`kubectl get nodes`で確認してください。サーバーノードが`Ready`状態にあることが確認できるはずです。

3.オプション:追加のサーバーノードを参加させる

ステップ2で指定された同じ例の設定を使用して、追加のサーバーノードに参加でき、最初のノードからの同じトークンを設定に追加する必要があります。

最初のサーバーノードが`token`オプションなしで起動された場合、トークン値はすでにクラスターに参加している任意のサーバーから取得できます:

cat /var/lib/rancher/rke2/server/token

次に、設定に`server`アドレスを追加し、`rke2-server`プロセスを`systemctl start rke2-server`で起動することで、追加のサーバーに参加できます。

server: https://you-first-server-node-address:9345
datastore-endpoint: "mysql://username:password@tcp(hostname:3306)/database-name"
token: SECRET

すべてのサーバーノードで同じでなければならないいくつかの構成フラグがあります:

  • ネットワーク関連のフラグ:cluster-dnscluster-domaincluster-cidrservice-cidr

  • 特定のコンポーネントのデプロイメントの制御用フラグ:`disable-helm-controller`および`disable`に渡される任意のコンポーネント

  • 機能に関連するフラグ:secrets-encryption

このトークンのコピーを保持することを確認してください。バックアップから復元し、ノードを追加する際に必要です。

4.オプション:エージェントノードに参加する

RKE2サーバーノードはデフォルトでスケジュール可能であるため、RKE2クラスターにはエージェントノードは必要ありません。ただし、アプリやサービスを実行するために専用のエージェントノードを用意することもできます。

エージェントが登録すべきURL(サーバーのIPのいずれかまたは固定の登録アドレス)と、`config`ファイルで使用すべきトークンを指定するだけで済みます。

server: https://you-first-server-node-address:9345
token: SECRET

次に、エージェントをインストールできます:

curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -