AWX on ARM64 (Raspberry Pi)

6780 단어 RaspberryPiAnsibleawx

소개



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

빌드 준비



인벤토리 파일에 Docker 리포지토리에 대한 정보를 쓰면 빌드가 완료된 후 푸시로 넘어갑니다.
이번에는 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에 인스톨」의 항으로부터 진행해 보세요.

좋은 웹페이지 즐겨찾기