その他の情報

インストールの詳細

このセクションでは、さまざまなバリアントを含む手順を示し、それらについてもう少し詳しく説明します。また、開発とアップグレードに役立つスタックの一部を段階的に更新できる helm upgrade コマンドも示します。

VM を使用したデフォルトモードで minikube を起動します。デフォルトでは、2 つの CPU を使用しますが、これは調整可能です。

minikube start

カスタマイズされた設定で開始します。

minikube stop
minikube delete
minikube start --memory 8192 --cpus 4

ドライバーによっては、設定の調整はすでに作成された minikube インスタンスで動作する場合があります。

minikube stop
minikube config set memory 8192
minikube config set cpus 4
minikube start

Podman ドライバーを使用して Linux 上で minikube を起動します。これにより、起動時間が短縮され、メモリ使用量が削減され、CPU 使用量の制限がなくなります。

minikube start --driver=kvm2 --container-runtime=cri-o --docker-opt="default-ulimit=nofile=102400:102400"

これには libvirtd の実行が必要です。

sudo systemctl enable libvirtd
sudo systemctl start libvirtd
sudo usermod -a -G libvirt $USER
# now relogin, for usermod to become effective

今日、3〜5 個の Keycloak インスタンスを超えるスケールにならない軽量インストールの場合

minikube start --driver=podman --container-runtime=cri-o

Linux では、sudo 経由で Podman と crio を使用できるようにします

  1. sudo visudo を実行します

  2. sudoer ファイルに以下を追加します

    username ALL=(ALL) NOPASSWD: /usr/bin/podman
    username ALL=(ALL) NOPASSWD: /usr/bin/crictl

Ingress の追加

minikube addons enable ingress

その他すべてのインストールは task を使用してスクリプト化されています。可能な場合は、すべてのタスクを正しい順序で並行して実行します。タスク定義が変更された場合、再度実行します。たとえば、minikube をリセットした後などに、すべてのタスクを強制的に再実行するには、task -f を使用します。

詳細については、ツール task を使用した自動化 を参照してください。

Keycloak のカスタマイズ

Keycloak はモニタリングを有効にしてインストールされています。

keycloak/values.yaml 経由でローカルカスタマイズを追加します

  • モニタリングオプションなしで Keycloak をインストールするには、monitoringfalse に設定します。

  • Keycloak のストアでキャッシュを無効にするには、disableCachestrue に設定します。

一時停止/再開の設定

セットアップは、すべてのポッドを再起動または再インストールせずに、一時停止および再開できます。

停止するには、次のコマンドを実行します

minikube stop

再開するには、次のコマンドを実行します。

minikube start

minikube が再起動された後、Ingress の IP アドレスが異なる場合があります。そのため、すべての Ingress を更新する必要があります。これを行うには、task を実行します。

テスト対象システム (Keycloak) のリセット

これにより、データベースがクリアされ、Keycloak インスタンスが再起動されます。完了すると、Gatling 用のユーザーが再初期化されます。

task reset-keycloak

minikube へのプロバイダーのデプロイ

Keycloak はプロバイダーによって拡張できます。これはこのセットアップでもサポートされています。

すべてのプロバイダー JAR を keycloak/providers に配置する必要があります。

そこにファイルを更新した後、task を実行します。Keycloak が再起動し、プロバイダーが利用可能になります。これは ConfigMap を使用してすべての情報を Kubernetes で利用できるようにするため、base64 としてエンコードされたすべてのプロバイダーの最大合計サイズは 1 MiB です

dataprovider モジュールはデフォルトでデプロイされます。

dataprovider モジュールがデプロイされているかどうかをテストするには、URL https://keycloak-keycloak.xx.xx.xx.xx.nip.io/realms/master/dataset/status をテストします。Keycloak の IP アドレスを調べるには、./isup.sh スクリプトを使用します。

無効な TLS 証明書で kcadm.sh を実行する

minikube セットアップには信頼された TLS 証明書が含まれておらず、証明書もホスト名と一致しません。

Java で TLS チェックを無効にする方法の詳細については、たとえば kcadm.sh を実行する方法の詳細については、モジュール provision/tlsdisableagent を参照してください。

Gatling の実行

ローカルマシンで Gatling を使用してベンチマークを実行し、minikube の Graphite エクスポーターにメトリクスを転送するには、minikube の IP アドレスを環境変数として渡す必要があります。これは gatling.conf 内で使用されます。

export GRAPHITE_TCP_ADDR=$(minikube ip)

メトリック名やラベルなど、Gatling のメトリクスから Prometheus へのマッピングは graphite_mapping.yaml で構成されています。テストが実行されると、メトリクスは gatling_users および gatling_requests として利用可能になります。

このセットアップは、ロードドライバーが 1 つだけ実行されていることを前提としています。より多くのロードドライバーが実行されている場合は、Gatling の構成の rootPathPrefix を変更する必要があり、gatling.conf のセットアップも変更する必要があります。今のところ、1 つの Gatling インスタンスで必要な負荷よりも数桁多い負荷を生成できるため、これは範囲外と見なされます。

Prometheus Gatling エクスポーターは、メトリクスを 5 分間保持してから忘れます。その時までに、Prometheus はすでにそれらをスクレイピングし、値をデータベースに保存しています。

リモートホストで実行されている minikube への接続

リモートホストで minikube を実行する場合、ポートはホストの外部からリモートでアクセスできません。もしアクセスできるとしたら、minikube にデプロイされたアプリケーションや Kubernetes API 自体で使用されるデフォルトのパスワード、またはパスワードが使用されていない場合があるため、セキュリティ上の懸念事項になります。

Keycloak およびその他のサービスにリモートで接続する 1 つの方法は、SSH ポートフォワーディングを使用することです。

Keycloak は構成されたポートと IP アドレスに非常に特化しているため、ポートフォワーディングは minikube 上と同じポートをバインドする必要があります。minikube でポート 443 で実行されているため、ローカルでポート 443 をバインドするには、SSH を root として実行する必要があります。

minikube ip で取得されたリモートホスト上の minikube の IP アドレスが 192.168.39.19 であると仮定すると、次の手順が有効です。

リモートホスト上の minikube インスタンスが再作成されるたびに、異なる IP アドレスが割り当てられ、コマンドを調整する必要があります。

  1. minikube のホスト名を指すエントリをローカルの hosts ファイルに追加します

    127.0.0.1 kubebox.192.168.39.19.nip.io grafana.192.168.39.19.nip.io keycloak.192.168.39.19.nip.io
  2. 現在のユーザーの SSH キーを root ユーザーの /root/.ssh に配置して、sudo ssh がそれらにアクセスできるようにします。

  3. ポートフォワーディングで SSH を実行します

    sudo ssh -L 443:192.168.39.19:443 user@remotehost

アプリケーションと対話するには、通常どおりブラウザを https://keycloak-keycloak.192.168.39.19.nip.io にポイントします。SSH トンネルが確立されている場合、応答時間は少し遅くなるため、ユーザーはローカルマシンで gatling を使用して代表的な負荷テストを実行し、リモートマシンで minikube を実行することはできません。

接続のサーバー側を最適化するには、sshd の MaxSessions パラメーターを更新することを検討してください。そうしないと、1 つの SSH セッションを介したセッション数が 10 に制限され、ユーザーはブラウザがブロックされているように見える場合があります。推奨される数値は 100 です。