(1).Ansible có các đặc điểm sau:
Triển khai đơn giản, chỉ cần triển khai môi trường Ansible trên máy chủ chính, máy chủ không cần thực hiện bất kỳ thao tác nào; Mặc định sử dụng giao thức SSH để quản lý thiết bị; Quản lý tập trung kiểu chủ-từ; Cấu hình đơn giản, tính năng mạnh mẽ, khả năng mở rộng cao; Hỗ trợ API và module tùy chỉnh, có thể dễ dàng mở rộng bằng Python; Sử dụng Playbooks để cấu hình mạnh mẽ, quản lý trạng thái Hỗ trợ tốt cho nền tảng điện toán đám mây và dữ liệu lớn;
(2).Môi trường thử nghiệm
ansible-master 192.168.1.6 Máy chủ chính Ansible
node1 192.168.1.7 Máy chủ bị kiểm soát
node2 192.168.1.8 Máy chủ bị kiểm soát
(3).Triển khai Ansible trên ansible-master và cấu biến môi trường
Để cài đặt Ansible bằng yum cần nguồn epel, sau khi cài đặt xong kiểm tra phiên bản
[root@ansible-master ~]# yum -y install ansible
[root@ansible-master ~]# ansible --version
ansible 2.8.1
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
Cấu hình danh sách máy chủ Ansible
[root@ansible-master ~]# vim /etc/ansible/hosts //mặc định toàn bộ là ghi chú
[webservers] //định nghĩa module
192.168.1.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
192.168.1.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
[root@ansible-master ~]# ssh root@192.168.1.7 //sau khi cấu hình sử dụng ssh để kiểm tra đầu tiên, phải đảm bảo không có thao tác yes, nếu không sẽ báo lỗi.
The authenticity of host '192.168.1.7 (192.168.1.7)' can't be established.
ECDSA key fingerprint is SHA256:j3ee8eoTo2XEv0QxCYmxphMipcNRxC+IONPmt1HwRLg.
ECDSA key fingerprint is MD5:25:e2:b4:08:f2:79:7d:6e:42:84:b5:78:3d:6a:81:20.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.7' (ECDSA) to the list of known hosts.
root@192.168.1.7's password:
Last login: Sun Jul 7 23:06:22 2019 from xuefei-pc
[root@node1 ~]# exit
Đăng xuất
Connection to 192.168.1.7 closed.
[root@ansible-master ~]# ssh root@192.168.1.8 //kiểm tra ssh, lý do như trên
Connection to 192.168.1.8 closed.
[root@ansible-master ~]# ansible -i /etc/ansible/hosts webservers -m ping //cuối cùng sử dụng một lệnh ping đơn giản để kiểm tra xem ansible đã được cấu hình bình thường chưa
192.168.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
Vì Ansible dựa trên ssh để quản lý thiết bị, vì vậy có thể sử dụng khóa để truy cập, từ đó tối ưu hóa tệp cấu hình. Đầu tiên hãy thực hiện đăng nhập không cần mật khẩu
[root@ansible-master ~]# ssh-keygen //tạo khóa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:aOpFP3BWmgXReDuxqgGZk27LnphjgjLZfJUmcITe/Rw root@ansible-master
The key's randomart image is:
+---[RSA 2048]----+
| . o+ |
| . . ..+ |
| . o = .o+ |
| o O ..E=+ |
| + o=+So . |
| ++==+ |
|.+ o.=.oo |
|* =++o. . |
|.+o++ |
+----[SHA256]-----+
[root@ansible-master ~]# ssh-copy-id root@192.168.1.7 //sao chép khóa đến 192.168.1.7
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.1.7's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.1.7'"
and check to make sure that only the key(s) you wanted were added.
[root@ansible-master ~]# ssh-copy-id root@192.168.1.8 //sao chép khóa đến 192.168.1.8
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.1.8's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.1.8'"
and check to make sure that only the key(s) you wanted were added.
[root@ansible-master ~]# ssh root@192.168.1.7 //kiểm tra xem có thể đăng nhập không cần mật khẩu không
Last login: Sun Jul 7 23:16:05 2019 from ansible-master
[root@node1 ~]# exit
Đăng xuất
Connection to 192.168.1.7 closed.
[root@ansible-master ~]# ssh root@192.168.1.8
Last login: Sun Jul 7 23:16:05 2019 from ansible-master
[root@node2 ~]# exit
Đăng xuất
Connection to 192.168.1.8 closed.
Sau khi hoàn thành đăng nhập không cần mật khẩu, hãy tối ưu hóa tệp cấu hình
[root@ansible-master ~]# vim /etc/ansible/hosts
[webservers] //để lại chỉ địa chỉ IP trong cấu hình ban đầu (cũng có thể là tên miền)
192.168.1.7
192.168.1.8
[root@ansible-master ~]# !ansible //kiểm tra, gọi lệnh ansible gần nhất
ansible -i /etc/ansible/hosts webservers -m ping //lệnh đầy đủ
192.168.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
(4).Cách sử dụng Ansible và các tùy chọn thường dùng
Cách sử dụng: ansible <chế độ máy chủ> [tùy chọn]. Thường không xác định chế độ máy chủ.
Các tùy chọn thường dùng:
-v,--verbose Chế độ chi tiết
-i PATH, --inventory=PATH Chỉ định đường dẫn tệp host, mặc định là /etc/ansible/hosts
-f NUM,--forks=NUM Chỉ định số lượng tiến trình đồng bộ được mở, mặc định là 5.
-m NAME,-module-name=NAME Chỉ định module được sử dụng, mặc định sử dụng command
-a MODULE_ARGS,--args=MODULE_ARGS Chỉ định tham số của module
-k,--ask-pass Nhập mật khẩu ssh, thay vì sử dụng xác thực khóa
-b,--become Yêu cầu tên người dùng nâng cấp quyền, cần sử dụng kết hợp với tùy chọn -K
-K, --ask-become-pass Yêu cầu mật khẩu người dùng nâng cấp quyền, cần sử dụng kết hợp với tùy chọn -b
-u REMOTE_USER, --user=REMOTE_USER Chỉ định người dùng thực thi trên máy từ
-C, --check Kiểm tra lệnh thực thi sẽ thay đổi điều gì, mà không thực sự thực hiện
Trong đó tùy chọn -m rất phức tạp, có thể sử dụng lệnh ansible-doc để xem, các tùy chọn chính có thể xem ở (6).Các module nâng cao thường gặp
ansible-doc -l Xem tất cả module
ansible-doc -s [MODULE_NAME] Xem tham số của module được chỉ định
(5).Ví dụ
Sử dụng ping để kiểm tra kết nối
[root@ansible-master ~]# ansible -i /etc/ansible/hosts 'webservers' -m ping
192.168.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
[root@ansible-master ~]# ansible 'webservers' -m ping //nếu không chỉ định tệp host, mặc định trỏ đến tệp /etc/ansible/hosts
192.168.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
Kiểm tra thời gian chạy của node
[root@ansible-master ~]# ansible 'webservers' -m command -a "uptime"
192.168.1.7 | CHANGED | rc=0 >>
21:32:19 up 13 min, 2 users, load average: 0.00, 0.04, 0.06
192.168.1.8 | CHANGED | rc=0 >>
21:32:19 up 13 min, 2 users, load average: 0.00, 0.05, 0.09
Kiểm tra phiên bản kernel của node
[root@ansible-master ~]# ansible 'webservers' -m command -a "uname -r"
192.168.1.8 | CHANGED | rc=0 >>
3.10.0-957.el7.x86_64
192.168.1.7 | CHANGED | rc=0 >>
3.10.0-957.el7.x86_64
Xem tình sử dụng hệ thống tệp của node và chuyển hướng đến tệp chỉ định
[root@ansible-master ~]# ansible 'webservers' -m command -a "df -Th" > command-output
[root@ansible-master ~]# cat command-output
192.168.1.7 | CHANGED | rc=0 >>
Hệ thống tệp Loại Dung lượng Đã dùng Còn trống Đã dùng% Điểm gắn
/dev/mapper/centos-root xfs 17G 1.3G 16G 8% /
devtmpfs devtmpfs 979M 0 979M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 9.6M 981M 1% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 133M 882M 14% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0
192.168.1.8 | CHANGED | rc=0 >>
Hệ thống tệp Loại Dung lượng Đã dùng Còn trống Đã dùng% Điểm gắn
/dev/mapper/centos-root xfs 17G 1.5G 16G 9% /
devtmpfs devtmpfs 979M 0 979M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 9.6M 981M 1% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 133M 882M 14% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0
(6).Module thường dùng
Module command, cũng là module mặc định của ansible. Khi không chỉ định tùy chọn -m, sử dụng chính là module command, các lệnh thông thường đều có thể sử dụng, nhưng vì không được thực thi thông qua shell, nên <、>、|、& đều không thể sử dụng. Tất nhiên cũng không hỗ trợ đường ống, không thể thực thi hàng loạt lệnh.
Module shell, lệnh từ xa được thực thi thông qua /bin/sh, vì vậy các cách nhập lệnh trong terminal đều có thể sử dụng. Nếu biến môi trường tùy chỉnh trong ~/.bashrc hoặc ~/.bash_profile không được tải bởi module shell dẫn đến không thể nhận diện, có thể thực hiện lệnh tải script tùy chỉnh ở đầu. Ví dụ ansible webservers -m shell -a "source ~/.bash_profile && free -m". Nếu câu lệnh cần thực hiện quá nhiều, có thể viết script và truyền đến máy từ qua module copy, sau đó thực thi, nhưng sẽ sử dụng 2 lần ansible, lúc này có thể sử dụng module script.
Module script, sau khi viết script trên máy cục bộ, sử dụng trực tiếp module này, có thể tự động truyền script đến máy từ và thực thi, sau khi thực thi xong sẽ xóa script trên máy từ.
Module copy, sao chép tệp từ máy cục bộ đến máy từ, ví dụ ansible webserver -m copy -a "src=[địa chỉ tệp cục bộ] dest=[thư mục máy từ] owner=[chủ sở hữu máy từ] group=[nhóm sở hữu máy từ] mode=[quyền 4 chữ số, ví dụ 0755]"
Module file, đặt thuộc tính tệp, ví dụ ansible webservers -m file -a "path=[địa chỉ tệp máy từ] mode=[quyền 4 chữ số, ví dụ 0755]"
Module stat, lấy thông tin tệp từ xa, ví dụ ansible webservers -m stat -a "path=[địa chỉ tệp máy từ]"
Module get_url, thực hiện tải xuống chỉ định url trên máy từ, ví dụ ansible webservers -m get_url -a "url=[địa chỉ url] dest=[thư mục lưu máy từ] mode=[quyền 4 chữ số, ví dụ 0755] force=yes". Trong đó force=yes có nghĩa là khi tệp tải xuống đã tồn tại, nếu nội dung tải xuống khác với tệp trong thư mục gốc thì thay thế, nếu giống thì không tải. Ngoài ra force=no có nghĩa là chỉ tải khi mục tiêu không tồn tại.
Module yum, quản lý gói phần mềm, ví dụ ansible webservers -m yum -a "name=[tên gói phần mềm] state=[trạng thái gói]". Trong đó state có 5 giá trị可选, latest、present、installed đại diện cho cài đặt; removed, absent đại diện cho gỡ bỏ.
Module cron, cấu hình công việc định thời trên máy từ (crontab), ví dụ ansible webservers -m cron -a "name='list dir' minute=*/30 job='ls /root'", đây là mỗi 30 phút xem tệp trong thư mục root.
Module service, quản lý dịch vụ hệ thống trên máy từ, thông dụng là ba tham số name, state và enabled, name chỉ định tên dịch vụ, state chỉ định trạng thái dịch vụ (started, stopped, restarted, reloaded), enabled đặt là yes thì tự động khởi động khi khởi động máy, đặt là no thì không tự động khởi động. Ví dụ ansible webservers -m service -a "name=httpd state=restarted"
Module sysctl, cấu hình sysctl trên máy từ. Ví dụ ansible webservers -m sysctl -a "name=net.ipv4.ipforward value=1 reload=yes", lúc này xem nội dung tệp /proc/sys/net/ipv4/ip_forward trên máy từ sẽ là 1.
Module user, quản lý người dùng trên máy từ, ví dụ ansible webservers -m user -a "name=test1 state=present", state biểu thị tài khoản có nên tồn tại hay không, nếu khác với trạng thái khai báo thì sẽ có biện pháp xử lý.
(7).Sử dụng Playbook (kịch bản)
Chưa sử dụng, ghi lại một tài liệu tham khảo: https://www.cnblogs.com/bananaaa/archive/2017/12/29/8143345.html