いなほちゅんのひとりごとブログ版

私のメモ帳を公開してみる。

Ansible AWX on Debian on Proxmox VE KVM

Ansible AWX on Debian on Proxmox VE KVM
日付
カテゴリー
シェア

はじめに

構成管理ツールAnsibleの存在を知って家庭内サーバーも管理してみようかと思いました。
しかしコマンドで行うのなら台数がさほど多くないのもあって、面倒さは個別にやるのと大して変わらないかなと思ったので、どうせならとWebUIであるAWXを導入してみることにしました。

前提バージョン

  • Debian GNU/Linux:11.3
  • K3s:1.22+k3s1
  • AWX Operator:0.20.0
  • AWX:20.1.0

仮想マシン

Proxmox VEで下記スペックのKVMの仮想マシンを作成して構築しました。

  • CPU:4コア(タイプ:Host)
  • メモリー:8GB
  • ディスク:32GB

CPUタイプはデフォルトのkvm64だとAWXのデプロイが失敗します。

インストール

Debian

ここではDebian 11.3をネットインストールISOからインストールしました。
またソフトウェアはSSHサーバーと標準システムユーティリティを選択しました。
そしてインストールとデプロイで使用するパッケージをインストールします。 

sudo apt update && sudo apt install -y curl build-essential git

Kubernetes

ここではK3sを使用することにしました。

curl -sfL https://get.k3s.io | sudo sh -s - --write-kubeconfig-mode 644

実行すると以下のように出力されます。

