[Ansible] Tìm hiểu về AWX – Phần 7

Tác giả: 18/04/2023

AWX là một giao diện đồ họa cho người dùng của Ansible. Hiện tại Ansible đang là một công cụ quản lý cấu hình, triển khai tự động vô cùng phổ biến. Nhưng việc thao tác với Ansible hầu hết sử dụng trên CLI, việc này khiến cho người dùng phải biết cách sử dụng Linux, biết cách quản lý sắp xếp các playbook, roles trong các thư mục của người viết kịch bản Ansible-playbook trước đó.

Hoặc khi một công ty quyết định sẽ vận hành hệ thống bằng Ansible (chạy định kỳ backup, khởi tạo user tự động, cleanup hệ thống) thì làm sao để người quản tị vận hành hệ thống dễ dàng thao tác với Ansible mà không cần phải truy xuất vào máy chủ để chạy lệnh?

Do đó, AWX ra đời để giải quyết các vấn đề trên.

I. Tổng quan về AWX

AWX là một phần mềm cung cấp giao diện web cho người dùng, REST API và các công cụ thực thi dựa trên Ansible. Đây là một upstream project cho phần mềm Ansible Tower của RedHat

Lợi ích khi sử dụng AWX:

  • Giao diện dễ sử dụng
  • Quản lý phân quyền
  • Lưu lại log khi thực thi
  • Lập lịch thực thi
  • Quản lý Inventory

Các thành phần trong AWX:

  • AWX Engine: vai trò Ansible engine thực thi các thành phần trong Ansible
  • Nginx: vai trò webserver cung cấp giao diện web cho người dùng
  • PostgreSQL: vai trò DB Server lưu trữ dữ liệu khởi tạo, dữ liệu log sinh ra trong quá trình Ansible thực thi
  • Redis: vai trò cache server

II. Cài đặt AWX

Hiện tại AWX đang được cộng đồng đóng góp rất nhiều nên có sự khác biệt về tính năng và giao diện giữa các phiên bản. Các phương thức triển khai AWX container cũng ngày càng được mở rộng phát triển, hiện có như Openshift, K8s, Docker-compose.

Nhưng ở 2 phiên bản 18.x.x và 19.x.x đang chỉ hỗ trợ triển khai bằng minikube.

Ở bài hướng dẫn này mình sẽ sử dụng AWX phiên bản 17.1.0 bằng Docker-compose để mọi người làm quen với AWX trước khi đi đến những bài toán sizing phức tạp hơn.

1. Mô hình hệ thống

Vì ta sẽ thực hiện cài đặt AWX dựa trên các Container được build sẵn, các file Docker compose có sẵn trên repository của AWX nên mình sẽ miêu tả hệ thống qua hình vẽ này:

Lưu ý trong bài lab này mình sẽ sử dụng OS là CentOS 7.

2. Hướng dẫn cài đặt

Cài đặt epel repo và update các package

yum -y install epel-release
yum -y update

Cài đặt các gói cần thiết

yum install git wget vim python3-pip

Cấu hình SELinux và tắt Firewall

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl disable --now firewalld

Thiết lập hostname cho máy chủ (optional)

hostnamectl set-hostname awx-server

Khởi động lại hệ thống

init 6

Cài đặt Ansible

yum -y install ansible

Cài đặt và cấu hình Docker. Cài các gói cần thiết

yum install -y yum-utils device-mapper-persistent-data lvm2

Cấu hình repo docker-ce

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Cài đặt Docker

yum -y install docker-ce

Thêm người dùng hiện tại vào nhóm docker

usermod -aG docker $(whoami)

Khởi động và enable service Docker

systemctl daemon-reload
systemctl enable docker --now

Mở Iptables rule để có thể NAT các địa chỉ container

iptables -P FORWARD ACCEPT

Cài đặt Docker-compose. Cài đặt các gói cần thiết

yum -y install rust cargo python3-devel libevent-devel openssl-devel gcc 
pip3 install setuptools-rust 
pip3 install wheel
pip3 install docker

Cài đặt Docker-compose

pip3 install docker-compose

Kiểm tra hoạt động

docker-compose --version

Cài đặt AWX. Đầu tiên thiết lập cấu hình cert và key để sử dụng SSL/TLS

cat <<EOF >>/etc/ssl/certs/awx.cnf
[req]
prompt = no
distinguished_name = req_distinguished_name
#req_extensions = v3_req

[req_distinguished_name]
countryName                     = VN
stateOrProvinceName             = HaNoi
localityName                    = Hanoi
0.organizationName              = NhanHoa
organizationalUnitName          = Infrastructure
commonName                      = Self-signed
emailAddress                    = trungvb@nhanhoa.com.vn
EOF

Khởi tạo Cert và Key

openssl req -x509 -nodes -config /etc/ssl/certs/awx.cnf -days 3650 -newkey rsa:2048 -keyout /etc/ssl/certs/awx.key -out  /etc/ssl/certs/awx.crt

Khởi tạo một chuỗi key ngẫu nhiên để cấu hình secret key cho AWX, lưu lại output

openssl rand -base64 30

Clone repository của AWX từ Github

git clone https://github.com/ansible/awx.git

Chuyển đến thư mục awx vừa clone về

cd awx/

Checkout tag

git checkout tags/17.1.0

Khởi tạo thư mục lưu trữ dữ liệu cho PostgreSQL, thư mục này sẽ được mount vào thư mục lưu dữ liệu trong container của PostgreSQL

mkdir -p /var/lib/awx/pgdocker

Đi vào thư mục installer

cd installer/

Cấu hình tệp inventory như dưới đây, bạn có thể chỉnh sửa các thông tin như port, admin_password,…

localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python3"
[all:vars]
dockerhub_base=ansible
awx_task_hostname=awx
awx_web_hostname=awxweb
postgres_data_dir="/var/lib/awx/pgdocker" # Khai báo thư mục lưu project
host_port=80 # Khai báo port Nginx muốn sử dụng
host_port_ssl=443
ssl_certificate="/etc/ssl/certs/awx.crt"
ssl_certificate_key="/etc/ssl/certs/awx.key"
docker_compose_dir="~/.awx/awxcompose"
pg_username=awx
pg_password=awxpass
pg_database=awx
pg_port=5432
admin_user=admin
admin_password=Ir0xwOQP # Khai báo password của bạn
create_preload_data=True
secret_key=5OdA6APAPll6DM2zdYtMR9ahrMstUKvddPNn4W4P #đã khởi tạo ở bước 3
project_data_dir=/var/lib/awx/projects # Khai báo thư mục lưu data tạo ở bước 7

Thực hiện chạy playbook cài đặt AWX

ansible-playbook -i inventory install.yml

Kiểm tra container được khởi tạo

docker ps -a

Truy cập địa chỉ https://ip-address và đăng nhập bằng tài khoản với username là admin và password đã nhập trước đó

Lưu ý: Nếu muốn thay đổi mật khẩu tài khoản admin, ta thực hiện:

docker exec -it awx_web bash
awx-manage changepassword admin

Done!

Tổng kết

Qua bài viết này, Nhân Hòa đã giới thiệu tổng quan về AWX cũng như cách cài đặt nó, ở những bài viết kết tiếp, chúng ta sẽ cùng đi qua một số cách sử dụng cơ bản của công cụ này nhé.

Mình là Vương Bảo Trung, hiện đang học việc tại Nhân Hòa, các bạn hãy tiếp tục theo dõi các bài viết về Linux của mình tại Wiki Nhân Hòa.

 

Chúc các bạn luôn may mắn và thành công trong công viêc!

Trả lời