【作業時間30分】Ansible AWXのインストール手順
2024/11/16 修正
リポジトリURLなどが変更されていて動かなくなっていたので修正しました。
伴って実行バージョンも少し新しくしてデプロイにFluxCDを使うようにしました。
(参考までに筆者が動かせたバージョンの組み合わせになります。)
- Alma Linux 9.4
- k0s 1.30.6+k0s.0
- flux-operator 0.10.0
- openebs 3.10.0
- postgresql 12.12.10(pgsql 15.4.0)
- awx-operator 2.19.1
この記事の背景(雑談)
CLI版のansible-playbook
に比べてWeb GUI版のAWXの大きなメリットとして、AWXにはGit上に置いてあるPlaybookやInventoryを都度Pullして実行する機能があること。PlaybookやInventoryを常にGit上でメンテナンスできるのはリビジョン管理やバックアップの観点からとても優れている。そこでAWXの導入方法を調べてみたところ、なんとインストール方法はkubernetes上への展開のみサポート。あまりKubernetesを使ったことがない人間にとってあまり現実的な選択肢ではない。
そこでKubernetesを全然触ったことがないエンジニアでも手軽にAWXをデプロイできれば便利そうということで、筆者が愛用しているk0sを使ってKubernetesのデプロイとAWXのインストールを一発でやってしまうことにする。
この記事で実現できること
Enterprise Linux(EL)上にAnsible AWXをデプロイする
※ AWXはKubernetes(k8s)が必要なのでk8sディストリビューションはk0sを採用
※ kubernetesはSingle Nodeで冗長は組まずシステム障害は考慮しない
※ FirewallやTLSなどセキュリティ面は考慮しない
前提環境
- Enterprise Linux(EL)
- 筆者はAlma Linux 9.4を使用
- Systemdで動くLinuxならEL以外も可能なはず
- インターネットへの接続性が必要
- Kubernetesで明示プロキシは面倒なので直インターネット接続できると望ましい
- もしプロキシが必要ならKubernetesの前段に透過プロキシ立てた方が楽かもしれない
- IPアドレスをStaticで固定する
- Kubernetesをインストールした後にIPを変更するのは難しい
- 筆者はAlma Linux 9.4を使用
作業は全てrootユーザで実行
RPMでGo言語のインストール
k0sのインストールツールがGo言語なので下準備
dnf install -y golang
export PATH=~/go/bin:$PATH
echo 'export PATH=~/go/bin:$PATH' > /etc/profile.d/golang.sh
新しいGo言語のインストール
EL9のrpmで提供されるGo言語は古いので、新しいバージョンを追加インストール
go install golang.org/dl/go1.23.3@latest
go1.23.3 download
k0sctlのインストール
k0sを制御するk0sctl
コマンドをインストールする
go1.23.3 install github.com/k0sproject/k0sctl@main
Firewalldを無効化
kubernetesでACLをかけたい場合、kubernetes内のNetworkPolicyというものを使用する。
systemctl disable --now firewalld
k0sctl.yamlの準備
k0sctlで使用するコンフィグファイルを準備
コンフィグファイルはコマンド実行時に読み込ませるだけなのでどこに置いても可
筆者はどこに置いたかわかりやすい/etc/k0s/
配下に配置
- k0sctl.yaml
apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:
name: k0s-local
spec:
hosts:
- localhost:
enabled: true
role: controller+worker
noTaints: true
k0s:
# https://github.com/k0sproject/k0s/releases
version: 1.30.6+k0s.0
dynamicConfig: false
config:
apiVersion: k0s.k0sproject.io/v1beta1
kind: ClusterConfig
spec:
network:
kubeProxy:
mode: ipvs
extensions:
helm:
concurrencyLevel: 1
repositories:
- name: wikimedia
url: https://helm-charts.wikimedia.org/stable/
charts:
- name: flux-operator
chartname: oci://ghcr.io/controlplaneio-fluxcd/charts/flux-operator
version: 0.10.0
namespace: flux-system
order: 1
timeout: 5m
values: ""
- name: flux-operator-instance
chartname: wikimedia/raw
namespace: flux-system
order: 2
timeout: 5m
values: |
resources:
-
apiVersion: fluxcd.controlplane.io/v1
kind: FluxInstance
metadata:
name: flux
spec:
distribution:
version: "2.x"
registry: "ghcr.io/fluxcd"
artifact: "oci://ghcr.io/controlplaneio-fluxcd/flux-operator-manifests"
cluster:
type: kubernetes
- name: flux-operator-config
chartname: wikimedia/raw
namespace: flux-system
order: 3
timeout: 5m
values: |
resources:
-
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: openebs-internal
namespace: flux-system
spec:
interval: 24h
url: https://openebs.github.io/charts
-
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: awx-operator
namespace: flux-system
spec:
interval: 24h
url: https://ansible-community.github.io/awx-operator-helm/
-
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: postgresql
namespace: flux-system
spec:
interval: 24h
type: oci
url: oci://registry-1.docker.io/bitnamicharts/
-
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: openebs
namespace: flux-system
spec:
targetNamespace: openebs
interval: 5m
chart:
spec:
chart: openebs
version: '3.x.x'
sourceRef:
kind: HelmRepository
name: openebs-internal
namespace: flux-system
interval: 5m
install:
createNamespace: true
crds: CreateReplace
remediation:
retries: 10
upgrade:
crds: CreateReplace
remediation:
retries: 10
dependsOn: []
values:
localprovisioner:
hostpathClass:
enabled: true
isDefaultClass: true
-
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: postgresql
namespace: flux-system
spec:
targetNamespace: awx
interval: 5m
chart:
spec:
chart: postgresql
version: '12.x.x'
sourceRef:
kind: HelmRepository
name: postgresql
namespace: flux-system
interval: 5m
install:
createNamespace: true
crds: CreateReplace
remediation:
retries: 10
upgrade:
crds: CreateReplace
remediation:
retries: 10
dependsOn:
- name: openebs
values:
global:
storageClass: openebs-hostpath
postgresql:
auth:
postgresPassword: postgres
username: awx
password: awx
database: awx
-
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: awx-operator
namespace: flux-system
spec:
targetNamespace: awx
interval: 5m
chart:
spec:
chart: awx-operator
version: '2.x.x'
sourceRef:
kind: HelmRepository
name: awx-operator
namespace: flux-system
interval: 5m
install:
createNamespace: true
crds: CreateReplace
remediation:
retries: 10
upgrade:
crds: CreateReplace
remediation:
retries: 10
dependsOn:
- name: postgresql
values:
AWX:
enabled: true
spec:
service_type: NodePort
nodeport_port: 30080
projects_persistence: true
projects_storage_class: openebs-hostpath
projects_storage_access_mode: ReadWriteOnce
postgres:
enabled: true
host: awx-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は下記のコマンドで出てきた文字列を入力
ログイン後にダッシュボード上でPWを変更することも可能
k0s kubectl get secret -n awx awx-admin-password -o jsonpath="{.data.password}" | base64 --decode ; echo
デプロイ時間は別として、ここまでの作業自体は30分程度で出来たのではないだろうか。
アンインストール
調子がおかしくなったり、一度作った環境を作り直したくなった場合
cd /etc/k0s
k0sctl reset
Discussion