[INFO] Finding release for channel stable
[INFO] Using v1.22.7+k3s1 as release
[INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.22.7+k3s1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.22.7+k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Skipping installation of SELinux RPM
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s

これでk3sが使える状態になります。

--write-kubeconfig-mode 644/etc/rancher/k3s/k3s.yamlのパーミッションを変更して一般ユーザーからでもkubectlを使えるようにするパラメーターです。  

AWX Operator

AWXのデプロイで使用するAWX Operatorを導入します。

ダウンロード

AWX OperatorをGithubからクローンして使用するバージョン(ここでは0.20.0)をチェックアウトします。

cd ~
git clone https://github.com/ansible/awx-operator.git
cd awx-operator
git checkout 0.20.0

デプロイ

AWX OperatorをKubernetesにデプロイします。

export NAMESPACE=awx
make deploy

実行すると以下のように出力されます。

namespace/awx created
customresourcedefinition.apiextensions.k8s.io/awxbackups.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxrestores.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxs.awx.ansible.com created
serviceaccount/awx-operator-controller-manager created
role.rbac.authorization.k8s.io/awx-operator-awx-manager-role created
role.rbac.authorization.k8s.io/awx-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/awx-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/awx-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/awx-operator-awx-manager-rolebinding created
rolebinding.rbac.authorization.k8s.io/awx-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/awx-operator-proxy-rolebinding created
configmap/awx-operator-awx-manager-config created
service/awx-operator-controller-manager-metrics-service created
deployment.apps/awx-operator-controller-manager created

無事にAWX Operatorのデプロイが完了すると下記のようになります。

kubectl -n awx get all

実行すると以下のように出力されます。

NAME                          READY  STATUS  RESTARTS  AGE
pod/awx-operator-controller-manager-557589c5f4-b44gj  2/2   Running  0     52s

NAME                           TYPE    CLUSTER-IP   EXTERNAL-IP  PORT(S)  AGE
service/awx-operator-controller-manager-metrics-service  ClusterIP  10.43.215.137  <none>    8443/TCP  52s

NAME                       READY  UP-TO-DATE  AVAILABLE  AGE
deployment.apps/awx-operator-controller-manager  1/1   1      1      52s

NAME                             DESIRED  CURRENT  READY  AGE
replicaset.apps/awx-operator-controller-manager-557589c5f4  1     1     1    52s

AWX

今回はAWXのデプロイに参考サイトの設定をベースに使用します。

ダウンロード

Githubからクローンして使用するバージョン(ここでは0.20.0)をチェックアウトします。

cd ~
git clone https://github.com/kurokobo/awx-on-k3s.git
cd awx-on-k3s
git checkout 0.20.0

まずbase/awx.yamlのhostnameを自分が使用するホスト名(例:awx.inaho.space)に置き換えます。

---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx
spec:
  admin_user: admin
  admin_password_secret: awx-admin-password

  ingress_type: ingress
  ingress_tls_secret: awx-secret-tls
  hostname: awx.inaho.space

  postgres_configuration_secret: awx-postgres-configuration

  postgres_storage_class: awx-postgres-volume
  postgres_storage_requirements:
    requests:
      storage: 8Gi

  projects_persistence: true
  projects_existing_claim: awx-projects-claim

  web_resource_requirements: {}
  task_resource_requirements: {}
  ee_resource_requirements: {}

つづいてbase/kustomization.yamlpasswordを実際に使用するパスワードに変更します。
またhttpsで接続するための証明書をbase/tls.crt、秘密鍵をbase/tls.keyに配置します。

---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: awx

generatorOptions:
  disableNameSuffixHash: true

secretGenerator:
  - name: awx-secret-tls
    type: kubernetes.io/tls
    files:
      - tls.crt
      - tls.key

  - name: awx-postgres-configuration
    type: Opaque
    literals:
      - host=awx-postgres
      - port=5432
      - database=awx
      - username=awx
      - password=Ansible123!
      - type=managed

  - name: awx-admin-password
    type: Opaque
    literals:
      - password=Ansible123!

resources:
  - namespace.yaml
  - pv.yaml
  - pvc.yaml
  - awx.yaml

ディレクトリ

今回使用する設定ファイルに定義してあるディレクトリを作成します。

sudo mkdir -p /data/postgres
sudo mkdir -p /data/projects
sudo chmod 755 /data/postgres
sudo chown 1000:0 /data/projects

デプロイ

AWXをKubernetesにデプロイします。

kubectl apply -k base

実行すると以下のように出力されます。

namespace/awx configured
secret/awx-admin-password created
secret/awx-postgres-configuration created
secret/awx-secret-tls created
persistentvolume/awx-postgres-volume created
persistentvolume/awx-projects-volume created
persistentvolumeclaim/awx-projects-claim created
awx.awx.ansible.com/awx created

デプロイ状況は下記のように確認できます。

kubectl -n awx logs -f deployments/awx-operator-controller-manager -c awx-manager

以下のような表示が出たらデプロイは完了です。

:
:
----- Ansible Task Status Event StdOut (awx.ansible.com/v1beta1, Kind=AWX, awx/awx) -----


PLAY RECAP *********************************************************************
localhost         : ok=66  changed=0  unreachable=0  failed=0  skipped=43  rescued=0  ignored=0  


----------

確認は下記のように出来ます。

kubectl -n awx get awx,all,ingress,secrets

実行すると以下のように出力されます。

NAME           AGE
awx.awx.ansible.com/awx  8m26s

NAME                          READY  STATUS  RESTARTS  AGE
pod/awx-operator-controller-manager-557589c5f4-b44gj  2/2   Running  0     30m
pod/awx-postgres-0                   1/1   Running  0     8m5s
pod/awx-5d484c4ccd-44jcq                4/4   Running  0     7m26s

NAME                           TYPE    CLUSTER-IP   EXTERNAL-IP  PORT(S)  AGE
service/awx-operator-controller-manager-metrics-service  ClusterIP  10.43.215.137  <none>    8443/TCP  30m
service/awx-postgres                   ClusterIP  None      <none>    5432/TCP  8m5s
service/awx-service                    ClusterIP  10.43.72.116  <none>    80/TCP   7m29s

NAME                       READY  UP-TO-DATE  AVAILABLE  AGE
deployment.apps/awx-operator-controller-manager  1/1   1      1      30m
deployment.apps/awx                1/1   1      1      7m26s

NAME                             DESIRED  CURRENT  READY  AGE
replicaset.apps/awx-operator-controller-manager-557589c5f4  1     1     1    30m
replicaset.apps/awx-5d484c4ccd                1     1     1    7m26s

NAME              READY  AGE
statefulset.apps/awx-postgres  1/1   8m5s

NAME                  CLASS  HOSTS           ADDRESS    PORTS   AGE
ingress.networking.k8s.io/awx-ingress  <none>  pve-awx01.ad.inaho.space  172.16.0.201  80, 443  7m28s

NAME                         TYPE                 DATA  AGE
secret/default-token-6hkjg              kubernetes.io/service-account-token  3   30m
secret/awx-operator-controller-manager-token-5mb9b  kubernetes.io/service-account-token  3   30m
secret/awx-admin-password              Opaque                1   8m26s
secret/awx-postgres-configuration          Opaque                6   8m26s
secret/awx-secret-tls                kubernetes.io/tls           2   8m26s
secret/awx-app-credentials              Opaque                3   7m32s
secret/awx-token-bslqh                kubernetes.io/service-account-token  3   7m31s
secret/awx-secret-key                Opaque                1   8m19s
secret/awx-broadcast-websocket            Opaque                1   8m13s

ログイン

ブラウザーでbase/awx.yamlに設定したホスト(例:https://awx.inaho.space)にアクセスするとこのような画面が現れます。  

Ansible AWX on Debian on Proxmox VE KVM 1枚目
AWX ログイン画面

初期ユーザーはadmin、パスワードはbase/kustomization.yamlawx-admin-passwordです。

おわりに

Kubernetesをまったく知らない私がAWXをなんとかデプロイできました。  
最初CPUタイプをkvm64のままにしてたらデプロイがエラー終了ばかりで数日悩みました。
ある日ググったらKVMのCPUタイプが云々という英語の記事に出会って解決できました。
ホストPCのCPUはXeon E5-2650L v3だけど大丈夫と思いたい。
とりあえずAWXを構築してからAnsibleを使い始めたけど結構便利です。
まだ定期的にソフトウェア更新を実行するくらいにしか使ってないけど、今後はいろんな使い方を考えようと思います。

参考サイト

アーカイブ

タグ

ページの先頭へ