【Ansible AWX 19.2.2】インストール手順


この記事はプロモーションを含みます。

AlmaLinux

ホーム > Ansible Tower・AWX リファレンス

Ansible AWX 19.2.2を構築する手順になります。18.0以降はインストーラーが無くなり、手順がかなり変わったので、備忘録を兼ねて残しておこうと思います。
今回は、AlmaLinux 8.4にインストールしてみようと思います。

構築環境

インストールした環境になります。

  • ホストマシン
    • Windows 10 Pro
    • VirtualBox 6.1.30
  • ゲストマシン(Virtual Box上の仮想マシン)
    • AlmaLinux8.4(最小限のインストール、Guest Additions適用済み)
    • CPU:6コア
    • メモリ:8GB
    • HDD:16GB
    • ネットワーク(アダプタ1):NAT
    • ネットワーク(アダプタ2):ホストオンリーアダプター
    • ホストマシンとの共有フォルダ設定

ホストマシンとの共有フォルダ設定についてですが、FTPでファイルを転送する手間を省くために設定しているため、必須ではありません。
しかし、ホストマシンとゲストマシンでファイルの授受を行う際は便利なので、設定しておくことをおすすめします。

AlmaLinux8.4のインストール手順及び、ホストマシンとの共有フォルダの設定方法は下記の記事にまとめています。

関連パッケージインストール

AWX本体のインストールするには、AWXオペレーターをデプロイする必要があります。
ここでは、デプロイに必要なパッケージをインストールしていきます。
基本的に作業は[root]ユーザで行います。他のユーザを使用する場合は、コマンドの先頭に[sudo]が必要となる場合がありますのでご注意ください。

Docker インストール用リポジトリの設定

後にインストールする[minikube]で[Docker]ドライバが必要となります。
ドライバ含めて[Docker]をインストールするため、リポジトリの設定を行います。

