はじめに
GithubのAWXリポジトリを見ていて、こんなプルリクエストがあることに気付きました。
ARM image build support #7607
手元にRaspberry Pi 4B(4GB版)があるので、この上でAWXを動かしてみます。
環境
イメージビルドをRaspberry Piでやると時間がかかりそうだったので、AWSのA1インスタンスを利用しました。
ビルド環境:Ubuntu Server 20.04 LTS (AWS EC2 a1.xlarge)
実行環境:Ubuntu Server 20.04 LTS (Raspberry Pi 4B 4GB)+ k3s v1.18.6+k3s1
#イメージビルド
###必要なパッケージのインストール
$ sudo apt update
$ sudo apt install -y docker.io python3-docker ansible make npm
###Dockerサービス起動
$ sudo systemctl start docker.service
$ sudo systemctl status docker.service
###dockerグループにユーザー追加
$ sudo gpasswd -a $USER docker
グループへの追加が完了したら一度ログアウトし、再度ログインし直しましょう。
###Githubからclone
13.0.0をベースに、ARMビルド用のコミットだけをCherry pickで反映していきます。
$ git clone https://github.com/agaffney/awx.git
$ cd ~/awx/
$ git checkout refs/tags/13.0.0
$ git cherry-pick 0b841e6
このままだとビルドに失敗してしまうのでちょっと修正。
npmの依存関係周りがエラーになるようなので、npm installを実行して解消させます。
$ cd ~/awx/awx/ui/
$ npm install
###ビルド準備
inventoryファイルにDockerリポジトリの情報を書いておくと、ビルド完了後にPushまでやってくれます。
今回はGitlabのリポジトリにアップロードしました。
$ cd ~/awx/installer/
$ vi inventory
以下を追記しておきます。
docker_registry=registry.gitlab.com
docker_registry_repository=ussvgr/awx-arm64
docker_registry_username=ussvgr
ビルド用のPlaybookも一点修正しておきます。
gather_factsをtrueへ変更。
$ vi build.yml
---
- name: Build AWX Docker Images
hosts: all
- gather_facts: false
+ gather_facts: true
roles:
- {role: image_build}
- {role: image_push, when: "docker_registry is defined"}
###Dockerイメージビルド
ビルド時にDockerレジストリのパスワード(今回はGitlab)をオプションで与えて実行します。
$ ansible-playbook -i inventory -e docker_registry_password=<Gitlabのパスワード> build.yml
a1.xlargeで大体40〜50分程度かかりました。
#Raspberry Piへインストール
Kubernetes(k3s)環境が整っている状態から始めます。
###Githubからclone
ビルド環境と同様にCherry pickしていきます。
$ git clone https://github.com/agaffney/awx.git
$ cd ~/awx/
$ git checkout refs/tags/13.0.0
$ git cherry-pick 0b841e6
###Inventoryファイルのカスタマイズ
Kubernetes環境にインストールするための設定を記載していきます。
tower_package_name に前項でビルドしたイメージのリポジトリを記載します。
また、メモリ4GBのRaspberry Piではデフォルトの要求スペックで起動することができないため、Inventoryファイルにてスペックを切り詰めていきます。
@@ -18,8 +18,8 @@ dockerhub_base=ansible
# openshift_pg_emptydir=True
# Kubernetes Install
-# kubernetes_context=test-cluster
-# kubernetes_namespace=awx
+kubernetes_context=default
+kubernetes_namespace=awx
# Optional Kubernetes Variables
# pg_image_registry=docker.io
# pg_serviceaccount=awx
@@ -27,6 +27,9 @@ dockerhub_base=ansible
# pg_persistence_storageClass=StorageClassName
# pg_cpu_limit=1000
# pg_mem_limit=2
+pg_persistence_storageClass=local-path
+pg_cpu_limit=500
+pg_mem_limit=0.5
# Kubernetes Ingress Configuration
# You can use the variables below to configure Kubernetes Ingress
@@ -56,6 +59,19 @@ dockerhub_base=ansible
# redis_mem_limit=3
# management_cpu_limit=2000
# management_mem_limit=2
+task_cpu_request=500
+task_mem_request=1
+task_cpu_limit=1000
+task_mem_limit=1.5
+web_cpu_request=200
+web_mem_request=0.5
+web_cpu_limit=1000
+web_mem_limit=1
+redis_cpu_request=200
+redis_mem_request=0.5
+redis_cpu_limit=500
+redis_mem_limit=0.5
# Common Docker parameters
awx_task_hostname=awx
@@ -76,7 +92,7 @@ docker_compose_dir="~/.awx/awxcompose"
# docker_registry=172.30.1.1:5000
# docker_registry_repository=awx
# docker_registry_username=developer
+tower_package_name=registry.gitlab.com/ussvgr/awx-arm64/awx
# Set pg_hostname if you have an external postgres server, otherwise
# a new postgres service will be created
###(オプション)コンテナイメージの事前ダウンロード
ウチの環境だけかもしれませんが、コンテナイメージの展開に時間が掛かりすぎて、デプロイ用Playbookの実行がタイムアウトエラーとなってしまいました。
以下コマンドで事前にダウンロードしておくとスムーズかもしれません。
$ sudo k3s ctr images pull registry.gitlab.com/ussvgr/awx-arm64/awx:13.0.0
###デプロイ
以下のコマンドを実行し暫く待ち、エラーが出てなければOKです。
$ ansible-playbook -i inventory install.yml
###確認
ポート番号を確認し、
$ kubectl get svc -n awx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
awx-postgresql-headless ClusterIP None <none> 5432/TCP 26m
awx-postgresql ClusterIP 10.43.109.78 <none> 5432/TCP 26m
awx-web-svc NodePort 10.43.165.240 <none> 80:32686/TCP 25m
ブラウザでhttp://[Raspberry PiのIPアドレス]:[ポート番号(上記例だと32686)]にアクセスすると、
アングリーポテトがお出迎えしてくれます。
#おわりに
Raspberry Pi 1台だけだとリソース的に心許ないですが、何とか動くには動きそうです。
小規模な実験環境などには使えるのではないでしょうか。
ビルド済みのDockerイメージはこちらで公開していますので、試してみたい方は上記の「Raspberry piへインストール」の項から進めてみてください。