Ansible là một công cụ quản lý cấu hình rất phổ biến được thiết kế để hợp lý hóa quy trình kiểm soát số lượng lớn máy chủ. Bạn có thể điều khiển nhiều máy chủ và chạy các quy trình trên chúng cùng lúc từ một nút duy nhất.
Ansible không yêu cầu bất kỳ phần mềm đặc biệt nào được cài đặt trên các nút máy chủ và có thể điều khiển chúng qua SSH.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách cài đặt và cấu hình Ansible trên máy chủ Ubuntu 20.04.
May mắn thay, Ubuntu được tích hợp sẵn Ansible 2.9, đây chính là phiên bản chúng ta sẽ cài đặt. Chạy lệnh sau để cài đặt Ansible.
Kiểm tra cài đặt của bạn bằng cách chạy lệnh sau.
Tùy thuộc vào số lượng máy chủ bạn muốn kiểm soát, tệp Inventory của Ansible cũng cho phép bạn sắp xếp chúng thành các nhóm và nhóm con. Bạn cũng có thể đặt các biến tùy chỉnh áp dụng cho các máy chủ hoặc nhóm được chọn có thể được sử dụng thêm trong khi truyền hướng dẫn.
Ansible được cung cấp kèm theo tệp Inventory mặc định có tại
Dán mã sau vào cuối tệp.
Phần
Nhóm
Khi bạn hoàn tất, hãy lưu và đóng tệp bằng cách nhấn
Lưu ý: Bạn cũng có thể tạo tệp Inventory của riêng mình ở bất kỳ vị trí nào bạn chọn, sau đó bạn có thể chuyển tệp này bằng cách sử dụng tham số
Bạn có thể kiểm tra danh sách inventory của mình bằng cách sau lệnh.
Sử dụng các bước sau để tạo và thiết lập khóa SSH cho Ansible và các nút của nó.
Tạo khóa cho Ansible.
Sao chép khóa công khai vào tài khoản của bạn trên máy chủ từ xa. Để thực hiện việc này, chúng ta sẽ sử dụng lệnh
Vậy là xong. Bây giờ Ansible có thể giao tiếp với máy chủ của bạn.
Để tạo người dùng
Chọn một mật khẩu mạnh và để trống tất cả các trường khác.
Bây giờ, cấu hình quyền truy cập sudo không cần mật khẩu cho người dùng này thông qua lệnh sau.
Bây giờ, bạn đã thêm và cấu hình người dùng mới, bạn có thể sao chép khóa SSH từ máy chủ ansible của mình sang máy chủ node bằng cách sử dụng lệnh sau lệnh.
Bạn sẽ được nhắc nhập mật khẩu cho người dùng ansible. Nhập nó và khóa SSH sẽ được sao chép.
Tiếp theo, vô hiệu hóa đăng nhập dựa trên mật khẩu cho người dùng
Bây giờ, máy chủ nút của bạn chỉ có thể truy cập được từ máy chủ Ansible vì chỉ máy chủ đó mới có khóa công khai cho nó và bạn không thể sử dụng nó với các đặc quyền sudo trên máy chủ nút trực tiếp vì đăng nhập bằng mật khẩu là đã tắt.
Bạn sẽ phải lặp lại các bước này cho từng máy chủ nút. Ngoài ra, hãy thay thế người dùng
Nhập lệnh sau để kiểm tra kết nối. Lệnh này sẽ kiểm tra kết nối đến tất cả các máy chủ từ tệp inventory.
Lệnh này sử dụng mô-đun ping của Ansible để chạy thử nghiệm kết nối trên tất cả các máy chủ. Bạn sẽ nhận được kết quả như sau.
Nếu đây là lần đầu tiên bạn sử dụng Ansible, bạn sẽ được yêu cầu xác nhận tính xác thực của tất cả các máy chủ. Khi được nhắc, hãy nhập
Lệnh trên kiểm tra thời gian hoạt động trên server1 từ nhóm inventory.
Bạn cũng có thể nhắm mục tiêu nhiều máy chủ bằng định dạng sau.
Bạn cũng có thể nhắm mục tiêu nhóm hoặc nhóm con từ tệp inventory trực tiếp.
Chạy lệnh sau để cập nhật phần mềm trên tất cả các máy chủ.
Để cập nhật máy chủ CentOS của bạn, bạn có thể sử dụng lệnh tương tự bằng cách thay thế
Nếu bạn đang sử dụng người dùng
Ở đây,
Đôi khi, một số lệnh cập nhật này có thể yêu cầu khởi động lại, vì vậy hãy chạy lệnh sau để khởi động lại tất cả máy chủ của bạn.
Đây chỉ là một số lệnh cơ bản mà bạn có thể chạy bằng Ansible.
Ansible không yêu cầu bất kỳ phần mềm đặc biệt nào được cài đặt trên các nút máy chủ và có thể điều khiển chúng qua SSH.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách cài đặt và cấu hình Ansible trên máy chủ Ubuntu 20.04.
Điều kiện tiên quyết
- Hai hoặc nhiều hệ thống máy chủ chạy Ubuntu 20.04 có cài đặt máy chủ OpenSSH.
- Cả máy chủ và nút đều có thể truy cập thông qua địa chỉ IP công khai.
- Một người dùng không phải root có quyền sudo được thiết lập trên máy chủ Ansible và một người dùng root có mật khẩu được thiết lập trên máy khách Ansible.
Cài đặt Ansible
Kho lưu trữ chính thức của Ansible không hỗ trợ Ubuntu 20.04 do lỗi trong thư viện python của Ubuntu tại thời điểm viết hướng dẫn này.May mắn thay, Ubuntu được tích hợp sẵn Ansible 2.9, đây chính là phiên bản chúng ta sẽ cài đặt. Chạy lệnh sau để cài đặt Ansible.
Mã:
$ sudo apt install ansible -y
Mã:
$ ansible --version
ansible 2.9.6 config file = /etc/ansible/ansible.cfg configured module search path = ['/home/username/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3/dist-packages/ansible executable location = /usr/bin/ansible python version = 3.8.5 (default, Jan 27 2021, 15:41:15) [GCC 9.3.0]
Thiết lập tệp kiểm kê
Để có thể kết nối với nhiều máy chủ, bạn cần một tệp sẽ ghi lại thông tin chi tiết về các nút. Tệp này được gọi là Tệp Inventory.Tùy thuộc vào số lượng máy chủ bạn muốn kiểm soát, tệp Inventory của Ansible cũng cho phép bạn sắp xếp chúng thành các nhóm và nhóm con. Bạn cũng có thể đặt các biến tùy chỉnh áp dụng cho các máy chủ hoặc nhóm được chọn có thể được sử dụng thêm trong khi truyền hướng dẫn.
Ansible được cung cấp kèm theo tệp Inventory mặc định có tại
/etc/ansible/hosts
. Mở nó bằng trình soạn thảo Nano.
Mã:
$ sudo nano /etc/ansible/hosts
Mã:
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[all:vars]
ansible_python_interpreter=/usr/bin/python3
servers
xác định danh sách các nút bạn muốn kết nối tới. Bạn có thể tạo nhiều nhóm để sắp xếp máy chủ thành nhiều nhóm.Nhóm
all:vars
đặt tham số ansible_python_interpreter
trên tất cả các máy chủ trong kho. Nó đảm bảo rằng Ansible sử dụng tệp thực thi Python 3 thay vì Python 2 đã bị xóa khỏi các phiên bản Ubuntu gần đây.Khi bạn hoàn tất, hãy lưu và đóng tệp bằng cách nhấn
CTRL+X
sau đó Y
và ENTER
để xác nhận những thay đổi của bạn.Lưu ý: Bạn cũng có thể tạo tệp Inventory của riêng mình ở bất kỳ vị trí nào bạn chọn, sau đó bạn có thể chuyển tệp này bằng cách sử dụng tham số
-i
khi chạy lệnh Ansible.Bạn có thể kiểm tra danh sách inventory của mình bằng cách sau lệnh.
Mã:
$ ansible-inventory --list -y
all: children: servers: hosts: server1: ansible_host: 203.0.113.111 ansible_python_interpreter: /usr/bin/python3 server2: ansible_host: 203.0.113.112 ansible_python_interpreter: /usr/bin/python3 server3: ansible_host: 203.0.113.113 ansible_python_interpreter: /usr/bin/python3 ungrouped: {}
Tổ chức máy chủ thành nhóm và nhóm con
Đây là mẹo hữu ích nếu bạn có nhiều máy chủ với một số máy chủ thực hiện các chức năng cụ thể.Ví dụ: bạn có thể sử dụng phương pháp này để nhóm riêng các máy chủ web và máy chủ cơ sở dữ liệu. Bạn thậm chí có thể tạo một máy chủ thành một phần của nhiều nhóm. Bạn thậm chí có thể tạo một máy chủ thành một phần của nhiều nhóm. Để đạt được điều đó, tệp hàng tồn kho của bạn phải trông giống như sau.
Mã:
[webservers]
203.0.113.111
203.0.113.112
[dbservers]
203.0.113.113
server_hostname
[development]
203.0.113.111
203.0.113.113
[production]
203.0.113.112
server_hostname
Thiết lập Khóa SSH
Để Ansible có thể kết nối với máy chủ, bạn phải cấu hình khóa SSH giữa máy chủ Ansible và các máy chủ được chỉ định trong tệp inventory. Thao tác này chỉ có tác dụng nếu máy khách Ansible không bật khóa công khai và bật tài khoản root có mật khẩu.Sử dụng các bước sau để tạo và thiết lập khóa SSH cho Ansible và các nút của nó.
Tạo khóa cho Ansible.
Mã:
$ ssh-keygen -t rsa -b 4096 -C "Ansible key"
ssh-copy-id
.
Mã:
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [emailprotected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [emailprotected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [emailprotected]
Thiết lập Khóa SSH trên các Nút có Khóa công khai hiện có
Nếu máy khách đã bật khóa công khai, thì bạn sẽ phải thực hiện một số bước bổ sung.Để thực hiện, bạn cần tạo một người dùng mới chỉ có thể truy cập được bằng Ansible trên mọi máy chủ nút. Người dùng đó sẽ có quyền sudo có thể truy cập mà không cần mật khẩu và chỉ có thể truy cập được từ máy chủ ansible của bạn.Để tạo người dùng
ansible
, hãy chạy lệnh sau lệnh.
Mã:
$ sudo adduser ansible
Bây giờ, cấu hình quyền truy cập sudo không cần mật khẩu cho người dùng này thông qua lệnh sau.
Mã:
$ echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible
Mã:
$ ssh-copy-id [emailprotected]
Tiếp theo, vô hiệu hóa đăng nhập dựa trên mật khẩu cho người dùng
ansible
trên máy chủ nút.
Mã:
$ sudo usermod -L ansible
Bạn sẽ phải lặp lại các bước này cho từng máy chủ nút. Ngoài ra, hãy thay thế người dùng
root
bằng người dùng ansible
trong hướng dẫn này.Kiểm tra kết nối
Sau khi thiết lập tệp kiểm kê và khóa SSH, chúng ta nên kiểm tra xem Ansible có thể kết nối với máy chủ hay không.Nhập lệnh sau để kiểm tra kết nối. Lệnh này sẽ kiểm tra kết nối đến tất cả các máy chủ từ tệp inventory.
Mã:
$ ansible all -m ping -u root
Mã:
server1 | SUCCESS => { "changed": false, "ping": "pong"
}
server2 | SUCCESS => { "changed": false, "ping": "pong"
}
server3 | SUCCESS => { "changed": false, "ping": "pong"
}
yes
và nhấn ENTER
để xác nhận.Chạy một số lệnh cơ bản
Chúng ta hãy chạy một số lệnh cơ bản trên máy chủ bằng Ansible. Để chạy bất kỳ lệnh nào trên máy chủ, định dạng sau được sử dụng.
Mã:
$ ansible all -a "command" -u
Kiểm tra mức sử dụng đĩa
Trước tiên, chúng ta hãy kiểm tra mức sử dụng đĩa trên tất cả các máy chủ của mình.
Mã:
$ ansible all -a "df -h" -u root
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
Nhắm mục tiêu vào từng máy chủ và Nhóm
Cho đến nay, chúng tôi đã chạy lệnh trên tất cả các máy chủ từ xa cùng một lúc. Nhưng không phải lúc nào cũng vậy. Để chạy lệnh trên chỉ một máy chủ, bạn nên sử dụng định dạng sau.
Mã:
$ ansible server1 -a "uptime" -u root
server1 | CHANGED | rc=0 >> 21:38:26 up 11 min, 2 users, load average: 0.00, 0.20, 0.19
Bạn cũng có thể nhắm mục tiêu nhiều máy chủ bằng định dạng sau.
Mã:
$ ansible server1:server2 -m ping -u root
Mã:
$ ansible groupname -m ping -u
Cập nhật tất cả các máy chủ
Đối với hướng dẫn này, chúng tôi giả định rằng tất cả các máy chủ từ xa đều đang chạy hệ điều hành Debian hoặc Ubuntu.Chạy lệnh sau để cập nhật phần mềm trên tất cả các máy chủ.
Mã:
$ ansible all -m apt -a "update_cache=yes upgrade=yes" -u root
-m
tham số xác định mô-đun để Ansible chạy. -a
đề cập đến các đối số hoặc lệnh cho mô-đun liên quan. Ở đây, chúng tôi sử dụng mô-đun apt
của Ansible để cập nhật máy chủ giống như cách chúng tôi sử dụng mô-đun ping
trong ví dụ trước. update_cache
cập nhật bộ đệm APT trên máy chủ và upgrade=yes
yêu cầu Ansible chạy apt upgrade
lệnh.Để cập nhật máy chủ CentOS của bạn, bạn có thể sử dụng lệnh tương tự bằng cách thay thế
apt
bằng yum
và đối với máy chủ Fedora, bạn có thể thay thế apt
bằng dnf
.Nếu bạn đang sử dụng người dùng
ansible
như đã nêu ở trên, bạn cần phải sửa đổi ansible
lệnh để chạy với quyền sudo nâng cao.
Mã:
$ ansible server2 -m apt -a "update_cache=yes upgrade=yes" -K -b -u ansible
-K
yêu cầu mật khẩu nâng cao đặc quyền. -b
chạy hoạt động ansible với become
cho phép bạn trở thành người dùng khác. Cả hai biến kết hợp cho phép ansible chạy với quyền sudo nâng cao. Bạn sẽ cần sử dụng lệnh này cho tất cả các lệnh yêu cầu quyền sudo.Đôi khi, một số lệnh cập nhật này có thể yêu cầu khởi động lại, vì vậy hãy chạy lệnh sau để khởi động lại tất cả máy chủ của bạn.
Mã:
$ ansible all -a "reboot" -u root