Trong phần 1phần 2 ở bài trước, cloud365 đã hướng dẫn bạn cách cài đặt và thử nghiệm với ansible. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn dùng ansible với cơ chế của ad-hoc command để bước đầu phát huy khả năng của ansible trong việc quản lý cấu hình, quản lý ha tầng của bạn.

Như đã đề cập ở mục cuối trong phần 02, sau khi cài đặt ansible xong ta có thể thực hiện một số câu lệnh mà ansible đã hỗ trợ. Việc thực hiện từng câu lệnh đơn như vậy chính là chế độ ad-hoc của ansible.

Với chế độ ad-hoc command mà ansible cung cấp, chúng ta sẽ thực hiện các task đơn (các yêu cầu thực hiện độc lập) để ra lệnh cho hạ tầng (các client được quản lý bởi ansible) thực hiện các yêu cầu rời rạc khi quản lý các client. Tại sao lại dùng ad-hoc command và dùng nó khi nào? Trong phần tiếp theo sẽ lấy các ví dụ cho trường hợp này.

1. Tại sao lại dùng ad-hoc command trong ansible?

Khi vận hành hệ thống, bạn thường xuyên phải lặp đi các thao tác rất cơ bản ví dụ như:

  • Cần phải khởi động lại OS
  • Cần phải khởi động lại mysql hoặc đơn giản là cần phải update các gói phần mềm phổ thông (VIM, WGET ….) trên hàng loạt các máy chủ khác nhau (CentOS, Ubuntu …).
  • Hoặc phải kiểm tra trạng thái của các services chẳng hạn.
  • Hoặc phải thực hiện thao tác copy một file nào đó.
  • Hoặc xem nội dung của file log nào đó.

Nếu ta có 1 vài máy chủ thì các thao tác này rất đơn giản, nhưng giả sử ta cần thực hiện trên hàng chục máy chủ một lúc thì chế độ ad-hoc command của ansible bắt đầu phát huy tác dụng ở đây. Nó sẽ giúp tiết kiệm được thời gian và công sức khi thực hiện các task này trên hàng loạt các máy trong hạ tầng của chúng ta.

2. Thực hành ad-hoc command trong ansible

Trong bài lab này, ta sẽ sử dụng lại mô hình của phần 02 của chuỗi bài viết về ansible này. Do vậy để thực hiện bài lab này thì ta cần thực hiện bài lab số 2 trước.

Mô hình

Topo LAB

IP Planning

IP Planning

Tiếp theo nội dung của bài 02, ta sẽ có thông tin của các host client sau khi cấu hình key-pair ở file /root/.ssh/known_hosts giống như bên dưới.

192.168.80.122 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIO4a8+i/NJBSxF/YKfZ+0zxDThfr6H3aZeXmT7oOq8Dd5sR8KDJhWWl2U6c7jwdP1dOwYtuXYn338j0JV/uo5Y=
192.168.80.123 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqhSkFMYnbIOMz1q3hCOlR26ZCN6h3qqhae2Bk408RK/vyJAC8vPWTqr+Aq0js5JPhtXmYqjp7CTc4euogMR4npNegGgBe87qp0vfnbyRBt4cjVtZo+BVEZUjpjGZrfKNpSQV4MNN58x3WGnaeA3hR+RIsNWV7fdkYKeymf3LG3RopMZzzrTAc1m5LRTI5UBHFX+pxlzV1rNDfrj+kNrpn+BwP22PTc1uT7UDxZq/oGUylxlxBpf+EEhFt4fZ8O5PKE12gC8/5pelNZSB/BiVzMKWP1Wh8qWa9Xs8XMNR7YlE9q3snI1J6H7neTqj0BQ/MuobvQTRPP+PI2krMs/OKw==
192.168.80.124 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPoInuCZJNW4cD2BWkwbbp1gN8XACVFjPGe7IC8kXMjebAW8aHXp2ov+XAU1JveDjknLu0LrEDga3azAqiJDROM=
192.168.80.125 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHoT4uUU+zMq5SjYVpFBOUrMXshdhrePdjWYozrJ2GWmdqww78HsjK18djyMGVMz+E6/HI6IijPyUA7D4iqruj0=

Nội dung của file /etc/ansible/hosts sẽ có dạng

192.168.80.122

[centos6]
192.168.80.123

[ubuntu]
192.168.80.124
192.168.80.125

Thực hiện kiểm tra lại các cấu hình của ansible để xem ansibleserver đã kết nối với client hay chưa.

ansible all --list-hosts

Kết quả như sau là ok

[root@ansibleserver ~]# ansible all --list-hosts
  hosts (4):
    192.168.80.122
    192.168.80.123
    192.168.80.124
    192.168.80.125

