Tự động cài đặt AWX bằng Minikube và Ansible

Giới thiệu

Khi việc sử dụng ảo hóa (VM và bộ chứa) mở rộng nhanh chóng ở nhiều tổ chức, quản lý máy chủ ảo cần phải tự động hóa để giải quyết các tác vụ tẻ nhạt và lặp đi lặp lại. Ansible là  một công cụ mạnh mẽ để tự động hóa, triển khai và quản lý cấu hình vốn trước đây yêu cầu phải hoạt động trên giao diện dòng lệnh (CLI). Phiên bản nguồn mở của Ansible Tower là AWX – giao diện người dùng (UI) dựa trên web cho Ansible. Khi muốn khám phá cách thức hoạt động của AWX, chúng tôi nhanh chóng nhận ra rằng các hướng dẫn cài đặt AWX hiện tại cần rất nhiều lần thử và sai để thực hiện thành công. Blog này trình bày cách thực hiện quy trình cài đặt đáng tin cậy và cũng giải thích quá trình tự động hóa quy trình giúp giảm quá trình cài đặt của chúng tôi xuống chỉ còn chạy một lệnh duy nhất. Sự so sánh và lựa chọn của chúng tôi về Giao diện người dùng Ansible từ danh sách 4 tùy chọn sẽ được ghi lại trong blog này nếu bạn muốn tìm hiểu về nỗ lực đó.

Tổng quan về AWX

AWX là một giải pháp giao diện người dùng dựa trên chức năng hỗ trợ Ansible CLI như trực quan hóa việc quản lý máy chủ và trạng thái công việc đang chạy, bao gồm sổ tay Ansible, đặc tả các tham số công việc và xác thực đăng nhập. Vì AWX là phiên bản nguồn mở của sản phẩm doanh nghiệp nên nó có rất ít tài liệu chính thức. Trong quá trình thử nghiệm, chúng tôi đã gặp phải các vấn đề như  thông số phụ thuộc không đủ, không lấy được hình ảnh Docker và không thể trực quan hóa phiên bản AWX của chúng tôi. Có rất nhiều hướng dẫn không chính thức khác nhau, nhưng thật không may, rất ít trong số đó hoạt động đáng tin cậy mà không cần phải gỡ lỗi. Blog này ghi lại một phương pháp đơn giản và đáng tin cậy để cài đặt AWX.

Điều kiện tiên quyết

Mục tiêu của chúng tôi là triển khai AWX trên hệ thống quản lý có thể kết nối với môi trường khối lượng công việc để tự động hóa VM. Điều kiện tiên quyết duy nhất bạn cần để bắt đầu là cài đặt Ansible trong hệ thống quản lý và có sẵn thông tin đăng nhập Docker Hub của bạn . Điều quan trọng là lưu trữ tên người dùng và mật khẩu Docker Hub của bạn trong một tệp có tên secret.enc  trong thư mục vars của playbook theo định dạng sau:

docker_hub_username: <tên người dùng của bạn>

docker_hub_password: <mật khẩu của bạn>

Sau đó, bạn nên mã hóa tệp bằng lệnh tương tự như lệnh bên dưới bằng Ansible Vault .

$ ansible-vault mã hóa secret.enc

Chi tiết hệ thống kiểm tra

Bộ xử lý 8 x CPU Intel® Xeon® Gold 6338 @ 2,00GHz
Ký ức 8GB
Ổ đĩa cứng 128GB
hệ điều hành Ubuntu 18.04.6 LTS
Phiên bản ansible 2.13.1

Bảng 1:  Chi tiết hệ thống

Các thành phần sẽ được Playbook cài đặt triển khai

Phiên bản minikube 1.26.0
Phiên bản docker 20.10.17
Phiên bản Kubernetes 1.21.4

Bảng  2: Các thành phần sẽ được triển khai

Quá trình cài đặt

Hình 1: Tổng quan cấp cao về các thành phần trong quá trình cài đặt

