This page looks best with JavaScript enabled

[Dành cho Beginner] Phần 1: Ansible Là Gì? Hướng Dẫn Cài Đặt Ansible? Viết 1 Playbook đơn giản

 ·  ☕ 4 phút đọc · 👀... views

Trong một môi trường với nhiều server thì ta sẽ có vô vàn thứ phải lo. Từ setup crontab, update các gói phần mềm mới, deploy ứng dụng mới, chỉnh sửa file cấu hình…. Những công việc này tuy không khó, nhưng rất mất thời gian của những người quản trị (SysAdmin/SysEngineer/DevOps).

Vậy có cách nào để tự động hóa những thao tác nhàm chán, lặp đi lặp lại này không?
“Cùng một việc mà làm quá 2 lần thì có gì đó không ổn rồi”
Từ một giảng viên cũ từng dạy mình

Câu trả lời chính là ứng dụng những tool automation để quản trị hệ thống. Hiện nay có rất nhiều tool như vậy trên thị trường cụ thể như: Chef, Puppet, CFEngine, StackStorm, Ansible, SaltStack… Trong bài này, mình sẽ giới thiệu đến các bạn một công cụ rất mạnh mẽ trong việc quản trị hệ thống, đó chính là Ansible.

1. Giới thiệu Ansible

Như đã nói ở trên, Ansible là một công cụ dùng để tự động hóa việc cấu hình trên nhiều server. So với các công cụ khác với tính năng tương đương thì Ansible dễ học và dễ tiếp cận hơn rất nhiều. Cộng đồng người dùng cũng nhiều hơn so với
các công cụ khác.
So sánh một vài thông số về Ansible, SaltStack, Chef, Puppet trên GitHub (11/2018)

Có thể thấy Ansible là công cụ tự động hóa phổ biến nhất trên GitHub với số sao được người dùng bình chọn cho project này là 33,500 sao. Ansible cũng là tool dễ tiếp cận và làm quen do được build bằng Python và sử dụng file cấu hình theo dạng YAML (YAML Ain’t Markup Language) dễ đọc và dễ hiểu.

2. Kiến trúc

Ansible sử dụng kiến trúc agentless để giao tiếp với các máy khác mà không cần agent. Cơ bản nhất là giao tiếp thông qua giao thức SSH trên Linux, WinRM trên Windows hoặc giao tiếp qua chính API của thiết bị đó cung cấp.

Ansible có thể giao tiếp với rất nhiều platform, OS và loại thiết bị khác nhau. Từ Ubuntu, CentOS, VMware, Windows cho tới AWS, Azure, các thiết bị mạng Cisco và Juniper….vân vân và mây mây….(hoàn toàn không cần agent khi giao tiếp).

Chính cách thiết kế này làm tăng tính tiện dụng của Ansible do không cần phải setup bảo trì agent trên nhiều host. Có thể coi đây là một thế mạnh của Ansible so với các công cụ có cùng chức năng như Chef, Puppet, SaltStack (Salt thì hỗ trợ cả 2 mode là agent và agentless, có thời gian thì mình sẽ viết 1 bài về Salt).

3. Ứng dụng

Ansible có rất nhiều ứng dụng trong triển khai phần mềm và quản trị hệ thống.

  • Provisioning: Khởi tạo VM, container hàng loạt trong môi trường cloud dựa trên API (OpenStack, AWS, Google Cloud, Azure…)
  • Configuration Management: Quản lý cấu hình tập trung các dịch vụ tập trung, không cần phải tốn công chỉnh sửa cấu hình trên từng server.
  • Application Deployment: Deploy ứng dụng hàng loạt, quản lý hiệu quả vòng đời của ứng dụng từ giai đoạn dev cho tới production.
  • Security & Compliance: Quản lý các chính sách về an toàn thông tinmột cách đồng bộ trên nhiều môi trường và sản phẩm
  • khác nhau (deploy policy, cấu hình firewall hàng loạt trên nhiều server…).

4. Cài đặt Ansiable

Bước 1: Tạo EC2

Trên AWS tạo 03 Launch template cho EC2 sử dụng AMI: Amazon Linux 2, Ubuntu 20, RedHat. Chú ý Advanced network configuration chọn Auto IP Public: Enable

Tiến hành ssh vào EC2 ubuntu

Tạo 1 thư mục, trong thư mục đó chúng ta sẽ tạo 1 file host để lưu ip của 2 máy EC2 còn lại như sau

Sau đó chúng ta chạy lệnh

ansible -i hosts webserver -m ping

Sẽ có 1 lỗi như sau bởi chúng ta chưa có private key để ssh vào 2 máy EC2 còn lại

Chúng ta sẽ phải tải file lên máy EC2 ubuntu này với lệnh sau:

1
scp -i web1.pem web1.pem ubuntu@16.162.23.244:/home/ubuntu/.ssh


Bạn lần lượt gõ 2 lệnh này để convert file pem thành private key và tạo public key để ssh tới 2 máy EC2 còn lại

Nếu vẫn chưa được bạn sẽ phải thêm ansible_ssh_user=ec2-user

Chạy lệnh sau chúng ta sẽ được kết quả

Tiếp theo chúng ta sẽ thao tác với playbook trong Ansible, chúng ta sẽ viết 1 playbook đơn giản như sau:

1
2
3
- hosts: webserver
  tasks:
    - ping:

Sau đó chúng ta chạy lệnh sau với playbook.yml là file chúng ta sẽ viết code ở trên

1
ansible-playbook -i hosts playbook.yaml

Kết quả chúng ta sẽ được như sau:

Bài viết lần này của mình dừng lại ở đây, ở phần sau chúng ta sẽ cùng tìm hiểu sâu hơn về Ansible nhé!

Chia sẻ
Support the author with

Hùng Phạm
Viết bởi
Hùng Phạm
Web/Mobile Developer