Hệ thống quản lý cấu hình được thiết kế để hợp lý hóa quy trình kiểm soát số lượng lớn máy chủ, dành cho quản trị viên và nhóm vận hành. Chúng cho phép bạn điều khiển nhiều hệ thống khác nhau theo cách tự động từ một vị trí trung tâm.
Mặc dù có nhiều công cụ quản lý cấu hình phổ biến dành cho các hệ thống Linux, chẳng hạn như Chef và Puppet, nhưng những công cụ này thường phức tạp hơn mức nhiều người muốn hoặc cần. Ansible là một giải pháp thay thế tuyệt vời cho các tùy chọn này vì nó cung cấp một kiến trúc không yêu cầu cài đặt phần mềm đặc biệt trên các nút, sử dụng SSH để thực thi các tác vụ tự động hóa và các tệp YAML để xác định chi tiết cung cấp.
Trong hướng dẫn này, chúng ta sẽ thảo luận cách cài đặt Ansible trên máy chủ Ubuntu 20.04 và tìm hiểu một số điều cơ bản về cách sử dụng phần mềm này. Để biết tổng quan cấp cao hơn về Ansible dưới dạng công cụ quản lý cấu hình, vui lòng tham khảo Giới thiệu về quản lý cấu hình với Ansible.
Để làm theo hướng dẫn này, bạn sẽ cần:
Một Ansible Control Node: Ansible Control Node là máy mà chúng tôi sẽ sử dụng để kết nối và kiểm soát các máy chủ Ansible qua SSH. Ansible Control Node của bạn có thể là máy cục bộ của bạn hoặc máy chủ dành riêng để chạy Ansible, mặc dù hướng dẫn này giả định rằng control node của bạn là một hệ thống Ubuntu 20.04. Đảm bảo rằng nút điều khiển có:
ufw
và cho phép truy cập bên ngoài vào hồ sơ non-root user của bạn, cả hai điều này sẽ giúp giữ an toàn cho máy chủ từ xa.Một hoặc nhiều Máy chủ Ansible: Máy chủ Ansible là bất kỳ máy nào mà Ansible control node của bạn được định cấu hình để tự động hóa. Hướng dẫn này giả định rằng máy chủ Ansible của bạn là máy chủ Ubuntu 20.04 từ xa. Đảm bảo mỗi máy chủ Ansible có:
authorized_keys
của system user. Người dùng này có thể là root hoặc người dùng thông thường có đặc quyền sudo. Để thiết lập tính năng này, bạn có thể làm theo Bước 2 của Cách thiết lập khóa SSH trên Ubuntu 20.04.Để bắt đầu sử dụng Ansible như một phương tiện quản lý cơ sở hạ tầng máy chủ của bạn, bạn cần cài đặt phần mềm Ansible trên máy sẽ đóng vai trò là Ansible control node.
Từ nút điều khiển của bạn, hãy chạy lệnh sau để đưa PPA (kho lưu trữ gói cá nhân) của dự án chính thức vào danh sách nguồn của hệ thống:
- sudo apt-add-repository ppa:ansible/ansible
Nhấn ENTER
khi được nhắc chấp nhận bổ sung PPA.
Tiếp theo, hãy làm mới chỉ mục gói của hệ thống để nó biết các gói có sẵn trong PPA mới được đưa vào:
- sudo apt update
Sau bản cập nhật này, bạn có thể cài đặt phần mềm Ansible với:
- sudo apt install ansible
Ansible control node của bạn hiện có tất cả phần mềm cần thiết để quản lý máy chủ của bạn. Tiếp theo, chúng ta sẽ tìm hiểu cách thêm máy chủ của bạn vào tệp inventory của control node để nó có thể kiểm soát chúng.
Tệp inventory chứa thông tin về các máy chủ mà bạn sẽ quản lý bằng Ansible. Bạn có thể bao gồm từ một đến vài trăm máy chủ ở bất kỳ đâu trong tệp inventory của mình và các máy chủ có thể được tổ chức thành các nhóm và nhóm phụ. Tệp inventory cũng thường được sử dụng để đặt các biến chỉ hợp lệ cho các máy chủ hoặc nhóm cụ thể, để được sử dụng trong playbook và mẫu. Một số biến cũng có thể ảnh hưởng đến cách chạy playbook, chẳng hạn như biến ansible_python_interpreter
mà chúng ta sẽ thấy trong giây lát.
Để chỉnh sửa nội dung của Ansible inventory mặc định của bạn, hãy mở tệp /etc/ansible/hosts
bằng trình soạn thảo văn bản bạn chọn, trên Ansible control node của bạn:
- sudo nano /etc/ansible/hosts
Lưu ý: Mặc dù Ansible thường tạo tệp inventory mặc định tại etc/ansible/hosts
, nhưng bạn có thể tự do tạo tệp inventory ở bất kỳ vị trí nào phù hợp hơn với nhu cầu của mình. Trong trường hợp này, bạn sẽ cần cung cấp đường dẫn đến tệp inventory tùy chỉnh của mình với tham số -i
khi chạy các lệnh và playbook Ansible. Sử dụng các tệp inventory cho mỗi dự án là một phương pháp hay để giảm thiểu rủi ro khi chạy playbook trên nhóm máy chủ không phù hợp.
Tệp inventory mặc định do cài đặt Ansible cung cấp chứa một số ví dụ mà bạn có thể sử dụng làm tài liệu tham khảo để thiết lập inventory của mình. Ví dụ sau xác định một nhóm có tên [servers]
với ba máy chủ khác nhau trong đó, mỗi máy chủ được xác định bằng một bí danh tùy chỉnh: server1, server2, và server3. Đảm bảo thay thế các IP được đánh dấu bằng địa chỉ IP của máy chủ Ansible của bạn.
[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
Nhóm phụ all:vars
đặt tham số máy chủ ansible_python_interpreter
sẽ hợp lệ cho tất cả các máy chủ có trong inventory này. Tham số này đảm bảo rằng máy chủ từ xa sử dụng tệp thực thi /usr/bin/python3
Python 3 thay vì /usr/bin/python
(Python 2.7), vốn không có trên 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
rồi nhấn Y
và ENTER
để xác nhận các thay đổi của bạn.
Bất cứ khi nào bạn muốn kiểm tra kho của mình, bạn có thể chạy:
- ansible-inventory --list -y
Bạn sẽ thấy đầu ra tương tự như thế này, nhưng chứa cơ sở hạ tầng máy chủ của riêng bạn như được xác định trong tệp inventory của bạn:
Outputall:
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: {}
Bây giờ bạn đã định cấu hình tệp inventory của mình, bạn có mọi thứ cần thiết để kiểm tra kết nối với máy chủ Ansible của mình.
Sau khi thiết lập tệp inventory để bao gồm các máy chủ của bạn, đã đến lúc kiểm tra xem Ansible có thể kết nối với các máy chủ này và chạy lệnh qua SSH hay không.
Đối với hướng dẫn này, chúng tôi sẽ sử dụng tài khoản root của Ubuntu vì đó thường là tài khoản duy nhất có sẵn theo mặc định trên các máy chủ mới được tạo. Nếu máy chủ Ansible của bạn đã có người dùng sudo thông thường được tạo, bạn nên sử dụng tài khoản đó để thay thế.
Bạn có thể sử dụng đối số -u
để chỉ định người dùng hệ thống từ xa. Khi không được cung cấp, Ansible sẽ cố gắng kết nối với tư cách là người dùng hệ thống hiện tại của bạn trên control node.
Từ máy cục bộ của bạn hoặc Ansible control node, hãy chạy:
- ansible all -m ping -u root
Lệnh này sẽ sử dụng mô-đun ping
tích hợp của Ansible để chạy thử nghiệm kết nối trên tất cả các node từ kho lưu trữ mặc định của bạn, kết nối với quyền root. Mô-đun ping
sẽ kiểm tra:
Bạn sẽ nhận được đầu ra tương tự như thế này:
Outputserver1 | 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 kết nối với các máy chủ này qua SSH, bạn sẽ được yêu cầu xác nhận tính xác thực của các máy chủ mà bạn đang kết nối qua Ansible. Khi được nhắc, hãy nhập yes
rồi nhấn ENTER
để xác nhận.
Sau khi bạn nhận được phản hồi "pong"
từ máy chủ, điều đó có nghĩa là bạn đã sẵn sàng chạy các lệnh và playbook Ansible trên máy chủ đó.
Lưu ý: Nếu bạn không thể nhận được phản hồi thành công từ máy chủ của mình, hãy kiểm tra Hướng dẫn về Bảng cheat Ansible của chúng tôi để biết thêm thông tin về cách chạy các lệnh Ansible với các tùy chọn kết nối khác nhau.
Sau khi xác nhận rằng Ansible control node của bạn có thể giao tiếp với máy chủ của bạn, bạn có thể bắt đầu chạy các lệnh và playbook đặc biệt trên máy chủ của mình.
Bất kỳ lệnh nào bạn thường thực thi trên máy chủ từ xa qua SSH đều có thể chạy bằng Ansible trên máy chủ được chỉ định trong tệp inventory của bạn. Ví dụ: bạn có thể kiểm tra mức sử dụng đĩa trên tất cả các máy chủ bằng:
- ansible all -a "df -h" -u root
Outputserver1 | 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
...
Lệnh được đánh dấu df -h
có thể được thay thế bằng bất kỳ lệnh nào bạn muốn.
Bạn cũng có thể thực thi các mô-đun Ansible thông qua các lệnh đặc biệt, tương tự như những gì chúng tôi đã thực hiện trước đây với mô-đun ping
để kiểm tra kết nối. Ví dụ: đây là cách chúng tôi có thể sử dụng mô-đun apt
để cài đặt phiên bản vim
mới nhất trên tất cả các máy chủ trong inventory của bạn:
- ansible all -m apt -a "name=vim state=latest" -u root
Bạn cũng có thể nhắm mục tiêu các máy chủ riêng lẻ, cũng như các nhóm và nhóm con khi chạy các lệnh Ansible. Chẳng hạn, đây là cách bạn kiểm tra uptime
của mọi máy chủ trong nhóm servers
:
- ansible servers -a "uptime" -u root
Chúng tôi có thể chỉ định nhiều máy chủ bằng cách tách chúng bằng dấu hai chấm:
- ansible server1:server2 -m ping -u root
Để biết thêm thông tin về cách sử dụng Ansible, bao gồm cách thực thi playbooks để tự động thiết lập máy chủ, bạn có thể xem Hướng dẫn tham khảo Ansible của chúng tôi.
Trong hướng dẫn này, bạn đã cài đặt Ansible và thiết lập tệp inventory để thực thi các lệnh đặc biệt từ Ansible Control Node.
Khi bạn đã xác nhận rằng bạn có thể kết nối và điều khiển cơ sở hạ tầng của mình từ máy điều khiển Ansible trung tâm, bạn có thể thực thi bất kỳ lệnh hoặc playbook nào bạn muốn trên các máy chủ đó.
Để biết thêm thông tin về cách sử dụng Ansible, hãy xem Hướng dẫn bảng cheat Ansible của chúng tôi.