Ở bài trước mình đã giới thiệu về Ansible một cách cơ bản cho dễ hiểu, các bạn có thể xem lại ở đây, tiếp theo thì sẽ cài đặt và run thử xem sao nhé.
Chuẩn bị tài nguyên
Để thực hành bài lab này ta cần dựng ít nhất 3 server :
- Server thứ nhất dùng để quản lý các cấu hình sử dụng Ansible tự động cho server thứ hai và server thứ ba tức là bạn chỉ cần thao tác trên server này thôi.
- 2 server còn lại sẽ đóng vai trò như máy mục tiêu để Ansible điều khiển.
Cài đặt Ansible và sử dụng ansible
Để có thể cài đặt nhanh chóng hơn các bạn có thể tạo 1 file bash script để có thể tự động chạy và cài đặt. Tạo thư mục setup, tiến hành truy cập đến thư mục đó và tạo file script cài đặt trong đó nội dung file như sau:
mkdir -p /home/setup; cd /home/setup; vim install_ansible.sh
- Đối với ubutu
#!/bin/bash
# Install required packages
sudo apt update
sudo apt install -y software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install -y ansible
# Install Ansible via pip
sudo apt install -y python3-pip
sudo pip3 install ansible
- Đối với CentOS
yum -y update
yum -y install epel-release
yum -y install ansible
$ chmod +x install_ansible.sh
thêm quyền thực thi cho file
$ ./install_ansible.sh
chạy file cài đặt Ansible
Việc cài đặt Ansible default khá đơn giản, mặc đinh ansible ở folder /etc/ansible. Trong đó file /etc/ansible/ansible.cfg để quy định các hoạt động của Ansible như quyết định cùng một thời điểm sẽ có bao nhiêu device được thực thi các task cùng một lúc (forks), hay ssh timeout,… là những thứ cần chú ý trong Ansible.
Ansible hỗ trợ tham số --forks
để xác định số lượng máy chủ mục tiêu sẽ được thực hiện đồng thời. Mặc định, giá trị của --forks
là 5. Bạn có thể điều chỉnh giá trị này để tăng hoặc giảm số lượng máy chủ đồng thời thực hiện.
Ví dụ: ansible-playbook --forks 10 playbook.yml
sẽ thực hiện playbook trên 10 máy chủ cùng một lúc
Tiếp theo sẽ là thử chạy mẫu ansible xem nó hoạt động như thế nào
Cấu hình inventory
Inventory File chứa thông tin về các host mà các bạn sẽ quản lý bằng Ansible. Các bạn có thể include từ một đến hàng nghìn server bên trong Inventory File và các hosts có thể được sắp xếp vào trong các nhóm hoặc nhóm nhỏ hơn.
Bên cạnh đó, Inventory File cũng thường được sử dụng để thiết lập các biến chỉ hợp lệ cho một vài hosts hoặc nhóm cụ thể, nhằm có thể được sử dụng trong các playbooks và templates. Một vài biến có thể tác động tới cách mà một playbook chạy, ví dụ như biến ansible_python_interpreter
mà một lát sau chúng ta sẽ tìm hiểu.
Để chỉnh sửa nội dung của Inventory mặc định trên Ansible Control Node của các bạn, hãy mở file /etc/ansible/hosts
bằng một editor mà các bạn thường dùng:
vi /etc/ansible/hosts
Inventory File mặc định được cung cấp bởi Ansible chứa một số các ví dụ mà các bạn có thể sử dụng để tham khảo khi tự viết hay thiết lập một Inventory File. Sau đây, là một ví dụ định nghĩa một nhóm có tên là [target]
với hai server khác nhau ở bên trong, mỗi server được định danh bằng tên target1, targer2 . Hãy thay đổi địa chỉ IP được in đậm thành địa chỉ IP của Ansible hosts của các bạn.
[target]
target1 ansible_host=10.10.100.180
target2 ansible_host=10.10.100.190
[all:vars]
ansible_user=root
ansible_ssh_private_key_file=/root/.ssh/id_rsa
Ở đây, một subgroups có tên là [all:vars]
đã thiết lập tham số của host ansible_python_interpreter
sẽ được xem là hợp lệ cho tất cả các host nào mà đã include file Inventory này. Tham số này giúp đảm bảo remote server sử dụng đường dẫn /usr/bin/python3
(Python 3) để thực thi thay vì /usr/bin/python
(Python 2.7), phiên bản hiện không có mặt trên các phiên bản của Ubuntu.
Sau khi đã thiết lập xong, hãy lưu và đóng file lại bằng cách nhấn CTRL+X
, sau đó Y
và ENTER
để xác nhận thay đổi.
Để kiểm tra lại file Inventory, các bạn có thể nhập lệnh:
ansible-inventory --list -y
Các bạn sẽ thấy output tương tự như thế này, nhưng sẽ chứa thông tin của server của chính các bạn như đã được định nghĩa.
all:
children:
target:
hosts:
target1:
ansible_host: 10.10.100.180
ansible_ssh_private_key_file: /root/.ssh/id_rsa
ansible_user: root
target2:
ansible_host: 10.10.100.190
ansible_ssh_private_key_file: /root/.ssh/id_rsa
ansible_user: root
ungrouped: {}
Tiếp theo để có thể từ máy chủ thứ nhất thực hiện các tác vụ lên máy chủ thứ hai và ba chúng ta sẽ sử dụng ssh
$ ssh-keygen -t rsa
tạo keygen
$ ssh-copy-id root@10.10.100.180
copy keygen của tài khoản server thứ nhất sang server thứ hai và nhập password server thứ hai
$ ssh-copy-id root@10.10.100.190
copy keygen của tài khoản server thứ nhất sang server thứ ba và nhập password server thứ ba
Vậy là bây giờ bạn có thể thực hiện các tác vụ từ server thứ nhất rồi.
Trong bài hướng dẫn này, chúng ta sử dụng tài khoản root của Ubuntu bởi vì đó thường là tài khoản có sẵn trên bất kì một servers nào mới được tạo. Nếu Ansible hosts của các bạn đã có sẵn một sudo user thì các bạn nên sử dụng tài khoản đó.
Sử dụng tham số -u
để chỉ định user cho remote system. Nếu không chỉ định user, Ansible sẽ kết nối bằng quyền của user hiện trên hệ thống Control Node.
Trên Ansible Control Node, chạy lệnh sau:
ansible all -m ping
Lệnh này sẽ sử dụng ping
module được xây dựng sẵn trong Ansible để chạy kiểm tra kết nối trên tất cả các node từ Inventory mặc định của các bạn và sẽ kết nối như quyền root. ping
module sẽ kiểm tra các thông tin sau:
- Có thể truy cập đến hosts được hay không.
- Các bạn có chứng chỉ SSH hợp lệ hay không.
- Host có thể chạy các modules trong Ansible bằng Python hay không.
Các sẽ nhận được output tương tự như này:
(root@anible)# ansible all -m ping
target1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
target2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
Nếu đây là lần đầu tiên kết nối đến các servers này thông qua SSH, các bạn sẽ được yêu cầu xác thực tính authen của các host đang kết nối bằng Ansible. Khi được yêu cầu, hãy nhập yes
và sau đó nhấn ENTER
để xác nhận.
Khi các bạn nhận được “pong
” phản hồi ngược lại từ một host, điều đó có nghĩ là bạn đã có thể chạy các lệnh Ansible và playbooks trên server đó.
Chạy lệnh Ad-Hoc (Không bắt buộc)
Sau khi xác nhận rằng Ansible Control Node đã có thể tương tác với các host, các bạn có thể bắt đầu chạy lệnh ad-hoc và playbooks trên những server đó.
Bất kì command nào mà thường có thể thực thi được trên remote server qua SSH thì có thể chạy được với Ansible trên những servers được chỉ định trong file Inventory. Ví dụ, các bạn có thể kiểm tra được RAM trên tất cả các servers bằng lệnh:
(root@anible)# ansible all -a "free -h"
target1 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 7.7Gi 1.1Gi 530Mi 10Mi 6.2Gi 6.4Gi
Swap: 0B 0B 0B
target2 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 7.7Gi 665Mi 3.3Gi 12Mi 3.8Gi 6.8Gi
Swap: 0B 0B 0B
Lời kết
Qua bài viết trên, bạn đã biết cách cài đặt Ansible và file Inventory để thực thi các lệnh ad-hoc từ một Ansible Control Node. Khi đã xác nhận là có thể kết nối đến được servers của mình từ Ansible, bạn có thể thực thi các lệnh bất kỳ hoặc playbook mà mình muốn trên các host đó. Qua đó đã nắm cơ bản cách sử dụng Ansible và có thể áp dụng vào trong những project thực tế mà các bạn đang phát triển.
Ở bài tiếp theo chúng ta sẽ tìm hiểu về Playbook và thực hành cài đặt một số service thông qua Ansible. Các bạn có thể theo dõi Series này tại đây để theo dõi series này nhé.
Nếu thấy bài viết hướng dẫn về cấu hình và cài đặt Ansible trên Ubuntu 20.04 hay và hữu ích, các bạn hãy chia sẻ với mọi người nhé.
Tài liệu tham khảo :
https://docs.ansible.com/ansible/latest/installation_guide/index.html