【作業時間15分】Ansible AWXのインストール手順
この記事の背景(雑談)
2024年現在、インフラ界隈ではコンテナやサーバレスが盛り上がっている。今宵はYAMLでシステム定義してデプロイする時代。そんなご時世の中、若干周回遅れ(?)のAnsible AWXを試そうかと考えた人たちに向けて記事を書きたいと思った。(自身の備忘も兼ねている)
筆者もESXiやKVMなどで沢山の仮想マシンを生成していた頃は「Ansibleをガシガシ書いてシステム構築を自動化してやる!」という熱いモチベーションを持っていた。しかし、Kubernetesを使ったGitOps環境を触ってからはシステム構築はGit上のYAMLを宣言すればよく、わざわざ構築作業を1から10まで順々に宣言しないと使えないシェルスクリプト的なAnsibleのコードを書くのは億劫になってしまった。(とはいえkubernetesを動かすためのLinuxサーバが必要なので中々Ansibleは捨てられない。)
そんな完全には捨てられないAnsibleを使う日々の中で、CLI版のansible-playbook
ではなくWeb GUI版のAWXに移行したら、Git上に置いてあるPlaybookを実行する運用が楽になるのではと考える。そこでAWXの導入方法を調べてみたところ、なんとインストール方法はkubernetes上への展開のみサポートと書かれていた。Ansibleを最も活用したいであろうESXi/KVM世代のサーバエンジニアがAWXを使いたいと思ったらKubernetesもセットになるというのは学習コストが高すぎるような・・・。あまりKubernetesを使ったことがない人間にとってあまり現実的な選択肢ではないと思った。
そこでKubernetesを全然触ったことがないサーバエンジニアでも手軽にAWXをデプロイできる方法があれば便利そうということで、筆者が愛用しているk0sを使ってKubernetesのデプロイとAWXのインストールを一発でやってしまうことにする。
この記事で実現できること
Enterprise Linux(EL)上にAnsible AWXをデプロイする
※ AWXはKubernetes(k8s)が必要なのでk8sディストリビューションはk0sを採用
※ k8sはSingle Nodeで冗長は組まずシステム障害は考慮しない
※ FirewallやHTTPS化などセキュリティ面は考慮しない
前提環境
- Enterprise Linux(EL)
- 筆者はAlma Linux 9.1を使用
- EL8系でも同手順
- Systemdで動くLinuxならEL以外も可能なはず
- インターネットへの接続性
- Kubernetesで明示プロキシは面倒なので直インターネット接続できると望ましい
- サーバエンジニアなら何も考えず透過プロキシ立てた方が楽かもしれない
- IPアドレスをStaticにする
- Kubernetesをインストールした後にIPを変更するのは難しい
- 筆者はAlma Linux 9.1を使用
作業は全てrootユーザで実行
Go言語のインストール
k0sのインストールツールがGo言語なので準備
dnf install -y golang
k0sctlのインストール
k0sを制御するk0sctl
コマンドをインストールする
go install github.com/k0sproject/k0sctl@main
export PATH=~/go/bin:$PATH
echo 'export PATH=~/go/bin:$PATH' > /etc/profile.d/golang.sh
Firewalldのdefault-zoneをtrustedに変更(実質無効化)
kubernetesを動かす上でFirewalldは邪魔なのでzoneをtrustedに変更
trusted zoneだと全通信Allowになるので実質無効
セキュリティを気にする人はチューニング頑張ってください
firewall-cmd --set-default-zone trusted
k0sctl.yamlの準備
k0sctlで使用するコンフィグファイルを準備
コンフィグファイルはコマンド実行時に読み込ませるだけなのでどこに置いても可
筆者はどこに置いたかわかりやすく/etc/k0s/
配下に配置
- k0sctl.yaml
apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:
name: k0s-cluster
spec:
hosts:
- localhost:
enabled: true
role: controller+worker
noTaints: true
hooks:
apply:
before:
- ln -sf /var/lib/k0s/kubelet /var/lib/
reset:
after:
- unlink /var/lib/kubelet
k0s:
# https://github.com/k0sproject/k0s/releases
version: 1.27.2+k0s.0
dynamicConfig: false
config:
apiVersion: k0s.k0sproject.io/v1beta1
kind: ClusterConfig
spec:
network:
kubeProxy:
mode: ipvs
extensions:
storage:
type: openebs_local_storage
helm:
repositories:
- name: bitnami
url: https://charts.bitnami.com/bitnami
- name: wikimedia
url: https://helm-charts.wikimedia.org/stable/
- name: awx-operator
url: https://ansible.github.io/awx-operator/
charts:
- name: postgresql
chartname: bitnami/postgresql
# https://artifacthub.io/packages/helm/bitnami/postgresql
version: 12.2.6
namespace: awx
values: |
global:
storageClass: openebs-hostpath
postgresql:
auth:
postgresPassword: postgres
username: awx
password: awx
database: awx
- name: awx-operator
chartname: awx-operator/awx-operator
# https://github.com/ansible/awx-operator/releases
# https://github.com/ansible/awx/releases
version: 1.3.0
namespace: awx
values: |
AWX:
enabled: true
spec:
service_type: NodePort
nodeport_port: 30080
postgres_storage_class: openebs-hostpath
projects_persistence: true
projects_storage_class: openebs-hostpath
projects_storage_access_mode: ReadWriteOnce
postgres:
enabled: true
host: postgresql
port: 5432
dbName: awx
username: awx
password: awx
sslmode: prefer
type: unmanaged
k0s + AWXインストール
k0sctl.yamlを置いたディレクトリに移動して、インストールコマンドを実行して待つ
cd /etc/k0s
k0sctl apply
完了
インストールしたサーバのスペックにもよるが30分ほど放置した後、
Webブラウザで下記のURLにアクセスするとAWXのWebGUIに繋がる
http://{IPアドレス}:30080/
ログインIDはadmin
でPWは下記のコマンドで出てきた文字列を入力
k0s kubectl get secret -n awx awx-admin-password -o jsonpath="{.data.password}" | base64 --decode ; echo
デプロイ時間は別として、ここまでの作業自体は15分程度で出来たのではないだろうか。
アンインストール
k0sやAWXの調子がおかしくなったり、一度作った環境を作り直したくなった場合
cd /etc/k0s
k0sctl reset
サービス起動・停止・状態確認
k0sはsystemd serviceとして登録されるので、起動停止や状態確認は下記コマンド
systemctl start/stop/status k0scontroller.service
Discussion