[root@localhost ~]# dnf -y install yum-utils
~~~省略~~~
完了しました!
[root@localhost ~]#
[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
repo の追加: https://download.docker.com/linux/centos/docker-ce.repo
[root@localhost ~]#

Docker インストール

後続作業でDockerドライバが必要なので、Dockerをインストールします。

[root@localhost ~]# dnf -y install docker-ce docker-ce-cli containerd.io
~~~省略~~~
完了しました!
[root@localhost ~]#

Dockerの起動、起動確認を行います。緑色の丸「」が表示されていれば起動されています。

[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl status docker
 docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2022-01-16 08:33:16 EST; 9s ago
~~~省略~~~
[root@localhost ~]#

minikube インストール

[minikube]のインストールを行いますが、RPMパッケージからインストールするため、GitHubからダウンロードします。
以下のリンク先にある「minikube-1.18.1-0.x86_64.rpm」をダウンロードします。

こちらは「minikube-1.18.1-0.x86_64.rpm」の直リンクになります。

ダウンロード後、ホストマシン側で設定しているVirtualBoxの共有フォルダに格納します。
共有フォルダを設定していない場合は、FTPツールでLinux側に転送しましょう。
私の環境では、「/media/sf_public/AWX/」になります。

では、[rpm]コマンドでインストールしていきます。インストールはすぐに終わります。

[root@localhost ~]# cd /media/sf_public/AWX/
[root@localhost AWX]# rpm -ivh minikube-1.18.1-0.x86_64.rpm
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:minikube-1.18.1-0                ################################# [100%]
[root@localhost AWX]#

ユーザの作成

[minikube]を起動する際、[root]ユーザが禁止されています。
なので、何らかのユーザを作成する必要がありますので、ここでは、[ansible]ユーザを作成します。
ここでのユーザは何でも構いません。既存ユーザを使いまわしても問題ないと思います。

[root@localhost AWX]# useradd ansible

作成した[ansible]ユーザに[sudo]権限を付与します。
[sudo]権限を付与すると[sudo ls -l]のように、一般ユーザで[root]と同じ権限でコマンドが実行出来るようになります。

[root@localhost AWX]# visudo

[visudo]コマンドを実行すると編集モードとなるため、下の方へスクロールすると以下のような記述があるので、黄色の文字列を追記します。
[visudo]で、追記モードに変更するには[i]キーをクリックします。
追記後、[Esc]キーで追記モードを解除して、[:wq]→[Enter]で上書き保存して下さい。

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

ansible ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software,

次に[passwd]コマンドで、[ansible]ユーザにパスワードを設定します。
パスワードは任意の文字列を設定して下さい。
私はテスト環境なので、簡単なパスワードにしています。
「よくないパスワード」と怒られていますが…

[root@localhost AWX]# passwd ansible
ユーザー ansible のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードは 8 文字未満の文字列です。
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[root@localhost AWX]#

ユーザとグループの紐づけ

作成した[ansible]ユーザで、[docker]を操作するため、[ansible]ユーザに[docker]グループを設定します。

[root@localhost AWX]# usermod -aG docker ansible

kubectl インストール

[Kubernetes]のクラスター関連機能を制御するためのツール[kubectl]をインストールします。
まずは以下のコマンドでダウンロードします。

[root@localhost AWX]# curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 44.4M  100 44.4M    0     0  36.7M      0  0:00:01  0:00:01 --:--:-- 36.7M
[root@localhost AWX]#

次に[kubectl]コマンドとして機能するよう、移動と権限付与を行います。
その後、コマンドが正しく動作するか確認しています。
バージョン情報が表示されれば問題ありません。

[root@localhost AWX]# mv ./kubectl /usr/local/bin/kubectl
[root@localhost AWX]# chmod 755 /usr/local/bin/kubectl
[root@localhost AWX]# kubectl version --client
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"clean", BuildDate:"2021-12-16T11:41:01Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
[root@localhost AWX]#

AWXオペレーター デプロイ準備

GitHubよりAWXオペレーターをダウンロードします。
ダウンロードファイル名:awx-operator-0.12.0.zip

ダウンロード後、VirtualBoxの共有フォルダに格納して解凍します。
解凍後のフォルダ名:awx-operator-0.12.0
私はWindows10デフォルトの解凍機能で解凍しましたが、コマンドなどで解凍しても構いません。

解凍後は、以下のコマンドでディレクトリをコピーして権限を設定します。
コピー先を[/home/ansible/]としていますが、先ほど作成したユーザで操作出来るディレクトリであれば、どこでも問題ないです。
所有権変更コマンド[chown -R ansible:]は、作成したユーザに合わせて適宜変更して下さい。

[root@localhost AWX]# cd /media/sf_public/AWX/
[root@localhost AWX]# cp -pvr awx-operator-0.12.0/ /home/ansible/
[root@localhost AWX]# cd /home/ansible/
[root@localhost ansible]# chown -R ansible: awx-operator-0.12.0/

minikube 起動

ここでは、minikubeを起動します。
[root]ユーザではエラーとなってしまうため、作成した[ansible]ユーザに切り替えます。
起動するまで数分要する場合があります。

コンソールに色々表示されますが、先頭に「X」マークが無ければ正常に終了しています。

minikubeの起動オプションとして、CPU:4コア、メモリ:6GBを指定しています。
これ以下だと、後続処理でリソース不足によるエラーが発生する場合がありますので、今の設定値が最低値になると思います。

[root@localhost ansible]# su - ansible
[ansible@localhost ~]$ minikube start --driver=docker --cpus=4 --memory=6g --addons=ingress

AWXオペレーター デプロイ

インストールした[minikube]と[kubectl]を使用して、AWXオペレーターのデプロイを行います。

[ansible@localhost ~]$ minikube kubectl -- apply -f /home/ansible/awx-operator-0.12.0/deploy/awx-operator.yaml
    > kubectl.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
    > kubectl: 38.37 MiB / 38.37 MiB [---------------] 100.00% 47.57 MiB p/s 1s
customresourcedefinition.apiextensions.k8s.io/awxs.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxbackups.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxrestores.awx.ansible.com created
clusterrole.rbac.authorization.k8s.io/awx-operator created
clusterrolebinding.rbac.authorization.k8s.io/awx-operator created
serviceaccount/awx-operator created
deployment.apps/awx-operator created
[ansible@localhost ~]$

AWX インストール

AWX本体のインストールを行います。

AWXのインストール設定

AWXのインストールを行うための設定ファイルを作成します。
[vi]コマンドで[/home/ansible/awx-demo.yml]に新規ファイルを作成します。

[ansible@localhost ~]$ vi /home/ansible/awx-demo.yml

[vi]コマンド実行時に新規ファイルが作成されるので、[i]キーで編集モードに変更して、下記を記述します。
記述後は[Esc]→[:wq]→[Enter]で、上書き保存します。

---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-demo
spec:
  service_type: nodeport
  ingress_type: none
  hostname: awx-demo.example.com

AWX インストール(インスタンス作成)

[kubectl]コマンドと先ほど作成した[設定ファイル]を使用して、AWXのインストールを行います。
処理としては、AWX関連機能のインスタンスを作成しているようです。
こちらも処理時間が数分掛かります。(コンソール自体はすぐに返ってきます)

[ansible@localhost ~]$ kubectl apply -f /home/ansible/awx-demo.yml
awx.awx.ansible.com/awx-demo created
[ansible@localhost ~]$

以下のコマンドでインスタンスの作成状況を確認できます。
こちらは起動中の例です。
[READY]カラムに[0/4]がありますね。これはまだ起動中です。

[ansible@localhost ~]$ kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"
NAME                       READY   STATUS              RESTARTS   AGE
awx-demo-9975db9b6-bg2pf   0/4     ContainerCreating   0          22s
awx-demo-postgres-0        1/1     Running             0          41s

全て起動すると下記のように表示されます。

[ansible@localhost ~]$ kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"
NAME                       READY   STATUS    RESTARTS   AGE
awx-demo-9975db9b6-bg2pf   4/4     Running   0          11m
awx-demo-postgres-0        1/1     Running   0          12m

ログイン情報確認

ここでは、AWXのWEB画面にログインするためのログイン情報を確認します。

接続先ポート番号の取得

今回のバージョンのAWXでは、接続する際のポート番号が動的に変わるため、ポート番号の確認を行います。
黄色文字の「31186」が今回のポート番号になります。
後続作業で何度か使用するため控えておいてください。

[ansible@localhost ~]$ kubectl get svc | grep NodePort
awx-demo-service       NodePort    10.110.230.231   <none>        80:31186/TCP        23m

また以下のコマンドで現在稼働している各サービスを確認することが可能です。

[ansible@localhost ~]$ kubectl get svc
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
awx-demo-postgres      ClusterIP   None             <none>        5432/TCP            13m
awx-demo-service       NodePort    10.110.230.231   <none>        80:31186/TCP        12m
awx-operator-metrics   ClusterIP   10.110.47.86     <none>        8383/TCP,8686/TCP   27m
kubernetes             ClusterIP   10.96.0.1        <none>        443/TCP             33m

ポートフォワーディングの設定

先ほど確認したポート番号のポートフォワーディングを設定します。
黄色文字部分のポート番号は、各自確認した番号に置き換えて下さい。

※下記の事象はコマンド誤りによるものでした。。

プロンプトが返ってこない場合があるので、その場合は「Enter」を押下して下さい。

[ansible@localhost ~]$ kubectl port-forward svc/awx-demo-service --address 0.0.0.0 31186:80 & > /dev/null
[1] 26931
[ansible@localhost ~]$ Forwarding from 0.0.0.0:31186 -> 8052

[ansible@localhost ~]$

こちらが修正したものになります。(2022/2/9修正)

[ansible@localhost ~]$ kubectl port-forward svc/awx-demo-service --address 0.0.0.0 31186:80 &> /dev/null &
[1] 26931
[ansible@localhost ~]$

管理者向けパスワードの取得

AWXのWEB画面に管理者でログインするためのパスワードを取得します。
コマンド実行時に表示される黄色の文字列がパスワードになります。
パスワードに改行が含まれないため、プロンプトの位置がズレます。
[Enter]を押して、元に戻しておきます。

パスワードはログイン時に必要となるため、控えておきましょう。

[ansible@localhost ~]$ kubectl get secret awx-demo-admin-password -o jsonpath="{.data.password}" | base64 --decode
lbkEhBHN16Fffpj1uQLcX8Q1h113VaeZ[ansible@localhost ~]$
[ansible@localhost ~]$

[ansible]ユーザでの作業は完了したので、[exit]で[root]ユーザに戻ります。

[ansible@localhost ~]$ exit
ログアウト
[root@localhost ansible]#

接続確認(ローカル)と接続設定(外部)

ローカルから接続出来ることを確認します。
また、外部から接続するための設定を行います。
ここでの外部はホストマシン(Windows10)を指しており、ホストマシン(Windows10)のブラウザから、VirtualBoxのゲストマシン(AlmaLinux)へ接続するための設定となります。

ローカルでの接続確認

ローカル(VirtualBox上のAlmaLinux)から、構築したAWXに接続出来るかを確認します。
コマンドの実行結果に下記のような大量の文字列が返れば、接続は成功です。

接続に失敗した場合の例です。

[root@localhost ansible]# curl http://127.0.0.1:31185
curl: (7) Failed to connect to 127.0.0.1 port 31185: 接続を拒否されました
[root@localhost ansible]# curl http://127.0.0.1:31186
Handling connection for 31186
<!doctype html><html lang="en"><head><script nonce="M46A8BBUB6BLETumjkVYQyD0VUvyAdw9llqM/dAKZIw=" type="text/javascript">window.NONCE_ID="M46A8BBUB6BLETumjkVYQyD0VUvyAdw9llqM/dAKZIw="</script><meta http-equiv="Content-Security-Policy" content="default-src 'self'; connect-src 'self' ws: wss:; style-src 'self' 'unsafe-inline'; script-src 'self' 'nonce-M46A8BBUB6BLETumjkVYQyD0VUvyAdw9llqM/dAKZIw=' *.pendo.io; img-src 'self' *.pendo.io data:;"/><link rel="shortcut icon" href="/static/media/favicon.ico"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="AWX"/><link href="/static/css/2.687a9035.chunk.css" rel="stylesheet"><link href="/static/css/main.e189280d.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><style nonce="M46A8BBUB6BLETumjkVYQyD0VUvyAdw9llqM/dAKZIw=">.app{height:100%}</style><div id="app" class="app"></div><script src="/static/js/runtime-main.7202f99a.js"></script><script src="/static/js/2.53c634ac.chunk.js"></script><script src="/static/js/main.6ab990a9.chunk.js"></script></body></html>[root@localhost ansible]#

外部向けの接続設定

VirtualBoxホストマシンのWindows10から接続するため、ファイアウォールを無効化します。
テストなので、無効化していますが、本番などでは必要なポートのみ開放するよう設定して下さい。

停止後の確認で、「●」が灰色になっていれば、無効化されています。

[root@localhost ansible]# systemctl stop firewalld
[root@localhost ansible]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
[root@localhost ansible]#

AWXのWEB画面に接続

AWXのWEB画面に接続して、ログインしてみます。

接続URLは下記の形式となります。
http://{ゲストマシン(AlmaLinux)のIPアドレス}:{ポート番号}

まず、IPアドレスですが、「ip a」コマンドで取得します。
環境によっては、色々出力されると思いますが、VirtualBoxでのホストオンリーアダプター経由で接続する場合は「192.168.56.***」形式のアドレスになると思います。

[root@localhost ansible]# ip a

~~~省略~~~
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:42:1d:1a brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.104/24 brd 192.168.56.255 scope global dynamic noprefixroute enp0s8
       valid_lft 453sec preferred_lft 453sec
    inet6 fe80::a00:27ff:fe42:1d1a/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
~~~省略~~~

では、取得したIPアドレスとポート番号を組み合わせると、私の環境では、下記のようなURLになります。
URL:http://192.168.56.4:31186

ブラウザから接続します。(Google Chromeが推奨です。)
ログイン画面が表示されるので、ログイン情報を入力して、ログインボタンをクリックします。
ユーザー名:admin
パスワード:先ほど取得したパスワード

ダッシュボードが表示されれば、ログイン成功です。

ダッシュボード画面で右上の「?」マークをクリックし、「情報」を選択するとバージョンが表示されます。

「AWX 19.2.2」と表示され、バージョン「19.2.2」がインストールされたことも確認出来ますね。

おわりに

お疲れさまでした!以上で、Ansible AWX[19.2.2]のインストールは完了になります。
今後は、ジョブの実行などをご紹介していきたいと思います。
ですが、AWX有償版のAnsible Towerの最新版となるバージョン[3.8.4]は、AWXのバージョンだと[15.*]相当に見えます。(画面構成から判断しました。)
なので、Ansible Towerの導入を検討しており、検討の一環としてAWXを導入する場合は、バージョン15系が望ましいかなと個人的には思っています。
AWXの[15.0.1]のインストールは以下で解説していますので、こちらもご覧頂ければと思います。

コメント

タイトルとURLをコピーしました