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ả host1vàhost2 | 
| group1 | Một  group  duy nhất ( group1) | 
| group1:group2 | Tất cả các  server  trong group1vàgroup2 | 
| group1:\&group2 | Chỉ các  server  thuộc cả group1vàgroup2 | 
| group1:\!group2 | Server  trong group1ngoại trừ những  server  cũng tronggroup2 | 
Để 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
 

