Kubernetes

Helm チャートで AnsibleForms とその MySQL データベースをインストールします

  1. 前提条件
  2. 1. チャートの values を取得する
  3. 2. ストレージを設定する
  4. 3. 認証情報を設定する
  5. 4. RTE イメージを選ぶ
  6. 5. チャートをインストールする
  7. 6. インストールを確認する
  8. 7. AnsibleForms を開く
  9. 8. サインインする
  10. Kubernetes 上のランナー
  11. 次のステップ

Helm チャートは、AnsibleForms を MySQL とプレイブックを実行する RTE と一緒にデプロイします( values リファレンス を参照)。 インストーラー もいくつかの質問に答えるだけでこのチャートをインストールでき、インストーラーがインストールしていないリリースもアップグレードできます。同じ チャートで、別の場所で動いている AnsibleForms 用のランナーだけをインストールすることもできます( Kubernetes 上のランナー を参照)。


前提条件

始める前に、次のものが必要です。

  • Kubernetes クラスター : kubectl から接続できるように設定されていること
  • Helm 3 : チャートのインストールとアップグレードに使います
  • ストレージ : 動的プロビジョニング用の StorageClass、または事前に作成した PersistentVolume
  • Ingress コントローラー : Ingress で AnsibleForms を公開する場合のみ

1. チャートの values を取得する

チャートリポジトリまたは OCI レジストリから、チャートの既定の values を自分用のファイルに取得します。

helm repo add ansibleforms https://ansibleforms.com/helm-charts/
helm repo update
helm show values ansibleforms/ansibleforms > my_values.yaml

2. ストレージを設定する

AnsibleForms と MySQL はどちらも永続ボリュームにデータを保存します。それぞれの StorageClass とサイズを設定します。

storages:
  server:
    className: longhorn
    size: 5Gi
    accessMode: ReadWriteOnce
  mysql:
    className: longhorn
    size: 5Gi
    accessMode: ReadWriteOnce

className を空にすると、クラスターの既定の StorageClass を使います。アクセスモードの既定は ReadWriteMany ですが、多くのストレージ クラスはこれに対応していません。レプリカが 1 つなら ReadWriteOnce で問題ありません。事前に作成した PersistentVolume を使う場合は、チャートの README を参照してください。


3. 認証情報を設定する

AnsibleForms には、管理者アカウント、データベースのパスワード、そして AnsibleForms に保存される認証情報を暗号化する鍵 ENCRYPTION_SECRET が必要です。後でこの鍵を変更するには、1 回の起動の間だけ ENCRYPTION_SECRET_PREVIOUS に古い鍵を設定します。保存されているすべてのシークレットが新しい鍵で再暗号化されます。これらは次の 3 つの方法のいずれかで指定します。

my_values.yaml に設定します。チャートはこれを <release>-secrets という名前の Secret に保存します。

applications:
  server:
    env:
      ADMIN_USERNAME: admin
      ADMIN_PASSWORD: a-strong-password
      ENCRYPTION_SECRET: a-random-string-of-32-characters
  mysql:
    password: a-strong-database-password

4. RTE イメージを選ぶ

AnsibleForms 7 は自分ではプレイブックを実行せず、RTE(ランタイム環境)が実行します。チャートは RTE をサーバー Pod の 2 つ目のコンテナーとして同じボリューム上で動かし、既定のランナー rte として登録するため、プレイブックのフォームは設定なしで動作します。7.3.0 以降、 アプリは 127.0.0.1 の RTE に接続して 1 本の WebSocket を開いたままにします( RTE_MODE=inbound 、 モード を参照)。RTE は データベースの設定も暗号化キーも受け取りません。チャートの設定シードは、トークンとそのアドレスを持つ RTE の認証情報と、それでサインインする モード inbound のランナーを宣言しています。

既定のイメージ ghcr.io/ansibleforms/ansibleforms-rte-full には、ansible とそのコレクション、そして 6.5 のイメージにあった Python ライブラリが含まれています。 これより多く、または少なくしたい場合は、3 つの RTE レイヤー( ansibleforms-rte-base 、 -rte-core 、 -rte-full 。 RTE イメージ を参照)のいずれかをベースに独自のイメージをビルドし、チャートでそれを指定します。

