AWX Operator を使って外部 PostgreSQL と連携する AWX をデプロイ
Ansible AWX バージョン 18.0 から 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 のログイン画面が表示できたらデプロイ成功です。 お疲れさまでした。