Mục tiêu là có một phiên bản AWX đang chạy có thể truy cập được bằng trình duyệt. Với thiết kế này, người dùng chỉ cần một lệnh để chạy playbook cài đặt AWX. Lệnh này yêu cầu quyền sudo để playbook có thể sử dụng các đặc quyền nâng cao bất cứ khi nào cần thiết. Mật khẩu vault cũng được yêu cầu để sử dụng thông tin đăng nhập Docker Hub được mã hóa được mô tả ở trên để đăng nhập thành công vào Docker. Minikube và Docker được cài đặt tự động theo sổ tay cài đặt. Minikube là xương sống của quá trình cài đặt này và cung cấp các tài nguyên mà phiên bản AWX được cài đặt trên đó. Docker đảm bảo rằng nhóm Minikube đã sẵn sàng để khởi tạo AWX. 

$ ansible-playbook AWX-Install.yml –ask-become-pass -e @vars/secret.enc –ask-vault-pass -e ansible_python_interpreter=/usr/bin/python3

Dưới đây là tóm tắt về quy trình nền cho Playbook Ansible:

1. Playbook cài đặt các điều kiện tiên quyết cần thiết. 

2. Playbook đăng nhập và thiết lập Docker.

3. Phiên bản Minikube được chạy với cấu hình được chỉ định. 

Hình 2: Tạo phiên bản Minikube

4. Bí mật kéo hình ảnh được tạo và vá vào tài khoản dịch vụ dựa trên thông tin xác thực Docker Hub để kéo hình ảnh thành công.

Hình 3: Tạo bí mật kéo hình ảnh

5. Toán tử AWX được triển khai và chạy dưới dạng nhóm [PD1] .

Hình 4: Triển khai Toán tử AWX

Hình 5: Chạy Nhóm toán tử AWX [SM2]

6. Phiên bản AWX được triển khai với 4 nhóm cho phiên bản và 1 nhóm cho postgres.

Hình 6: Triển khai phiên bản AWX

Hình 7: Tệp triển khai (ansible-awx.yml)

Hình 8: Chạy nhóm cho phiên bản AWX và Postgres [SM3]

7. Hiển thị cổng cho phiên bản AWX thông qua chuyển tiếp cổng và hiển thị địa chỉ IP cũng như thông tin đăng nhập để truy cập phiên bản.

Kết quả cài đặt

Sau khi chạy playbook AWX cài đặt Ansible, thông tin đăng nhập bao gồm tên người dùng, mật khẩu và địa chỉ IP có cổng cho phiên bản AWX  sẽ được hiển thị như một phần của đầu ra chi tiết. 

Hình 9: Một ví dụ về đầu ra Playbook với thông tin đăng nhập

Sau đó, bạn có thể truy cập bảng điều khiển cho AWX bằng địa chỉ IP và cổng 32483 của máy chủ với thông tin xác thực đăng nhập được cung cấp từ đầu ra ở trên.

Hình 10: Bảng điều khiển AWX sau khi cài đặt và đăng nhập thành công

Các lỗi thường gặp và giải pháp

Một số lỗi mà bạn có thể gặp phải trong quá trình cài đặt:

  • ImagePullBackOff: Kubernetes không lấy được hình ảnh vùng chứa từ Docker Hub. Điều quan trọng là đảm bảo rằng bạn đã đăng nhập thành công vào Docker Hub bằng Ansible Vault. Bạn cũng có thể đăng nhập thủ công bằng cách sử dụng  docker login nhưng nó kém an toàn hơn.
  • Các lỗi liên quan đến chứng chỉ và kết nối: Đảm bảo rằng tài nguyên VM đủ để chạy Minikube với các thông số kỹ thuật được xác định trước. Nếu nhiều người dùng đang làm việc trên cùng một máy chủ với nhiều cụm Kubernetes, những lỗi như vậy cũng có thể xảy ra do hạn chế về tài nguyên.

Phần kết luận

Blog này giới thiệu một cách nhanh chóng và thuận tiện hơn để cài đặt AWX một cách đáng tin cậy. Với mục tiêu đơn giản là có một phiên bản AWX đang chạy trên máy chủ, blog này trình bày một giải pháp đơn giản để đạt được mục tiêu đó trong khi nhiều hướng dẫn hiện có khác cần nhiều tùy chỉnh và cấu hình hơn để thực hiện triển khai AWX thành công.