3. Thực hiện các câu lệnh ad-hoc

Trong hướng dẫn này chỉ giới thiệu một số cách thực thi ansible theo dạng ad-hoc command cho một số trường hợp cơ bản, trong thực tế thì bạn có thể vận dụng thêm các lệnh khác. Các lệnh này sẽ được tra cứu trên trang của của ansible.

Cú pháp chung của ad-hoc command trong ansible là

ansible [pattern] -m [module] -a "[module options]"

3.1 Thực hiện kiểm tra dung lượng RAM của client

Cú pháp

ansible all -a "free -m"

Ta sẽ có kết kết của RAM trên tất cả các client

Kết quả của lệnh free -m trên 04 client

Ta có thể thay từ all bằng từ centos6 hoặc ubuntu trong file inventory của ansible đã được khai báo ở phần trước. Kết quả như sau:

3.2. Thực hiện reboot hàng loạt các client

Giả sử trong hàng chục client cần quản lý, có một điều kiện sau khi update thì ta phải reboot các máy chủ là với hệ điều hành là Ubuntu. Việc này cũng dễ dàng thực hiện bởi ad-hoc command của ansible.

Với bài lab này, ra có thể thực hiện lệnh sau. Lưu ý ta sẽ chọn host group là ubuntu trong trường hợp này, nếu bạn chọn là all thì toàn bộ các máy trong file inventory mà ansible quản lý sẽ bị reboot.

ansible ubuntu -a "init 6"

Kết quả ta sẽ thấy.

3.3. Thực hiện cài đặt gói ứng dụng hàng loạt

Có một số task vụ cài đặt đơn lẻ (Ví dụ cài đặt apache hoặc cài đặt VIM) trên nhiều client. Với yêu cầu này cũng có thể dùng ad-hoc command của ansible để triển khai.

Ví dụ dưới sẽ thực hiện cài đặt apache trên các máy có hệ điều hành là Ubuntu trong bài lab này.

ansible ubuntu -m apt -a "name=apache2 state=latest"

Trong ad-hoc command này ta sẽ sử dụng module apt mà ansible đã hỗ trợ sẵn cho ubuntu. Trong quá trình cài đặt ta sẽ thấy thông báo như bên dưới trên phía ansibleserver. Lưu ý module apt chỉ support đối với Ubuntu.

[root@ansibleserver ~]# ansible ubuntu -m apt -a "name=apache2 state=latest"
192.168.80.124 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "cache_update_time": 1578034386,
    "cache_updated": false,
....
....
192.168.80.125 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "cache_update_time": 1578034682,
    "cache_updated": false,
    "changed": true,

Ta có thể kiểm tra lại xem apache đã được cài trên nhóm ubuntu hay chưa bằng lệnh ansible ubuntu -a "apache2 -v". Kết quả ta sẽ thấy như bên dưới.

[root@ansibleserver~]# ansible ubuntu -a "apache2 -v"
192.168.80.124 | CHANGED | rc=0 >>
Server version: Apache/2.4.18 (Ubuntu)
Server built:   2019-10-08T13:31:25

192.168.80.125 | CHANGED | rc=0 >>
Server version: Apache/2.4.29 (Ubuntu)
Server built:   2019-09-16T12:58:48

Sau đó có thể truy cập vào các máy ubuntu để kiểm tra xem apache đã được cài đặt hay chưa.

Ta cũng có thể thử nghiệm việc cài đặt VIM trên toàn bộ các client bằng lệnh .

 ansible all -m apt -a "name=vim state=latest"

Ta sẽ có kết quả như bên dưới.

Ta sẽ thấy có thông báo lỗi ở 02 client 192.168.80.122 và 192.168.80.123, lý do là vì ta sử dụng module apt trong ansible nên với CentOS chúng sẽ không thực hiện và báo lỗi. Việc này sẽ không bị ảnh hưởng gì tới các máy CentOS cả.

3.4. Sử dụng ad-hoc command để thu thập thông tin của client

Ta có thể sử dụng lệnh dưới ở chế độ ad-hoc command để thu thập thông tin về các client được ansible quản lý.

ansible all -m setup

Ngoài các ad-hoc comamnd cơ bản trên, ta còn có thể sử dụng để thực hiện các nhiệm vụ khá hữu ích khác, ví dụ như tạo user, tạo file cho hàng loạt client. Hãy trải nghiệm tiếp để khá phá nhiều hơn về ansible bạn nhé.

Trong bài viết tiếp theo, cloud365 sẽ hướng dẫn bạn sử dụng ansible để viết một playbook đơn giản. Cách mà được rất nhiều anh/em dev, sysadmin, devops … sử dụng với ansible để tự động hóa và quản lý hạ tầng.

Cám ơn các bạn đã theo dõi.