はじめに
AWXバージョン21をk3s上にawx-operatorで構築します。
構築手順は、整理したらそんなに複雑ではなかったです。また、Githubにはminikubeを例にした構築手順が載っていますが、k3sは軽いというし触ってみたかったので。
- はじめに
- 更新2023.03.28
- 環境
- Ubuntuのパッケージアップデート
- k3sのインストール
- Kustomizeのインストールとマニフェストの適用
- AWXのインストール(マニフェストの追加)
- AWXにアクセス
- その他
- 参考
更新2023.03.28
いくつかワーニングが出ますが、以下の環境(latest)でも同じ手順で構築できました。
環境
- AWX: 21.14(latest)
- OS: Ubuntu 22.04
- k3s: v1.25.7(latest)
- kustomize: v5.0.1(latest)
- awx-operator: 1.4.0
環境
EC2に構築します。
- AWX: 21.4
- OS: Ubuntu 22.04
- k3s: v1.24.3
- kustomize: v4.5.7
- awx-operator: 0.26.0
Ubuntuのパッケージアップデート
パッケージを最新に上げます。
$ sudo apt update $ sudo apt upgrade -y $ sudo reboot # OKを押す
k3sのインストール
1行でインストールできます。
インストール後、サービスが起動完了するまで少々待ちます。
$ sudo curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644 [INFO] Finding release for channel stable [INFO] Using v1.24.3+k3s1 as release [INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.24.3+k3s1/sha256sum-amd64.txt [INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.24.3+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
オプションについて
- --write-kubeconfig-mode 644
- 後の工程でパーミッションエラーとなるため、644に設定しています。
エラーメッセージ
error: error loading config file "/etc/rancher/k3s/k3s.yaml": open /etc/rancher/k3s/k3s.yaml: permission denied
Kustomizeのインストールとマニフェストの適用
Kustomizeは、マニフェスト管理ツールです(今回初めて触りました)。
Kustomizeをインストールし、マニフェストを作成・適用します。
マニフェストには、awx-operatorのバージョンを指定します。
$ sudo curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash {Version:kustomize/v4.5.7 GitCommit:56d82a8378dfc8dc3b3b1085e5a6e67b82966bd7 BuildDate:2022-08-02T16:35:54Z GoOs:linux GoArch:amd64} kustomize installed to /home/ubuntu/kustomize $ $ $ vi kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: # Find the latest tag here: https://github.com/ansible/awx-operator/releases - github.com/ansible/awx-operator/config/default?ref=0.26.0 # 任意のバージョンを指定 # Set the image tags to match the git version from above images: - name: quay.io/ansible/awx-operator newTag: 0.26.0 # 任意のバージョンを指定 # Specify a custom namespace in which to install AWX namespace: awx $ $ $ sudo ./kustomize build . | kubectl apply -f - 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 $ $ $ kubectl get pods -n awx NAME READY STATUS RESTARTS AGE awx-operator-controller-manager-7f89bd5797-89w7b 2/2 Running 0 4m5s
AWXのインストール(マニフェストの追加)
AWXをデプロイするawx-demo.yamlの作成と、kustomization.yamlのresourcesにawx-demo.yamlを追加します。
awx-demo.yamlのportは適宜変更してください。
- AWXをデプロイするawx-demo.yamlの作成
$ vi awx-demo.yaml --- apiVersion: awx.ansible.com/v1beta1 kind: AWX metadata: name: awx-demo spec: service_type: nodeport # default nodeport_port is 30080 nodeport_port: 30080
$ vi kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: # Find the latest tag here: https://github.com/ansible/awx-operator/releases - github.com/ansible/awx-operator/config/default?ref=0.26.0 - awx-demo.yaml # この行を追加 # Set the image tags to match the git version from above images: - name: quay.io/ansible/awx-operator newTag: 0.26.0 # Specify a custom namespace in which to install AWX namespace: awx
- マニュフェストの適用
$ sudo ./kustomize build . | kubectl apply -f - namespace/awx unchanged customresourcedefinition.apiextensions.k8s.io/awxbackups.awx.ansible.com unchanged customresourcedefinition.apiextensions.k8s.io/awxrestores.awx.ansible.com unchanged customresourcedefinition.apiextensions.k8s.io/awxs.awx.ansible.com unchanged serviceaccount/awx-operator-controller-manager unchanged role.rbac.authorization.k8s.io/awx-operator-awx-manager-role configured role.rbac.authorization.k8s.io/awx-operator-leader-election-role unchanged clusterrole.rbac.authorization.k8s.io/awx-operator-metrics-reader unchanged clusterrole.rbac.authorization.k8s.io/awx-operator-proxy-role unchanged rolebinding.rbac.authorization.k8s.io/awx-operator-awx-manager-rolebinding unchanged rolebinding.rbac.authorization.k8s.io/awx-operator-leader-election-rolebinding unchanged clusterrolebinding.rbac.authorization.k8s.io/awx-operator-proxy-rolebinding unchanged configmap/awx-operator-awx-manager-config unchanged service/awx-operator-controller-manager-metrics-service unchanged deployment.apps/awx-operator-controller-manager configured awx.awx.ansible.com/awx-demo created
- AWXの構築
ログを確認しながら、インストール完了まで待ちます。
$ kubectl logs -f deployments/awx-operator-controller-manager -c awx-manager -n awx (略) --------------------------- Ansible Task StdOut ------------------------------- TASK [Remove ownerReferences reference] ******************************** ok: [localhost] => (item=None) => {"censored": "the output has been hidden due to the fact that 'no_log: true' was specified for this result", "changed": false} ------------------------------------------------------------------------------- {"level":"info","ts":1662367322.9867978,"logger":"runner","msg":"Ansible-runner exited successfully","job":"3826332412612488260","name":"awx-demo","namespace":"awx"} ----- Ansible Task Status Event StdOut (awx.ansible.com/v1beta1, Kind=AWX, awx-demo/awx) ----- PLAY RECAP ********************************************************************* localhost : ok=69 changed=0 unreachable=0 failed=0 skipped=50 rescued=0 ignored=0 ---------- Ctrl+cで抜けます
awx-demoのステータスがRunningになったら、portとadminパスワードを確認します。
$ kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator" -n awx NAME READY STATUS RESTARTS AGE awx-demo-postgres-13-0 1/1 Running 0 3m25s awx-demo-858b46b795-rqj2j 4/4 Running 0 2m54s $ $ $ kubectl get svc -l "app.kubernetes.io/managed-by=awx-operator" -n awx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE awx-demo-postgres-13 ClusterIP None <none> 5432/TCP 9m52s awx-demo-service NodePort 10.43.66.172 <none> 80:30080/TCP 9m23s # ポートの確認 $ $ $ kubectl get secret awx-demo-admin-password -o jsonpath="{.data.password}" -n awx | base64 --decode qJcokXXXXXXXXXXXXX # パスワードの確認
AWXにアクセス
AWXにブラウザで接続します。
- URL: http://IPアドレス:30080
- ユーザ名: admin
- パスワード: 上記コマンドで確認したパスワード
無事アクセスでき、DEMOジョブテンプレートも動きました。
その他
UIもそうだけど、ワークフローテンプレートが作り方が結構変わっていて興味深い。
トポロジーは小規模ならそこまで気にしなくていいのかな?コントローラーと実行ノードが分かれているだけで、この辺りは使いやすそう。
参考
大変助かりました!