Ansible là gì?
Ansible là công cụ quản lý cấu hình ( Configuration Management – CM), cho phép tự động hóa công việc của sysadmin/devops.
– Là công cụ mã nguồn mở dùng để quản lý cài đặt, cấu hình hệ thống một cách tập trung.
– Sử dụng SSH (PowerShell) và các module được viết bằng Python để điều khiển hệ thống
– Sử dụng YAML (Yet Another Markup Language) để xây dựng cấu trúc mô tả hệ thống và sử dụng định dạng JSON để hiện thị thông tin
1. Đặc điểm của Ansible
- Không cần cài đặt phần mềm lên các remote host, chỉ cài đặt trên máy control machine
- Không phải service/daemon, chỉ cần thực thi khi được gọi
- Bảo mật cao (sử dụng giao thức SSH)
- Cú pháp dễ đọc, dễ học và dễ hiểu ( sử dụng YAML)
2. Yêu cầu cài đặt
- OS: Unix, Windows
- Thư viện python-jinja2: dùng để xây dựng template cấu hình
- Thư viện python-yaml: hỗ trợ cấu trúc YAML
- Python-2.4+
3. Cài đặt Ansible
Cài đặt trên CentOS/RHEL
sudo yum install ansible
Cài đặt trên Ubuntu
Thêm repo PPA và cài đặt ansible
sudo add-apt-repository ppa:ansible/ansible-2.6
sudo apt-get update
sudo apt-get install ansible
4. Cấu hình
Máy ansible giao tiếp với các hosts qua giao thức SSH. Để an toàn hơn trong kết nối SSH và cho phép quản lý và cấu hình thuận tiện hơn, chúng ta sử dụng SSH Keys.
4.1 Trên host (server01-192.168.1.100)
a. sử dụng CentOS (server01-192.168.1.100)
– Tạo tài khoản
useradd keepwalking
passwd keepwalking
- Cho phép keepwalking sử dụng sudo với not password
echo "%keepwalking ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/keepwalking
b. Sử dụng Ubuntu (server02-192.168.1.111)
– Tạo tài khoản
useradd keepwalking -m -s /bin/bash
- Cho phép keepwalking sử dụng sudo với not password
echo "%keepwalking ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/keepwalking
4.2 Trên máy Ansible (control machine)
- Tạo tài khoản keepwalking
useradd keepwalking
passwd keepwalking
- Cho phép keepwalking sử dụng sudo
echo "%keepwalking ALL=(ALL) ALL" >/etc/sudoers.d/keepwalking
- Login keepwalking và tạo SSH Keys
ssh-keygen -C "Key for KeepWalking"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/keepwalking/.ssh/id_rsa):
Created directory '/home/keepwalking/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/keepwalking/.ssh/id_rsa.
Your public key has been saved in /home/keepwalking/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:pxzD/LoBSGBMOdAy2Ekt5eSjOtSKrD5q85qMxvhAi4Q key for keepwalking
The key's randomart image is:
+---[RSA 2048]----+
|oB==o |
|+.O=. |
| o o= |
|. .o o o |
|E+... . S . |
|B.o o * |
|O+ + . |
|=O. o |
|O**. o. |
+----[SHA256]-----+
– Copy public key đến các remote hosts
ssh-copy-id -i ~/.ssh/id_rsa.pub keepwalking@192.168.1.100
ssh-copy-id -i ~/.ssh/id_rsa.pub keepwalking@192.168.1.111
4.3 Cấu hình quản lý host và group trên Ansible ( Hosts Inventory)
– Khai báo hosts vào tệp tin /etc/ansbile/hosts
Chúng ta có thể sử dụng name, ipaddress để khai báo hosts trong tệp tin /etc/ansible/hosts
Khi số lượng hosts lớn, để dễ quản lý các host theo từng danh mục, chúng ta có thể phân chia các hosts thành các group.
Thay vì sử dụng DNS, chúng ta cũng có thể tạo các host name ở tệp tin /etc/hosts, ví dụ
192.168.1.100 web01
192.168.1.102 web02
192.168.1.111 db01
192.168.1.112 db02
Rõ ràng khai báo theo tên ngắn gọn và dễ nhớ hơn, vì vậy chúng ta sẽ khai báo các hosts trong tệp tin /etc/ansible/hosts như sau:
[webservers]
web01
web02
[databases]
db01
db02
Nếu không cần sử dụng đến tệp tin /etc/hosts, thì để sử dụng host name ta thêm biến ‘ansible_ssh_host’ vào tệp tin /etc/ansible/hosts
[webservers]
web01 ansible_ssh_host=192.168.1.100
web02 ansible_ssh_host=192.168.1.102
[database]
db01 ansible_ssh_host=192.168.1.111
db02 ansible_ssh_host=192.168.1.112
Một số biến có thể bổ sung vào tệp tin /etc/ansible/hosts như:
ansible_ssh_user, ansible_ssh_private_key_file, ansible_ssh_port, ansible_ssh_host (có thể viết ngắn gọn là: ansible_user, ansible_port, ..)
Tham khảo thêm tại: https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
5. sử dụng cơ bản (Ad-hoc command)
Một số tùy chọn khi sử dụng lệnh ansible
-i : inventory host, xác định tên tin khai báo hosts (mặc định /etc/ansible/hosts)
-m : gọi module của ansible (mặc định là command) –> có thể tham khảo all module http://docs.ansible.com/ansible/list_of_all_modules.html
-a : command được gửi vào module
-u : user
-k : password
-s : sudo (từ ansible-2.6 bị cảnh báo là DEPRECATION)
-K : sudo password
-v (verbose), -vv (..), -vvvv : debug option
Tham khảo đầy đủ tại đây
Ping thử host web01 xem nào
ansible web01 -m ping
web01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Kiểm tra không gian các phân vùng ổ cứng
ansible db01 -m shell -a 'df -T'
db01 | SUCCESS | rc=0 >>
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 xfs 39269648 910548 38359100 3% /
devtmpfs devtmpfs 239968 0 239968 0% /dev
tmpfs tmpfs 249712 0 249712 0% /dev/shm
tmpfs tmpfs 249712 4588 245124 2% /run
tmpfs tmpfs 249712 0 249712 0% /sys/fs/cgroup
/dev/sda2 xfs 1038336 64076 974260 7% /boot
tmpfs tmpfs 49944 0 49944 0% /run/user/1001
Copy tệp tin từ source đến destination
ansible web01 -m copy -a "src=/etc/hosts dest=/etc/hosts" -s
Tạo thư mục mới
ansible web01 -m file -a "path=/tmp/software mode=777 owner=keepwalking group=keepwalking state=directory"
– Sử dụng lệnh cho quản lý packages
Kiểm tra gói đã được cài đặt
ansible webservers -m yum -a "name=openssl state=present"
Kiểm tra gói đã được update đến bản latest (nếu chưa thực hiện install/update)
ansible webservers -m yum -a "name=vim state=latest"
– Triển khai phần mềm từ source
Kéo web code từ Git repo xuống web server
ansible webservers -m git -a "repo= https://github.com/keepwalking86/mytv.git dest=/var/www/ version=HEAD"
– Quản lý các service/daemon
Start dịch vụ Apache trên các webservers
ansible webservers -m service -a "name=httpd state=started"
(value of state must be one of: running,started,stopped,restarted,reloaded)
– Thu thập các thông tin hosts
ansible all -m setup
Trong phần tiếp theo của Ansible chúng ta sẽ sử dụng tệp tin cấu hình Playbook để cho phép quản lý và triển khai cấu hình dễ dàng với nhiều lệnh thực thi đến các hosts.