Install AWX v21.0.0 in Kubernetes with AWX-operator
Tags: awx, ansible, automation, damrongsak
Published: 2022-05-02 10:14:58

ผมมักจะ update ความเป็นมาเป็นไปของ AWX อย่างน้อย ๆ ก็สักปีละครับ หยิบมาดูว่ามีอะไรใหม่ ๆ ไหม แต่ส่วนใหญ่ผมเรียนรู้การใช้งาน AWX อยู่ในรูปแบบ container แบบเครื่องเดียวมาตลอด ปีนี้ลองเปลี่ยนใหม่ หยิบมาลงบน K8s ซะหน่อย 
ตอนแรกก็คิดว่าจะใช้เวลาหลายวัน คงลองผิดลองถูกติดตั้งเสร็จ ปรากฎว่า ไม่ยากอย่างที่คิดนะ แปร๊บบบบบบเดียวก็ได้ใช้แล้ว เสียเวลาตรงที่ node เรามี memory ไม่พอ ติดตั้งรอบแรกเสร็จก็เลยยังใช้ไม่ได้ มาดูครับ ไม่ยากเลย

#ข้อมูลเบื้องต้น

- Kubernetes 1.23.6
- node แต่ละ node มีหน่วยความจำ 8 GB (ครั้งแรกทดลองที่ 2 GB ไม่สามารถทำงานได้)
- awx-operator 0.20.2
- ใช้ Longhorn เป็น Storageฃ
- เครื่องที่ใช้ในการติดตั้งต้องมีข้อมูล kubeconfig เรียบร้อยแล้ว
- เครืื่องที่ใช้ในการติดตั้งมี kubectl ให้พร้อมใช้งาน
- เครื่องที่ใช้ในการติดตั้งมีระบบปฏิบัติการเป็น macOS version 12.3.1


- ติดตั้ง kustomize ที่เครื่อง
```zsh
❯ brew install kustomize
==> Downloading https://ghcr.io/v2/homebrew/core/kustomize/manifests/4.5.4
Already downloaded: /Users/drs/Library/Caches/Homebrew/downloads/4b93fd6dc9174be6d2593f4c63e94d5debc6efcc98907e2397538940cd1f31f7--kustomize-4.5.4.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/kustomize/blobs/sha256:1535062dcc42e6776f9506e12e572e19a5c18017543ece5be92e7c770b53490a
Already downloaded: /Users/drs/Library/Caches/Homebrew/downloads/ee6acdadbe5f876b826fd4191717fd9f71c9d35a6ef8a6c360d9f70927625868--kustomize--4.5.4.monterey.bottle.tar.gz
==> Pouring kustomize--4.5.4.monterey.bottle.tar.gz
==> Caveats
zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
🍺  /usr/local/Cellar/kustomize/4.5.4: 8 files, 13.3MB
==> Running `brew cleanup kustomize`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
```

- สร้าง kustomization.yaml
```yaml
cat >> kustomization.yaml <<EOF
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - github.com/ansible/awx-operator/config/default?ref=0.20.2
images:
  - name: quay.io/ansible/awx-operator
    newTag: 0.20.2
namespace: awx

EOF
```

- เรียกใช้งาน kustomize เพื่อติดตัั้งส่วนประกอบต่าง ๆ ของ awx-operator 
```zsh
❯ 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
```

- ตรวจสอบสถานะของ awx-operator-controller-manager
```
❯ kubectl get pods -n awx
NAME                                               READY   STATUS    RESTARTS   AGE
awx-operator-controller-manager-64976659fc-2c9px   2/2     Running   0          61s
```

- สร้าง Kubernetes Object ชนิด AWX (ซึ่ง ​CRD นี้ถูกติดตั้งในขั้นตอนที่ 3)
```
cat >> awx-demo.yaml << EOF
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-demo
spec:
  service_type: nodeport
EOF
```
###หากต้องการดูคุณสมบัติเพิ่มเติน สามารถดูได้ที่ ```kubectl explain awx --recursive=true```

- แก้ไข kustomization.yaml โดยเพิ่มบรรทัด - awx-demo.yaml ในส่วนของ resources
```
cat >> kustomization.yaml <<EOF
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - github.com/ansible/awx-operator/config/default?ref=0.20.2
  - awx-demo.yaml
images:
  - name: quay.io/ansible/awx-operator
    newTag: 0.20.2
namespace: awx

EOF
```

- เรียกใช้งาน kustomize เพื่อติดตัั้งส่วนประกอบต่าง ๆ ของ awx-operator อีกครั้ง
```
/usr/local/bin/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 unchanged
awx.awx.ansible.com/awx-demo created
```

- รอการติดตั้ง AWX และสามารถตรวจสอบสถานะการติดตั้งได้จาก
```
kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator" -n awx -w
NAME                  READY   STATUS    RESTARTS   AGE
awx-demo-postgres-0   1/1     Running   0          56s
awx-demo-7db56584fb-z5kxc   0/4     Pending   0          0s
awx-demo-7db56584fb-z5kxc   0/4     Pending   0          0s
awx-demo-7db56584fb-z5kxc   0/4     ContainerCreating   0          0s
awx-demo-7db56584fb-z5kxc   4/4     Running             0          5s
```
- ตรวจสอบรหัสผ่านสำหรับ user admin
```
❯ kubectl get secret awx-demo-admin-password -o jsonpath="{.data.password}"  -n awx | base64 --decode
e5SlKNCgfoES69IexQTDH97DmKr8YHVM%
```
- browse ไปที่ ```http://<IP of nodeport>:<nodeport>```
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n9j24hp4ack22nntsyum.png)

- ก้าวแรกกับ AWX
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7pt5njmfh42z6yzzn37w.png)

#####มูลค่าความสุข