高可用性外部データベース
このセクションでは、外部データベースを使用した高可用性K3sクラスターのインストール方法について説明します。
大規模なHAクラスターを迅速にデプロイするには、関連プロジェクトを参照してください。
単一サーバークラスターはさまざまなユースケースに対応できますが、Kubernetesコントロールプレーンの稼働時間が重要な環境では、K3sをHA構成で実行できます。HA K3sクラスターは以下で構成されます:
- Kubernetes APIを提供し、他のコントロールプレーンサービスを実行するサーバーノードが2つ以上
- (単一サーバーセットアップで使用される埋め込みSQLiteデータストアとは対照的に)外部データストア
- オプション:アプリケーションやサービスを実行するために指定されたエージェントノードが0個以上
- オプション:エージェントノードがクラスターに登録するための固定登録アドレス
これらのコンポーネントがどのように連携するかの詳細については、アーキテクチャセクションを参照してください。
インストール概要
HAクラスターのセットアップには以下の手順が必要です:
1. 外部データストアの作成
まず、クラスター用の外部データストアを作成する必要があります。詳細については、クラスターのデータストアオプションのドキュメントを参照してください。
2. サーバーノードの起動
K3sのHA構成には2つ以上のサーバーノードが必要です。最小マシン要件については、要件ガイドを参照してください。
これらのノードでk3s server
コマンドを実行する際、K3sが外部データストアに接続する方法を知るためにdatastore-endpoint
パラメータを設定する必要があります。ノードを追加する際に決定的なトークンを設定するためにtoken
パラメータも使用できます。空の場合、このトークンは自動的に生成され、後で使用されます。
例えば、以下のようなコマンドを使用して、MySQLデータベースを外部データストアとしてK3sサーバーをインストールし、トークンを設定できます:
curl -sfL https://get.k3s.io | sh -s - server \
--token=SECRET \
--datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"
--tls-san=<FIXED_IP> # オプション、固定登録アドレスを使用する場合に必要
データストアエンドポイントの形式はデータベースの種類によって異なります。詳細については、データストアエンドポイントの形式のセクションを参照してください。
サーバーノードを起動する際のTLS証明書の設定については、データストア設定ガイドを参照してください。
単一サーバーインストールで利用可能なインストールオプションは、高可用性インストールでも利用可能です。詳細については、設定オプションのドキュメントを参照してください。
デフォルトでは、サーバーノードはスケジュール可能であり、ワークロードが起動される可能性があります。ユーザーワークロードが実行されない専用のコントロールプレーンを持ちたい場合は、テイントを使用できます。node-taint
パラメータを使用してノードにテイントを設定できます。例えば、--node-taint CriticalAddonsOnly=true:NoExecute
のように設定します。
すべてのサーバーノードでk3s server
プロセスを起動したら、k3s kubectl get nodes
を使用してクラスターが正常に起動していることを確認してください。サーバーノードがReady状態で表示されるはずです。
3. オプション:追加のサーバーノードの参加
ステップ2の同じコマンドを使用して追加のサーバーノードを参加させることができます。この場合、最初のノードのトークンを使用する必要があります。
最初のサーバーノードが--token
CLIフラグまたはK3S_TOKEN
変数なしで起動された場合、クラスターに既に参加している任意のサーバーからトークン値を取得できます:
cat /var/lib/rancher/k3s/server/token
追加のサーバーノードはトークンを使用して追加できます:
curl -sfL https://get.k3s.io | sh -s - server \
--token=SECRET \
--datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"
すべてのサーバーノードで同じでなければならないいく つかの設定フラグがあります:
- ネットワーク関連のフラグ:
--cluster-dns
、--cluster-domain
、--cluster-cidr
、--service-cidr
- 特定のコンポーネントのデプロイを制御するフラグ:
--disable-helm-controller
、--disable-kube-proxy
、--disable-network-policy
および--disable
に渡される任意のコンポーネント - 機能関連のフラグ:
--secrets-encryption
このトークンのコピーを保持しておくことを確認してください。バックアップからの復元やノードの追加時に必要です。以前は、外部SQLデータストアを使用する際にトークンの使用が強制されていませんでした。