LoginSignup
0
0

More than 3 years have passed since last update.

AWX on ARM64(Raspberry Pi)

Last updated at Posted at 2020-07-24

はじめに

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)]にアクセスすると、
スクリーンショット 2020-07-24 15.56.13.png
アングリーポテトがお出迎えしてくれます。

おわりに

Raspberry Pi 1台だけだとリソース的に心許ないですが、何とか動くには動きそうです。
小規模な実験環境などには使えるのではないでしょうか。

ビルド済みのDockerイメージはこちらで公開していますので、試してみたい方は上記の「Raspberry piへインストール」の項から進めてみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0