たそ@ITインフラ初心者

taso@初心者エンジニア

新卒2年目 エンジニアが適当に語るブログてす

AWXの構築をしてみた

お疲れ様です。たそ(@taso_int)です。
もう7月ですよ。早いですね。
新しい部署はわからないながらも色々聞いて進めているところです。
今のところは楽しいのでいいですね。
今日は久しぶりに技術ブログ的なものを書こうかなと思います。
テーマはAWXの構築となっております。

AWXとは何にか

AWXはRed Hat社が有償しているAnsible TowerのOSSで、
コミュニティバージョンとなっており、
無償で利用が可能となっております。(ただし Red Hat社のサポートは無し)
今回はそのAWXを構築することにしました。

今回利用したスペック

構築環境はAWSで行っています。

OSはUbuntu Server 20.04 LTS (HVM), SSD Volume Type

EC2要件( t2.xlargeは失敗 ストレージ8GBも失敗)
・t3.xlarge
・ストレージ16GB

VPC・サブネットは省略(EC2にSSH出来ればOK)

セキュリティグループ ・SSH ・HTTP ・後のTCPポート

色々躓いたところもあるので作っては壊しました。 (クラウドの強みですね)

インストール方針

AWXで検索してその方法に沿って行ったのですがうまく行きませんでした。
理由としてAWXのインストール方法が変わったのがあります。
昔はDockerを利用してAWXを構築することが可能でした。(バージョン17まで)
現在はawx-operatorを構築してそこからAWXを構築するのが正式なインストール方法です。
awx-operatorを構築するにはk8sまたはOpenShiftクラスターが必要です。
なのでk8sをローカル環境で実装する必要があり、
そこでminikubeを利用して実装することにしました。

①minikubeのインストール
②minikubeでk8sをlocalで再現
③awx-operatorのデプロイ
④awxインスタンスの作成
⑤ブラウザへアクセス

の手順となっております。

正直k8sは全く分からないので説明を省略します。
誰か教えてほしい。

①minikubeのインストール

minikubeとは小規模なKubernetes環境を作成するために作られたツールです。
1台のPC上に、仮想的にKubernetesの環境を構築することができます。
参考にさせていただいたインストール方法を載せたいのですが、
許可をもらってないので載せれないです。
OS名 minikube等で検索して頂ければインストール方法が 見つかると思います。

②minikubeでk8sをlocalに

ここからはawx-opetarorのGithubを参照した方がいいと思います。

https://github.com/ansible/awx-operat

minikubeのstart

minikube start --addons=ingress --cpus=4 --cni=flannel --install-addons=true \  
    --kubernetes-version=stable --memory=6g  

③awx-operatorのデプロイ

これ以降も以下通りにやります。
https://github.com/ansible/awx-operator

AWX-operatorをクラスターにデプロイします。
下のサイトにアクセスして最新のバージョンをメモします。
https://github.com/ansible/awx-operator/releases

kubectl apply -f https://raw.githubusercontent.com/ansible/awx-operator/<TAG>/deploy/awx-operator.yaml

ここののところにバージョンを入れます。

今回最新バージョンが0.12.0なので

kubectl apply -f https://raw.githubusercontent.com/ansible/awx-operator/0.12.0/deploy/awx-operator.yaml

ようになります。

④awxインスタンスの作成

これ以降も以下通りにやります。
https://github.com/ansible/awx-operator

awx-demo.ymlをカレントディレクトリで作成して、
それをawx-operatorに渡すことでAWXインスタンスが作られるぽいです。
(ここら辺がいまいちわかってない)

cat awx-demo.yml

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

kubectl apply -f awx-demo.yml
を実行することでAWXインスタンスが立ち上がります。(数分かかります)

kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator" を実行することでAWXインスタンスの状況を見ることができます。 (4/4になっていれば成功です。)

ここで躓いたんですが、大体リソース不足が原因です。
kubectl describe pod <pod-id>
を入力することで原因がわかるので使ってください。

⑤ブラウザでAWXに入る方法

ここまでできればあとはブラウザにアクセスするだけです。

クラスター内のアプリケーションに入るために以下のコマンドを入力します。

kubectl expose deployment awx-demo --type=LoadBalancer --port=8080  

別のターミナルを開き minikube tunnel
を実行させます。(ここら辺も説明できません)

そして以下のコマンドを入力します。
そうするとAWXのインスタンス(pod)が出るかと思います。
参考例

kubectl get svc -l "app.kubernetes.io/managed-by=awx-operator"
NAME                TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
awx-demo-postgres   ClusterIP   None           <none>        5432/TCP       4m4s
awx-demo-service    NodePort    10.109.40.38   <none>        80:31006/TCP   3m56s

ここのawx-serviceのPORTS(今回だと31006)をメモしてください。

EC2のセキュリティグループからPORTSのポート番号を有効にしてください
TCP 31006 (送信元はmy ipで大丈夫です)

adminでログインするためのkeyを取得します。

kubectl get secret awx-demo-admin-password -o jsonpath="{.data.password}" | base64 --decode
*********** ←これがkeyなのでコピーする。  

最後に

kubectl port-forward svc/awx-demo-service --address 0.0.0.0 ポート番号:80

を入力し、http://EC2グローバルIP:ポート番号
で無事ブラウザでアクセスすることができます。

userはadmin passは取得したkeyになります。

最終的にはこんな感じのが出来ると思います。
f:id:taso_int:20210710113543p:plain

長くなりましたが、以上となります。
k8s全くわからん…
次はAWXを使ってみたを書きたいと思っています。

最後に
7月13日に22歳になります。めちゃくちゃ早いですね…
欲しいものリスト貼ってもいいですか? 一応貼りますね

https://www.amazon.jp/hz/wishlist/ls/2DVT0LK4Q4OUQ?ref_=wl_share