ホーム > 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]のインストールは以下で解説していますので、こちらもご覧頂ければと思います。
コメント