Cài đặt Ansible tự động hóa vận hành trên CentOS7, quản lý máy tập trung

(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

Thẻ: ansible centos7 tự động hóa vận hành quản lý máy chủ

Đăng vào ngày 12 tháng 7 lúc 23:31