Ansible AWX バージョン 18.0 から AWX Operator を使うインストール方法に変更されました。
https://github.com/ansible/awx-operator
AWX Operator を使うと Kubernetes クラスタへの AWX デプロイが簡単にできます。
標準的な設定では AWX 関連のコンテナをまとめた Pod と一緒に PostgreSQL Pod もデプロイされますが、今回は AWX Operator 管理外の PostgreSQL インスタンスと連携するように AWX をデプロイします。
環境情報
ソフトウェア | バージョン |
---|---|
Kubernetes | 1.21.2 |
AWX | 19.3.0 |
AWX Operator | 0.13.0 |
Zalando Postgres Operator | 1.6.3 |
AWX Operator
AWX Operator は公式の マニュアル 手順通りにインストールしていきます。
特筆する点はないのでマニュアルを参照してください。
PostgreSQL
AWX で利用する PostgreSQL インスタンスは Zalando Postgres Operator を使って用意します。
Operator のインストール方法は下記の投稿を参照してください。
以下の postgresql
リソースのマニフェストで、AWX 用の PostgreSQL インスタンスがデプロイされます。
apiVersion: acid.zalan.do/v1
kind: postgresql
metadata:
labels:
team: acid
name: acid-awx
namespace: awx
spec:
allowedSourceRanges: []
databases:
awx: awx
numberOfInstances: 1
postgresql:
version: '13'
resources:
limits:
cpu: 500m
memory: 500Mi
requests:
cpu: 100m
memory: 100Mi
teamId: acid
users:
awx: []
volume:
size: 10Gi
patroni:
pg_hba:
- local all all trust
- hostssl all +zalandos 127.0.0.1/32 pam
- host all all 127.0.0.1/32 md5
- hostssl all +zalandos ::1/128 pam
- host all all ::1/128 md5
- hostssl replication standby all md5
- hostssl all +zalandos all pam
- hostssl all all 0.0.0.0/0 md5
- host all all 0.0.0.0/0 md5
postgresql
リソースでデプロイされる registry.opensource.zalan.do/acid/spilo-13
コンテナは pg_hba.conf
が以下のようになっています。
# Do not edit this file manually!
# It will be overwritten by Patroni!
local all all trust
hostssl all +zalandos 127.0.0.1/32 pam
host all all 127.0.0.1/32 md5
hostssl all +zalandos ::1/128 pam
host all all ::1/128 md5
hostssl replication standby all md5
hostnossl all all all reject
hostssl all +zalandos all pam
hostssl all all all md5
この状態では AWX コンテナからアクセスできないため、上記のように spec.patroni.pg_hba
で定義します。
また、postgresql
マニフェストでは StorageClass を指定するか、クラスタの StorageClass にデフォルト設定をしておきます。
$ kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 69d
rook-ceph-block (default) rook-ceph.rbd.csi.ceph.com Delete Immediate true 12d
うまくデプロイできると以下のリソースが作成されています。
$ kubectl get pods,svc,secret,pvc
NAME READY STATUS RESTARTS AGE
pod/acid-awx-0 1/1 Running 0 2d
pod/awx-operator-69c646c48f-cgkbl 1/1 Running 2 8d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/acid-awx ClusterIP 10.107.168.117 <none> 5432/TCP 2d
service/acid-awx-config ClusterIP None <none> <none> 2d
service/acid-awx-repl ClusterIP 10.104.194.254 <none> 5432/TCP 2d
service/awx-operator-metrics ClusterIP 10.105.177.117 <none> 8383/TCP,8686/TCP 8d
NAME TYPE DATA AGE
secret/awx-operator-token-8rdhp kubernetes.io/service-account-token 3 8d
secret/awx-postgres-configuration Opaque 7 2d
secret/awx.acid-awx.credentials Opaque 2 2d
secret/default-token-m56vf kubernetes.io/service-account-token 3 8d
secret/postgres.acid-awx.credentials Opaque 2 2d
secret/standby.acid-awx.credentials Opaque 2 2d
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/pgdata-acid-awx-0 Bound pvc-d47938d5-fd94-4bcb-865f-467fd8647b82 10Gi RWO rook-ceph-block 2d
このうち、secret/awx.acid-awx.credentials
に AWX から PostgreSQL にアクセスするための認証情報が格納されているので、以下のコマンドで確認しておきます。
$ kubectl get secret awx.acid-awx.credentials -o jsonpath='{.data.password}' | base64 -d
AWX
PostgreSQL インスタンスを用意できたら AWX をデプロイします。
必要なものは AWX Operator が参照する AWX
リソースと Secret
リソースのマニフェストです。
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx
namespace: awx
spec:
admin_user: admin
admin_password_secret: awx-admin-password
ingress_type: ingress
ingress_tls_secret: awx-secret-tls
hostname: awx.k8s.nnstt1.work
postgres_configuration_secret: awx-postgres-configuration
AWX
リソースの spec
で AWX の各種設定をおこないます。
今回は Ingress の設定、admin ユーザと外部 PostgreSQL の設定を格納した secret の指定をおこないました。
Secret
リソースでは、上記の secret を作成します。
apiVersion: v1
kind: Secret
metadata:
name: awx-admin-password
namespace: awx
stringData:
password: password
---
apiVersion: v1
kind: Secret
metadata:
name: awx-postgres-configuration
namespace: awx
stringData:
host: acid-awx
port: "5432"
database: awx
username: awx
password: oqIgEGDuCDG40LI2tIQ4OdIUtdKFGiLDkAbUiCyrZgMnKFSTZrQsQmihtTnOkvdH
sslmode: prefer
type: unmanaged
type: Opaque
stringData
は Zalando Postgres Operator で構築した PostgreSQL インスタンスの情報を記載します。
stringData.type
には unmanaged
を指定します。
この値により、AWX Operator が「PostgreSQL インスタンスを自前で構築する」か「外部 PostgreSQL を参照する」かを判断します。
(「Secret リソースの内容で Operator の挙動を変える」って仕様がよろしくなさそうに感じたんですがどうなんでしょう?)
上記のマニフェストを Apply することで、AWX Operator がいい感じに AWX をデプロイしてくれます。
うまく AWX から PostgreSQL にアクセスできたら初期構築が始まります、そこそこ時間が掛かるようなので気楽に待ちましょう。 自分の環境では 15 分ほど掛かかりました。
初期構築も完了したら Ingress 経由でアクセスします。 今回のマニフェストでは AWX へのアクセスは Ingress 経由になるため、NGINX Ingress Controller などを使ってクラスタで Ingress を使えるように事前に準備しておいてください。
AWX のログイン画面が表示できたらデプロイ成功です。 お疲れさまでした。