1. Mở đầu
Chào mừng bạn đến bài viết hướng dẫn về cách cài đặt Ansible AWX trên Ubuntu 20.04|18.04 với Nginx Reverse Proxy và sử dụng mã hóa Let’s Encrypt SSL Certificate. Ansible AWX là một chương trình mã nguồn mở, cung cấp tính năng giao diện web interface, REST API, và giúp các kỹ sư quản lý các task của Ansible Playbook dễ dàng hơn.
AWX cho phép bạn quản lý tập trung các Ansible playbook, inventories, Secrets, các scheduled job từ giao diện web. Nó khá dễ dàng để cài đặt trên Ubuntu 20.04|18.04 (Bionic Beaver). Tiếp theo đây, chúng tôi sẽ chia sẻ các bước để có thể cài đặt và cấu hình Ansible AWX trên server Ubuntu 20.04|18.04 .
2. Yêu Cầu
- Ubuntu 20.04|18.04 LTS Server
- tối thiểu 8GB of RAM
- tối thiểu 4 cpu
- 10GB free disk storage
- có quyền root hoặc quyền sudo
3. Cài Đặt
Bước 1: Cập nhật hệ thống ubuntu
Update và upgrade hệ thống
sudo apt update && sudo apt -y upgrade
sudo reboot
Bước 2: Cài đặt Single Node k3s Kubernete
Chúng ta sẽ deploy single node kubernetes với tool k3s. K3s là một tool hỗ trợ để triển khai môi trường K8s trên môi trường Production, nó có ưu điểm là chúng ta có thể thêm/bớt các Worker node một cách dễ dàng và nhanh chóng.
K3s cung cấp một scritps hỗ trợ việc cài đặt, rất tiện lợi.
Chạy câu lệnh sau để tiến hành cài đặt K3s trên ubuntu:
curl -sfL https://get.k3s.io | sudo bash -
Quá trình cài đặt bắt đầu:
[INFO] Finding release for channel stable
[INFO] Using v1.21.3+k3s1 as release
[INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.21.3+k3s1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.21.3+k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[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
Xác nhận cài đặt K3s
Tiếp theo, ta sẽ kiểm tra lại xem việc cài đặt K3s có thành công hay không bằng việc sử dụng câu lệnh kubectl
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ubuntu Ready control-plane,master 33s v1.21.3+k3s1
Chúng ta cũng kiểm tra luôn phiên bản của Kubernetes với câu lệnh:
$ kubectl version --short
Client Version: v1.21.3+k3s1
Server Version: v1.21.3+k3s1
K3s service sẽ được cấu hình tự động restart khi node reboot hoặc process bị crash hoặc bị kill.
Bước 3: Deploy AWX Operator trên Kubernetes ( K8s )
Kubernetes Operator này được deploy lên Kubernetes cluster, dùng để quản lý một hoặc nhiều AWX instance trên toàn bộ namespace.
Kiểm tra trạng thái các pods đang running
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system metrics-server-86cbb8457f-8kk5w 1/1 Running 0 5m4s
kube-system local-path-provisioner-5ff76fc89d-jwmc7 1/1 Running 0 5m4s
kube-system coredns-7448499f4d-bk4r7 1/1 Running 0 5m4s
kube-system helm-install-traefik-crd-mm782 0/1 Completed 0 5m4s
kube-system helm-install-traefik-zbwwl 0/1 Completed 1 5m4s
kube-system svclb-traefik-k7kjh 2/2 Running 0 4m52s
kube-system traefik-97b44b794-hdlfg 1/1 Running 0 4m52s
Chạy câu lệnh sau để deploy AWX Operator vào cluster:
kubectl apply -f https://raw.githubusercontent.com/ansible/awx-operator/devel/deploy/awx-operator.yaml
Command output:
customresourcedefinition.apiextensions.k8s.io/awxs.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxbackups.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxrestores.awx.ansible.com created
clusterrole.rbac.authorization.k8s.io/awx-operator created
clusterrolebinding.rbac.authorization.k8s.io/awx-operator created
serviceaccount/awx-operator created
deployment.apps/awx-operator created
Đợi một vài phút, bạn sẽ thấy pods awx-operator ở trạng thái running:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
awx-operator-545497f7d5-dgjs8 1/1 Running 0 84s
Bước 4: Cài đặt Ansible AWX trên Ubuntu 20.04/18.04 sử dụng Operator
Tạo một PersistentVolumeClaim
(PVC) để lưu trữ dữ liệu : Tham khảo AWX data persistence:
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: static-data-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 2Gi
EOF
Tiếp đến, tạo một file AWX deployment với các thông tin cơ bản như sau:
vim awx-deploy.yml
Paste các nội dung sau vào file:
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx
spec:
service_type: nodeport
projects_persistence: true
projects_storage_access_mode: ReadWriteOnce
web_extra_volume_mounts: |
- name: static-data
mountPath: /var/lib/awx/public
extra_volumes: |
- name: static-data
persistentVolumeClaim:
claimName: static-data-pvc
Chúng ta vừa định nghĩa resource name là awx và service type là NodePort để có thể truy cập được dịch vụ, bạn có thể tìm hiểu thêm cách tạo Ingress cho K8s tại đây.
Apply file cấu hình:
$ kubectl apply -f awx-deploy.yml
awx.awx.ansible.com/awx created
Đợi một vài phút, vầ kiểm tra trạng thái AWX:
$ kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"
NAME READY STATUS RESTARTS AGE
awx-postgres-0 1/1 Running 0 75s
awx-7c5d846c88-mjlvm 4/4 Running 0 64s
Fix Postgres Pod báo lỗi CrashLoopBackOff
Kiểu tra trạng thái của PostgreSQL Pod:
$ kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"
NAME READY STATUS RESTARTS AGE
awx-postgres-0 0/1 CrashLoopBackOff 4 2m38s
awx-66c64f8d67-qvfk9 3/4 ImagePullBackOff 0 2m27s
Kiểm tra Logs của Pod:
[quads id=1]$ kubectl logs awx-postgres-0
mkdir: cannot create directory ‘/var/lib/postgresql/data’: Permission denied
Điều này có nghĩa là Pod của Postgres không có quyền để ghi vào persistent volume: /var/lib/rancher/k3s/storage/:
# ls -lh /var/lib/rancher/k3s/storage/ | grep awx-postgres-0
total 0
drwx------ 3 root root 4.0K Aug 24 09:18 pvc-b2acb2d0-6d2f-457b-a40c-390cff5ec6d2_default_postgres-awx-postgres-0
Set quyền 777 cho thư mục
# chmod -R 777 /var/lib/rancher/k3s/storage/*
# kubectl delete pods -l "app.kubernetes.io/managed-by=awx-operator"
pod "awx-66c64f8d67-qvfk9" deleted
pod "awx-postgres-0" deleted
Đợi vài giây và kiểm tra lại Postgres container pod sẽ thấy running:
# kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"
NAME READY STATUS RESTARTS AGE
awx-postgres-0 1/1 Running 0 42s
awx-66c64f8d67-4qmh5 4/4 Running 0 42s
Bạn cũng có thể kiểm tra logs của Pods bằng cách sau:
$ kubectl logs -f deployments/awx-operator
Như vậy, dữ liệu trong database sẽ được lưu trữ lâu dài trong persistent volume mà ta đã tạo từ trước:
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
postgres-awx-postgres-0 Bound pvc-c0149545-8631-4aa1-a03f-2134a7f42aa6 8Gi RWO local-path 84s
static-data-pvc Bound pvc-6b6005de-0888-4634-b0a2-d5cc92eb85cc 1Gi RWO local-path 2m10s
awx-projects-claim Bound pvc-91e751e9-0e8e-40c8-9953-f8d9db5f612b 8Gi RWO local-path 77s
kiểm tra thử volume local-path-provisioner và host path:
$ ls /var/lib/rancher/k3s/storage/
pvc-edb29795-7dae-4a00-805f-2d989694fe3d_default_postgres-awx-postgres-0
Bước 5: Truy cập Ansible AWX Dashboard
List ra tất cả service đang chạy và kiểm tra port Nodeport của awx-service
$ kubectl get svc -l "app.kubernetes.io/managed-by=awx-operator"
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
awx-postgres ClusterIP None <none> 5432/TCP 2m5s
awx-service NodePort 10.43.182.53 <none> 80:32708/TCP 116s
Bạn có thể chỉnh sửa Node Port nhưng lưu ý giá trị của port phải lớn hơn ( >= ) 32000
$ kubectl edit svc awx-service
....
ports:
- name: http
nodePort: 32000
port: 80
protocol: TCP
targetPort: 8052
Xác nhận lại thay đổi:
$ kubectl get svc -l "app.kubernetes.io/managed-by=awx-operator"
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
awx-postgres ClusterIP None <none> 5432/TCP 8m58s
awx-service NodePort 10.43.182.53 <none> 80:32000/TCP 8m49s
Ansible AWX web portal giờ đã sẵn sàng truy cập tại: http://hostip_or_hostname:32000

Đăng nhập với username là admin
Để lấy password admin, chúng ta sẽ làm như sau:
kubectl get secret awx-admin-password -o jsonpath="{.data.password}" | base64 --decode
Hoặc định dạng lại output:
kubectl get secret awx-admin-password -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'
Sau khi lấy được password, ta tiến hành đăng nhập:

Giao diện mới của AWX được thiết kế khá bắt mắt 😀

Review lại tài nguyên của Kubernetes Node, để đảm bảo là nó đủ để chạy AWX:
$ kubectl top nodes --use-protocol-buffers
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
ubuntu 102m 1% 2534Mi 15%
4. Kết bài
Như vậy, chúng ta vừa đi qua các bước để có thể cài đặt và cấu hình AWX, một chương trình giúp các kỹ sư quản lý dễ dàng, linh hoạt hơn các task của Ansible.
Chúc các bạn thành công !
Nguồn:
[maxbutton id=”2″ ] [maxbutton id=”3″ ]
Đăng ký liền tay Nhận Ngay Bài Mới
Subscribe ngay
Cám ơn bạn đã đăng ký !
Lỗi đăng ký !
Add Comment