Cách cài đặt và cấu hình Ansible trên Ubuntu 20.04

theanh

Administrator
Nhân viên
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.

Đ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
Kiểm tra cài đặt của bạn bằng cách chạy lệnh sau.
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
Dán mã sau vào cuối tệp.
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
Phần 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 đó YENTER để 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"
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 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]
Vậy là xong. Bây giờ Ansible có thể giao tiếp với máy chủ của bạn.

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
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.
Mã:
$ echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible
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.
Mã:
$ ssh-copy-id [emailprotected]
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 ansible trên máy chủ nút.
Mã:
$ sudo usermod -L ansible
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 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
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.
Mã:
server1 | SUCCESS => { "changed": false, "ping": "pong"
}
server2 | SUCCESS => { "changed": false, "ping": "pong"
}
server3 | SUCCESS => { "changed": false, "ping": "pong"
}
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 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
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.
Mã:
$ ansible server1:server2 -m ping -u root
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.
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
Ở đây, -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
Đây chỉ là một số lệnh cơ bản mà bạn có thể chạy bằng Ansible.

Kết luận​

Như vậy là chúng ta đã kết thúc hướng dẫn về cách cài đặt và cấu hình Ansible trên máy chủ chạy Ubuntu 20.04. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên