Ansible Automation Platform 2.1とkubernetesを連携してみる


本記事は Ansible Advent Calendar 2021 , Ansible Advent Calendar 2021 – Qiita の4日目のものになります。

AAP 2.0の Automation Controller からPlaybookの実行環境は Execution Environment(以降、EE)へ移行しました。

また、インスタンスグループのコンテナグループ(OpenShiftやk8sと連携)がフルサポートとなりました。(AAP 1.2/Ansible Tower 3.6.0〜ではテックプレビューだった)
旧Ansible Towerでもテックプレビュー状態でk8sと連携は出来ましたが、改めてここではAnsible Automation Platform 2.1(以降、AAP 2.1)とk8sを連携させてk8sのクラスタ上でEEをデプロイしPlaybookを実行する方法について紹介します。

環境情報

AAP 2.1ノード

項目 内容
OS RHEL 8.4
AAP 2.1

kindノード

項目 内容
OS Fedora 35
podman 3.4.2
kind 0.11.1
kindest/node v1.21.1

RHEL8 + podmanではうまくkindが動かなかったのでFedoraで構築しています。

AAP 2.1 セットアップ

AAP 2.1をインストールしてログインします。

Red Hatアカウントの準備

AAP 2.1をインストールして使うにはRed Hatアカウントとサブスクリプションが必要です。
個人の検証用途であればRed Hat Developer Programをご利用ください。

ダウンロード

以下から Ansible Automation Platform 2.1.0 Setup をダウンロードします。

インストール

ダウンロードしたアーカイブを解凍します。

ここでは、AAP2.1の最小限の機能のみインストールするので inventory ファイルにある以下のパスワード部分の変更とAAPでサポートしているEEを registry.redhat.io からダウンロードするためのアカウントを設定します。
Kubernetesで動作させる場合は、これとは別にKubernetes環境にもアカウントの登録が必要になります。

setup.sh を実行します。

他の詳細については以下のAAP 2.1のインストールガイドを参照ください。

サブスクリプション登録

インストールしたAAPにWebブラウザでアクセスしてログインします。
ログイン後にサブスクリプションが求められるので、Red Hatアカウントの情報を入力し サブスクリプションの取得 をクリックします。

表示されたサブスクリプションをクリックして 選択 をクリックしてます。
サブスクリプションを選択したら 次へ をクリックします。
ユーザーアナリティクスInsights for Ansible Automation Platform を確認して 次へ をクリックします。
使用許諾契約書 を確認して 送信 をクリックします。
AAP 2.1のダッシュボードにリダイレクトされることを確認します。

kind セットアップ

kubernetes環境はkindを使用して構築します。
また、コンテナエンジンはpodmanを使用します。

kindインストール

kindをインストールします。

kubectlインストール

kubectlをインストールします。

podmanインストール

podmanをインストールします。

クラスタの作成

kindを使用してkubernetesクラスタ環境を構築します。
クラスタ環境を作成するためのファイルを作成します。

クラスタを作成します。

podの情報が取得できるか確認します。

EEを動かすネームスペースとアカウントを追加

EEを動かすネームスペース(ここではawx)とAAPとKubernetesのAPI連携をするアカウントを追加するために以下のマニフェストを作成します。

追加します。

AAPに登録するためのトークンと証明書情報の取得

以下のコマンドを実行してKubernetes連携に必要なトークンと証明書情報を取得します。

取得した情報はAAPの認証情報に登録するので、どこかにメモしてください。

トークンの動作確認

取得したTokenで認証ができるか確認します。
APIへアクセスするための kind-control-plane のアドレスを確認します。

以下の [Tokenに置き換える] 部分を置き換えてcurlコマンドを実行します。

上記のようにレスポンスが返ってくれば問題ありません。

Workerにレジストリ情報を追加

registry.redhat.io からEEをプルできるようにレジストリと認証情報を以下の手順で加えます。
ファイルを修正するための vim をインストールします。

以下の registry.redhat.io のレジストリとアカウント情報をファイルの最後に追加します。

設定を反映させるためにコンテナを再起動します。

register.redhat.io からEEがプルできるか以下のコマンドを実行して確認します。

問題なくダウンロード出来た場合は、他のWorkerにも同じ設定を追加してください。

SSHポートフォワード設定

kindで作成したkubernetes環境のAPI Endpointへ外部からアクセスするにはポートフォワーディングなどの設定が必要です。
ここではSSHを使ったポートフォワーディングの設定を使用します。

上記を実行した後に外部ホストから Tokenの動作確認 で実行したコマンドを再実行し問題ないことを確認します。
これでkind側の準備は整いました。

AAP設定

EEをk8sにデプロイしてplaybookを実行します。

認証情報追加

認証情報 へ移動して 追加 をクリックします。
以下の情報を入力して 保存 をクリックします。

  • 認証タイプは OpenShift または Kubernetes API Bearer トークン を選択する
  • OpenShift または Kubernetes API エンドポイント はSSHのポートフォワードで設定したアドレスを入力する
  • API 認証ベアラートークンはcurlで取得したTokenを入力する
  • 認証局データはcurlで取得したCAデータを入力する
  • オレオレ証明書のため SSL の検証 チェックは外している

インスタンスグループ追加

インスタンスグループ追加 をクリックし コンテナーグループの追加 を選択します。
以下の情報を入力して 保存 をクリックします。

  • 認証情報は 認証情報追加 で登録したものを選択する
  • Podをデプロイするネームスペース(ここではawx)を指定するため、Pod使用のカスタマイズのチェックを入れる
  • カスタムPod仕様に設定を入力する

組織追加

組織と作成したインスタンスグループを紐付けます。
組織 を選択して 追加 をクリックします。
以下の情報を入力して 保存 をクリックします。

  • インスタンスグループで作成したkindのインスタンスグループを選択する

プロジェクト追加

プロジェクト を選択して 追加 をクリックします。
以下の情報を入力して 保存 をクリックします。

  • 組織に作成したKind組織を選択する
  • 後は環境に合った ソースコントロール認証情報タイプ を選択し必要な情報を入力する

テンプレート追加

テンプレート を選択して 追加 をクリックします。
以下の情報を入力して 保存 をクリックします。

  • プロジェクトに作成したkindのプロジェクトを選択する
  • 必要に応じて実行するPlaybookを選択する

テンプレート実行

テンプレートを実行するとEEがk8sのクラスタ上で動作しPlaybookが実行されます。

実行が完了すれば自動的に削除されます。

最後に

今回はAAPとk8sとの連携の方法について紹介しました。
興味がある方は是非動かしてみてください 🙂

Happy Automation!

参考情報

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください