Cách thiết lập khoảng không quảng cáo có thể thanh toán
Ansible là một công cụ quản lý cấu hình hiện đại tạo điều kiện thuận lợi cho công việc cài đặt và bảo trì các server từ xa, với thiết kế tối giản nhằm giúp user cài đặt và chạy nhanh chóng. Ansible sử dụng tệp kiểm kê để theo dõi server nào là một phần của cơ sở hạ tầng của bạn và cách tiếp cận chúng để chạy các lệnh và sách phát.Có nhiều cách để bạn có thể cài đặt file kiểm kê Ansible của bạn , tùy thuộc vào môi trường và nhu cầu dự án của bạn. Trong hướng dẫn này, ta sẽ trình bày cách tạo file khoảng không quảng cáo và tổ chức server thành các group và group con, cách cài đặt các biến server và cách sử dụng các mẫu để kiểm soát việc thực thi các lệnh Ansible và sách phát trên mỗi server và mỗi group .
Yêu cầu
Để làm theo hướng dẫn này, bạn cần:
- Một nút điều khiển Ansible : máy Ubuntu 20.04 được cài đặt và cấu hình Ansible để kết nối với các server Ansible của bạn bằng các SSH key . Đảm bảo rằng nút điều khiển có regular user có quyền sudo và đã bật firewall , như được giải thích trong hướng dẫn Cài đặt Server Ban đầu của ta . Để cài đặt Ansible, hãy làm theo hướng dẫn của ta về Cách cài đặt và cấu hình Ansible trên Ubuntu 20.04 .
- Hai hoặc nhiều Server Ansible : hai hoặc nhiều server Ubuntu 20.04 từ xa.
Bước 1 - Tạo file khoảng không quảng cáo tùy chỉnh
Sau khi cài đặt, Ansible tạo một file hàng tồn kho thường được đặt tại /etc/ansible/hosts
. Đây là vị trí mặc định được Ansible sử dụng khi file kho tùy chỉnh không được cung cấp với tùy chọn -i
, trong khi thực thi lệnh hoặc sổ phát.
Mặc dù bạn có thể sử dụng file này mà không gặp sự cố, nhưng sử dụng file kiểm kê cho mỗi dự án là một phương pháp hay để tránh trộn lẫn các server khi thực hiện lệnh và sách phát. Việc có các file khoảng không quảng cáo cho mỗi dự án cũng sẽ tạo điều kiện thuận lợi cho việc chia sẻ cài đặt cấp phép của bạn với các cộng tác viên, với điều kiện bạn bao gồm file hàng tồn kho trong repository mã của dự án.
Để bắt đầu, hãy truy cập folder chính của bạn và tạo một folder mới để chứa các file Ansible của bạn:
- cd ~
- mkdir ansible
Di chuyển đến folder đó và mở file kiểm kê mới bằng editor mà bạn chọn. Ở đây, ta sẽ sử dụng nano
:
- cd ansible
- nano inventory
Danh sách các node của bạn, với một server trên mỗi dòng, là đủ để cài đặt file kiểm kê chức năng. Tên server và địa chỉ IP có thể swap cho nhau:
203.0.113.111 203.0.113.112 203.0.113.113 server_hostname
Khi bạn đã cài đặt file khoảng không quảng cáo, bạn có thể sử dụng lệnh ansible-inventory
để xác thực và lấy thông tin về khoảng không quảng cáo Ansible của bạn :
- ansible-inventory -i inventory --list
Output{ "_meta": { "hostvars": {} }, "all": { "children": [ "ungrouped" ] }, "ungrouped": { "hosts": [ "203.0.113.111", "203.0.113.112", "203.0.113.113", "server_hostname" ] } }
Mặc dù ta chưa cài đặt bất kỳ group nào trong repository ảng không quảng cáo của bạn , kết quả hiển thị 2 group riêng biệt được Ansible suy ra tự động: all
và không ungrouped
. Như tên cho thấy, all
được sử dụng để chỉ tất cả các server từ file khoảng không quảng cáo của bạn, dù chúng được tổ chức như thế nào. Group ungrouped
group được sử dụng để chỉ các server không được liệt kê trong một group .
Chạy Lệnh và Playbook với Khoảng không quảng cáo tùy chỉnh
Để chạy các lệnh Ansible với file khoảng không quảng cáo tùy chỉnh, hãy sử dụng tùy chọn -i
như sau:
- ansible all -i inventory -m ping
Điều này sẽ thực thi module ping
trên tất cả các server được liệt kê trong file khoảng không quảng cáo tùy chỉnh của bạn.
Tương tự, đây là cách bạn thực thi sách phát Ansible với file khoảng không quảng cáo tùy chỉnh:
- ansible-playbook -i inventory playbook.yml
Lưu ý : Để biết thêm thông tin về cách kết nối với các node , vui lòng tham khảo hướng dẫn Cách sử dụng Ansible của ta , vì nó cho thấy nhiều tùy chọn kết nối hơn.
Lúc này, ta đã biết cách tạo khoảng không quảng cáo cơ bản và cách sử dụng nó để chạy các lệnh và playbook. Trong bước tiếp theo, ta sẽ xem cách tổ chức các node thành các group và group con.
Bước 2 - Tổ chức Server thành Group và Group con
Trong file kiểm kê, bạn có thể tổ chức các server của bạn thành các group và phân group khác nhau. Ngoài việc giúp giữ cho các server của bạn có thứ tự, phương pháp này sẽ cho phép bạn sử dụng các biến group , một tính năng có thể tạo điều kiện thuận lợi cho việc quản lý nhiều môi trường dàn dựng với Ansible.
Một server có thể là một phần của nhiều group . Tệp kiểm kê sau ở định dạng INI thể hiện cài đặt với bốn group : webservers
, webservers
dbservers
, development
và production
. Bạn sẽ nhận thấy rằng các server được group theo hai chất lượng khác nhau: mục đích của chúng (web và database ) và cách chúng được sử dụng (phát triển và production ).
[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
Nếu bạn chạy lại lệnh ansible-inventory
với file kiểm kê này, bạn sẽ thấy sự sắp xếp sau:
Output{ "_meta": { "hostvars": {} }, "all": { "children": [ "dbservers", "development", "production", "ungrouped", "webservers" ] }, "dbservers": { "hosts": [ "203.0.113.113", "server_hostname" ] }, "development": { "hosts": [ "203.0.113.111", "203.0.113.113" ] }, "production": { "hosts": [ "203.0.113.112", "server_hostname" ] }, "webservers": { "hosts": [ "203.0.113.111", "203.0.113.112" ] } }
Cũng có thể gộp nhiều group với quyền là trẻ em trong một group “cha mẹ”. Khi đó, “mẹ” được gọi là group siêu . Ví dụ sau minh họa một cách khác để tổ chức khoảng không quảng cáo trước đó bằng cách sử dụng các group siêu thị để đạt được một cách sắp xếp có thể so sánh được nhưng chi tiết hơn:
[web_dev] 203.0.113.111 [web_prod] 203.0.113.112 [db_dev] 203.0.113.113 [db_prod] server_hostname [webservers:children] web_dev web_prod [dbservers:children] db_dev db_prod [development:children] web_dev db_dev [production:children] web_prod db_prod
Bạn càng có nhiều server , càng có ý nghĩa khi chia nhỏ các group hoặc tạo các sắp xếp thay thế để bạn có thể nhắm đến các group server nhỏ hơn nếu cần.
Bước 3 - Cài đặt alias server lưu trữ
Bạn có thể sử dụng alias để đặt tên cho server theo cách tạo điều kiện thuận lợi cho việc tham chiếu các server đó sau này, khi chạy lệnh và sách phát.
Để sử dụng alias , hãy bao gồm một biến có tên ansible_host
sau tên alias , chứa địa chỉ IP hoặc tên server tương ứng của server sẽ phản hồi với alias đó:
server1 ansible_host=203.0.113.111 server2 ansible_host=203.0.113.112 server3 ansible_host=203.0.113.113 server4 ansible_host=server_hostname
Nếu bạn chạy lệnh ansible-inventory
với file khoảng không quảng cáo này, bạn sẽ thấy kết quả giống như sau :
Output{ "_meta": { "hostvars": { "server1": { "ansible_host": "203.0.113.111" }, "server2": { "ansible_host": "203.0.113.112" }, "server3": { "ansible_host": "203.0.113.113" }, "server4": { "ansible_host": "server_hostname" } } }, "all": { "children": [ "ungrouped" ] }, "ungrouped": { "hosts": [ "server1", "server2", "server3", "server4" ] } }
Lưu ý cách các server hiện được tham chiếu bằng alias thay vì địa chỉ IP hoặc tên server của chúng. Điều này giúp việc nhắm đến các server riêng lẻ dễ dàng hơn khi chạy các lệnh và playbook.
Bước 4 - Cài đặt các biến server lưu trữ
Có thể sử dụng file kiểm kê để cài đặt các biến sẽ thay đổi hành vi mặc định của Ansible khi kết nối và thực hiện các lệnh trên các node của bạn. Trên thực tế, Đây là kết quả ta đã làm ở bước trước, khi cài đặt alias server . Biến ansible_host
cho Ansible biết nơi tìm các node từ xa, trong trường hợp một alias được sử dụng để chỉ server đó.
Các biến khoảng không quảng cáo có thể được đặt cho mỗi server hoặc mỗi group . Ngoài việc tùy chỉnh cài đặt mặc định của Ansible, các biến này cũng có thể truy cập được từ sách phát của bạn, cho phép tùy chỉnh thêm cho các server và group riêng lẻ.
Ví dụ sau cho thấy cách xác định user từ xa mặc định khi kết nối với mỗi nút được liệt kê trong file khoảng không quảng cáo này:
server1 ansible_host=203.0.113.111 ansible_user=sammy server2 ansible_host=203.0.113.112 ansible_user=sammy server3 ansible_host=203.0.113.113 ansible_user=myuser server4 ansible_host=server_hostname ansible_user=myuser
Bạn cũng có thể tạo một group để tổng hợp các server có cài đặt tương tự, sau đó cài đặt các biến của chúng ở cấp group :
[group_a] server1 ansible_host=203.0.113.111 server2 ansible_host=203.0.113.112 [group_b] server3 ansible_host=203.0.113.113 server4 ansible_host=server_hostname [group_a:vars] ansible_user=sammy [group_b:vars] ansible_user=myuser
Việc sắp xếp khoảng không quảng cáo này sẽ tạo ra kết quả kết quả sau với ansible-inventory
:
Output{ "_meta": { "hostvars": { "server1": { "ansible_host": "203.0.113.111", "ansible_user": "sammy" }, "server2": { "ansible_host": "203.0.113.112", "ansible_user": "sammy" }, "server3": { "ansible_host": "203.0.113.113", "ansible_user": "myuser" }, "server4": { "ansible_host": "server_hostname", "ansible_user": "myuser" } } }, "all": { "children": [ "group_a", "group_b", "ungrouped" ] }, "group_a": { "hosts": [ "server1", "server2" ] }, "group_b": { "hosts": [ "server3", "server4" ] } }
Lưu ý tất cả các biến khoảng không quảng cáo được liệt kê trong nút _meta
trong kết quả JSON được tạo bởi ansible-inventory
.
Bước 5 - Sử dụng các mẫu để nhắm đến việc thực thi các lệnh và Playbook
Khi thực hiện các lệnh và playbook với Ansible, bạn phải cung cấp một mục tiêu. Các mẫu cho phép bạn nhắm đến các server , group hoặc group con cụ thể trong file khoảng không quảng cáo của bạn. Chúng rất linh hoạt, hỗ trợ các cụm từ thông dụng và ký tự đại diện.
Hãy xem xét file hàng tồn kho sau:
[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
Bây giờ hãy tưởng tượng bạn cần thực hiện một lệnh chỉ nhắm đến đến (các) server database đang chạy trên production . Trong ví dụ này, chỉ có server_hostname
phù hợp với tiêu chí đó; tuy nhiên, có thể xảy ra trường hợp bạn có một group lớn các server database trong group đó. Thay vì nhắm đến riêng lẻ từng server , bạn có thể sử dụng mẫu sau:
- ansible dbservers:\&production -m ping
Ký tự &
đại diện cho hoạt động logic AND
, nghĩa là các mục tiêu hợp lệ phải nằm trong cả hai group . Vì đây là một lệnh đặc biệt chạy trên Bash, ta phải bao gồm ký tự \
Escape trong biểu thức.
Ví dụ trước đây sẽ chỉ nhắm đến các server có mặt cả trong dbservers
cũng như trong production
group . Nếu bạn muốn làm điều ngược lại, nhắm đến chỉ server được hiện diện trong các dbservers
nhưng không phải trong production
group , bạn sẽ sử dụng mẫu sau thay vì:
- ansible dbservers:\!production -m ping
Để cho biết mục tiêu không được nằm trong một group nhất định, bạn có thể sử dụng !
tính cách. , ta đưa ký tự \
Escape vào biểu thức để tránh lỗi dòng lệnh, vì cả &
và !
là các ký tự đặc biệt có thể được phân tích cú pháp bởi Bash.
Bảng sau đây chứa một vài ví dụ khác nhau về các mẫu phổ biến mà bạn có thể sử dụng khi chạy lệnh và sách phát với Ansible:
Mẫu | Mục tiêu kết quả |
---|---|
all | Tất cả Server từ file hàng tồn kho của bạn |
host1 | Một server duy nhất ( host1 ) |
host1:host2 | Cả host1 và host2 |
group1 | Một group duy nhất ( group1 ) |
group1:group2 | Tất cả các server trong group1 và group2 |
group1:\&group2 | Chỉ các server thuộc cả group1 và group2 |
group1:\!group2 | Server trong group1 ngoại trừ những server cũng trong group2 |
Để biết thêm các tùy chọn mẫu nâng cao, chẳng hạn như sử dụng các mẫu vị trí và regex để xác định mục tiêu, vui lòng tham khảo tài liệu Ansible chính thức về các mẫu .
Kết luận
Trong hướng dẫn này, ta đã có một cái nhìn chi tiết về hàng tồn kho Ansible. Ta đã thấy cách tổ chức các node thành các group và group con, cách cài đặt các biến khoảng không quảng cáo và cách sử dụng các mẫu để nhắm đến các group server khác nhau khi chạy lệnh và playbook.
Trong phần tiếp theo của loạt bài này, ta sẽ xem cách quản lý nhiều server bằng các lệnh đặc biệt Ansible.
Các tin liên quan