以前まとめた以下の「[AWX / AAP] ジョブの実行をリモートのKubernetesクラスタで行う」内容はwebのUIで手動で設定するものだったが、本記事ではこの設定操作をplaybookで自動化する方法についてのメモ。
大きな流れとしては以下の通り。
- 認証情報の作成
- コンテナグループの作成
認証情報の作成
サンプルコードは以下。
- name: create credential for k8s awx.awx.credential: name: k8s-access credential_type: OpenShift or Kubernetes API Bearer Token inputs: host: "{{ k8s_endpoint }}" bearer_token: "{{ token }}" verify_ssl: false
モジュール自体はGitやVMの認証情報を作成するのに使うのと同じで、credential_typeにOpenShift or Kubernetes API Bearer Tokenを指定する。
inputs.hostはK8sエンドポイントで、たいていは https://{{ address }}:6443みたいな内容になるはず。
inputs.bearer_tokenにトークンを指定する。
トークンの作成方法については以下参照。
(kubectl create tokenを使うとトークンは有効期限付きのものになるため、Secretベースのトークンを使う方法が良いと思う。再確認も容易だし)
コンテナグループの作成
awx.awx.instance_groupモジュールを使う。
Ansibleドキュメントサイトの内容には珍しく、モジュールのページに(2025年5月上旬時点では)Exampleが無いのでトライアルアンドエラーで作成したが、サンプルコードは基本的に以下で動く。
- name: create container instance group awx.awx.instance_group: name: k8s-exec credential: k8s-access is_container_group: true
credentialに前述の「認証情報の作成」で作成したOpenShift or Kubernetesのクレデンシャルリソースを指定すればOK
また、UIで「Pod仕様のカスタマイズ」で記述するジョブPodのマニフェスト定義については、pod_spec_overrideに記述できる。
上記のタスク定義に書き足すとこんな感じで、ネームスペースやサービスアカウント名、コンテナイメージ等を指定する。
(5/9追記: コンテナイメージはここのspec.containers[]imageでなく、テンプレート設定側の実行環境で指定したものが優先される。)
Pod仕様のカスタマイズの編集については、一度UIでデフォルト値を確認してそれを変更するのが良いと思う。
- name: create container instance group awx.awx.instance_group: name: k8s-exec credential: k8s-access is_container_group: true pod_spec_override: | apiVersion: v1 kind: Pod metadata: namespace: execution spec: serviceAccountName: job-exec-user automountServiceAccountToken: false containers: - image: my-registry.example.org/repo/image:latest name: worker args: - ansible-runner - worker - '--private-data-dir=/runner' resources: requests: cpu: 250m memory: 100Mi
元ネタまとめたのって、2年近くも前だったのね。
その他のリソースの作成方法全般については以下。