高可用性外部データベース
このセクションでは、外部データベースを使用した高可用性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データストアを使用する際にトークンの使用が強制されていませんでした。 |
4. オプション:固定登録アドレスの設定
エージェントノードは登録するためのURLが必要です。これは任意のサーバーノードのIPまたはホスト名で構いませんが、多くの場合、それらは時間とともに変わる可能性があります。例えば、スケーリンググループをサポートするクラウドでクラスターを実行している場合、ノードは時間とともに作成および破棄され、最初のサーバーノードセットから異なるIPに変更される可能性があります。時間とともに変わらない安定したエンドポイントをサーバーノードの前に設定するのが最善です。このエンドポイントは、以下のような方法で設定できます:
-
レイヤー4(TCP)ロードバランサー
-
ラウンドロビンDNS
-
仮想またはエラスティックIPアドレス
例としての設定については、クラスターのロードバランサーを参照してください。
このエンドポイントはKubernetes APIにアクセスするためにも使用できます。例えば、https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/[kubeconfig]ファイルを特定のノードではなくこのエンドポイントを指すように変更できます。
このような構成で証明書エラーを回避するために、サーバーを--tls-san YOUR_IP_OR_HOSTNAME_HERE
オプションで設定する必要があります。このオプションはTLS証明書のSubject Alternative Nameに追加のホスト名またはIPを追加し、IPとホスト名の両方でアクセスしたい場合は複数回指定できます。
5. オプション:エージェントノードの参加
K3sサーバーノードはデフォルトでスケジュール可能であるため、HA K3sクラスターにはエージェントノードは必須ではありません。ただし、アプリケーションやサービスを実行するための専用のエージェントノードを持ちたい場合があります。
HAクラスターにエージェントノードを参加させる方法は、単一サーバークラスターにエージェントノードを参加させる方法と同じです。エージェントが登録するURL(サーバーIPのいずれかまたは固定登録アドレス)と使用するトークンを指定するだけです。
K3S_TOKEN=SECRET k3s agent --server https://server-or-fixed-registration-address:6443