Giới thiệu và hướng dẫn triển khai AWX

Hiện tại Ansible đang là một công cụ quản lý cấu hình, triển khai tự độ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 cách quản lý sắp xếp các playbooks, 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 trị 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?

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

1. Giới thiệu 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 host target)

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ò Web Server cung cấp giao diện web cho người dùng.
  • PostgreSQL – vai trò Database 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

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

Hiện tại AWX đang được cộng đồng contribute rất nhiều nên có sự khác biệt giữa 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 cộng động mở rộng phát triển, hiện có như Openshift, Kubernetes, Docker-compose.

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

Ở bài hướng dẫn này tôi sẽ hướng dẫn cài đặt 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.

2.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. Vậy nên tôi sẽ miêu tả hệ thống tôi sẽ cài đặt qua hình vẽ này:
Mô hình gồm 1 máy chủ cài đặt OS: Centos8

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

Thiết lập ban đầu:

  • Bước 1: Cài đặt repo epel và update các packages:
yum -y install epel-release
yum -y update
  • Bước 2: Cài đặt các gói cần thiết
yum -y install git wget vim python3-pip
  • Bước 3: Cấu hình tắt 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
  • Bước 4: Thiết lập hostname cho máy chủ
hostnamectl set-hostname vm-centos8-awx
  • Bước 5: Reboot
init 6

Cài đặt Ansible:

  • Thực hiện cài đặt Ansible:
yum -y install ansible

Cài đặt và cấu hình Docker:

  • Bước 1: Cài đặt các gói cần thiết
yum install -y yum-utils device-mapper-persistent-data lvm2
  • Bước 2: Cấu hình repo docker-ce
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • Bước 3: Cài đặt Docker
yum -y install docker-ce
  • Bước 4: Thêm người dùng hiện tại vào nhóm docker
usermod -aG docker $(whoami)
  • Bước 5: Khởi động và enable service Docker
systemctl daemon-reload
systemctl enable --now docker.service
  • Bước 6: Mở rule IPtables để có thể NAT các địa chỉ container
iptables -P FORWARD ACCEPT

Cài đặt Docker-compose:

  • Bước 1: 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
  • Bước 2: Cài đặt Docker-compose
pip3 install docker-compose
  • Bước 3: Kiểm tra hoạt động
docker-compose --version

Cài đặt AWX:

  • Bước 1: 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              = Hocchudong
organizationalUnitName          = HCDcontent
commonName                      = 14.225.23.127
emailAddress                    = [email protected]
EOF
  • Bước 2: 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
  • Bước 3: 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
  • Bước 4: Clone repository của AWX từ Github
git clone https://github.com/ansible/awx.git
  • Bước 5: Đi vào thư mục awx/ vừa clone về
cd awx/
  • Bước 6: Checkout tag
git checkout tags/17.1.0
  • Bước 7: Khởi tạo thư mục lưu 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
  • Bước 8: Đi vào thư mục installer/
cd installer/
  • Bước 9: 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
  • Bước 10: Thực hiện chạy plabook cài đặt AWX
ansible-playbook -i inventory install.yml

Kết quả:

  • Kết quả sau khi chạy playbook cài đặt AWX
  • Các container đã được khởi tạo
  • Truy cập địa chỉ https://192.168.10.178
    Đăng nhập bằng tài khoản: username: admin password: Ir0xwOQP
  • Đã đăng nhập thành công!

Bài viết sau tôi sẽ hướng dẫn cách sử dụng AWX <3

Leave a Comment