containers:
  rte:
    image: registry.example.com/my-rte:7.0.0
applications:
  rte:
    env:
      ANSIBLE_PATH: /app/dist/persistent/playbooks

アプリと RTE の間のトークンと、セッションに署名する鍵は、初回インストール時に <release>-keys Secret に生成され、アップグレードのたびに保持されます。独自の設定シードを使う場合は、その認証情報とランナーをシードに追加してください。方法はインストール後に Helm が表示するノートに記載されています (チャートの README を参照)。


5. チャートをインストールする

自分の values を使って、専用の Namespace にチャートをインストールします。

helm upgrade --install ansibleforms ansibleforms/ansibleforms \
  --namespace ansibleforms --create-namespace \
  --values my_values.yaml

OCI レジストリを使う場合は、チャートとして oci://ghcr.io/ansibleforms/charts/ansibleforms を指定します。無人で実行するものでは、 --version でチャートのバージョンを固定し、新しいリリースが勝手にインストールされないようにしてください。


6. インストールを確認する

チャートには、Web サーバーとデータベース接続の両方を確認するテストが含まれています。

helm test ansibleforms --namespace ansibleforms --logs

AnsibleForms が応答し、データベースが接続を受け付ければ、テストは OK で終わります。


7. AnsibleForms を開く

AnsibleForms へのアクセス方法は、サーバーの公開方法によって異なります。

既定の ClusterIP サービスで Ingress がない場合、クラスターの外には何も公開されません。ローカルのポートをフォワードして 確認します。

kubectl -n ansibleforms port-forward svc/ansibleforms-server 8080:80

その後 http://127.0.0.1:8080/ を開きます。


8. サインインする

管理者ユーザー(既定は admin )としてサインインします。Secret からパスワードを読み取るには次のようにします。

kubectl -n ansibleforms get secret ansibleforms-secrets \
  -o jsonpath='{.data.ADMIN_PASSWORD}' | base64 -d

secrets.existingSecret を使っている場合は、代わりに自分の Secret から読み取ります。


Kubernetes 上のランナー

runner.enabled を指定すると、チャートは RTE だけをインストールします。別の Namespace、別のクラスター、または VM など、別の場所にインストールされた AnsibleForms 用のランナーです。ランナーはアプリに接続して 1 本の WebSocket を開いたままにするため( RTE_MODE=outbound 、 モード を参照)、 データベースも暗号化キーもインバウンドのポートも必要ありません。アプリ、MySQL、Service、Ingress はレンダリングされません。

helm install runner1 ansibleforms/ansibleforms \
  --namespace runners --create-namespace \
  --set runner.enabled=true \
  --set runner.appUrl=https://forms.example.com \
  --set runner.name=zone-a \
  --set runner.joinToken=afj_...
値 内容
runner.enabled ランナーだけをインストールします。アプリ、MySQL、Service、Ingress はありません
runner.appUrl 利用者が開くアプリのアドレス。 BASE_URL があればそれも含めます。必須です
runner.name 参加するときのランナー名( RTE_NAME )。空の場合はリリース名
runner.joinToken アプリで作成した 参加トークン 。初回起動時に読み取られ、ランナーをすぐに承認します
runner.appTlsVerify false にするとアプリの自己署名証明書を受け入れます( APP_TLS_VERIFY=0 )。信頼できる 1 つのネットワーク内でのみ使ってください

参加トークンがない場合、ランナーは参加を求め、管理者が 接続 > ランナー で承認するまで待ちます。承認されると、 <release>-keys Secret に保存された自分の RTE_TOKEN でサインインします。この Secret はリリースと一緒に保持してください。 ランナーの役割と Kubernetes を選んだ場合、 インストーラー もこのランナーモードをインストールします。


次のステップ

設定のその他の部分は、チャートの README で説明しています。

  • 独自のデータベース : mysql.enabled: false を設定し、AnsibleForms を既存の MySQL サーバーに向けます
  • ConfigMap からのフォーム : config.yaml とフォームファイルを ConfigMap で提供します
  • Ingress の背後での HTTPS 、リソース、ノードの配置、プライベートレジストリ
  • RTE : そのトークン、独自の RTE イメージ、または RTE をまったく使わない構成

新しいリリースに移行するには、 Kubernetes でのアップグレード を参照してください。