BÀI TOÁN BAN ĐẦU

Đầu tiên, tôi bao gồm một việc muốn đặt ra như nỗ lực này. Tôi gồm 10 nhỏ server cần setup lên thành website server cùng 3 bé server cần thiết đặt thành DB server. Nếu thiết đặt một cách thủ công bằng tay thì chúng ta sẽ buộc phải 10 lần thao tác giống nhau mang lại việc cài đặt 10 con web server và với DB hệ thống cũng thế. Vậy bài bác toán đặt ra là rất có thể gõ 1 lệnh nhưng tổng 13 nhỏ server tự động hóa được cài đặt không. Câu trả lời là có. Và để triển khai được điều thì họ cần mang lại Ansible.

Bạn đang xem: Hướng dẫn và sử dụng ansible

<< 1 >> ANSIBLE LÀ GÌ

Ansible là 1 trong platform opensource, nghĩa là bạn cũng có thể viết thêm hay chỉnh sửa tuỳ ý. Ansible khá đơn giản dễ dàng để sử dụng. Nôm na bạn cũng có thể hình dung là chỉ vấn đề khai báo add server và đều điều hy vọng làm cùng với server kia vào ansible, rồi sau đó chỉ cần chạy script các bạn vừa viết trên và ngồi uống trà ngóng hoàn thành.

<< 2 >> TẠI SAO NÊN SỬ DỤNG ANSIBLE

Ansible miễn tổn phí và là 1 trong opensource Ansible thực hiện phương thức ssh Việc thiết đặt không tốn những tài nguyên Được cải cách và phát triển bởi ngữ điệu python. đề nghị nếu bạn muốn tạo thêm module thì cũng thực hiện bằng python hơi nhẹ và dễ setup Các sciprt thường được dùng định dạng YAML cùng Ansible gồm một cộng đồng tương tác lớn

<< 3 >> THÀNH PHẦN trong ANSIBLE

Cái này cũng rất nhiều nhưng về cơ bản thì có những phần sau: Playbooks - Là nơi các bạn sẽ khai báo kịch bản chạy đến server Tasks - Là đầy đủ công việc nhỏ trong cuốn sổ Playbooks trên Inventory - Khai báo địa chỉ cửa hàng server bắt buộc được thiết đặt Modules - Những chức năng hỗ trợ đến việc xúc tiến tasks dễ với đang dạng v.v…

<< 4 >> LÀM quen thuộc VỚI YAML

Chúng ta hãy xem các tập tin YAML là gì. Phần lớn tất cả playbooks trong Ansible được viết bởi YAML. Nếu như bạn đã quen thuộc với YAML, hãy làm lơ phần này và đưa sang phần tiếp theo. Nếu bạn chưa từng thao tác với YAML thì khuyên bạn nên xem phần này kỹ một xíu chính vì các phần còn lại số đông phụ thuộc trọn vẹn vào YAML.Playbook Ansible được viết theo định dạng rõ ràng được call là YAML.Nếu chúng ta đã thao tác với các định dạng cấu trúc dữ liệu khác như XML hoặc JSON, các bạn sẽ có thể dễ dàng học nó.Cũng đừng lo lắng nếu bạn chưa biết gì, bởi nó thiệt sự rất đối kháng giản. File YAML được dùng để làm thể hiện dữ liệu. Dưới đấy là so sánh nhanh tài liệu mẫu ở ba định dạng khác nhau.
*
Bên trái là dạng XML - hiển thị danh sách những máy chủ và thông tin của chúng. Cùng tài liệu đó thì hình chính giữa được diễn tả dạng JSON và cuối cùng ở định hình YAML ở mặt phải.Trong YAML tất cả 3 giao diện để trình diễn giá trị.
*
■ Key Value Pair (Cặp khoá vs giá bán trị): Dữ liệu được biểu hiện bởi thứ hạng khoá và giá trị (key cùng value). Trong YAML, khóa và cực hiếm được phân tách bằng lốt hai chấm (:). Luôn phải có tầm khoảng trắng theo sau vết hai chấm.■ Mảng vào YAML: Các bộ phận trong mảng sẽ tiến hành thể hiện do dấu gạch men ngang ( - ). Cần có khoảng trắng trước từng mục. Số lượng khoảng white cần bằng nhau trước các thành phần của một mảng. Chúng ta hãy để ý kỹ hơn về những dấu khoảng tầm trắng trong YAML. Ví dụ tại chỗ này ta gồm một object là Banana. Trong những số ấy có 3 ở trong tính là calories, fat và carbs.Banana: Calories: 105 Fat: 0.4 g Carbs: 27 gLưu ý số lượng khoảng white trước từng thuộc tính sẽ đã cho thấy mối quan hệ thân phụ con. Như làm việc đây, trước 3 thuộc tính đó tất cả cùng số khoảng trắng, nghĩa là 3 thuộc tính đó phía trong Banana.Nhưng điều gì sẽ xảy ra nếu bọn họ có thêm không gian cho fat và carbs. Banana: Calories: 105 Fat: 0.4 g Carbs: 27 gLúc này fat cùng crabs đang là con của ở trong tính calories cùng calories là nằm trong tính con của Banana.Vì vậy, con số khoảng sạch sẽ YAML khôn cùng quan trọng. Đôi lúc chúng ta có thể chạy script bị báo lỗi nếu như nhầm khoảng chừng trắng với lốt tab.■ Dạng dict vào YAML: Dạng này chỉ việc biểu diễn khoảng tầm trắng trước những thuộc tính của object. Điểm khác hoàn toàn của dạng Dict cùng Array là những thuộc tính liệt kê dạng dict thì không có thứ tự. Trong lúc Array thì ngược lại. Buộc phải là ví dụ chúng ta khai báo như:Tasks: - install httpd - start httpdSẽ khác với Tasks: - start httpd - install httpdVí dụ bên trên được viết theo hình thức Array, tức ansible vẫn đọc tuần từ bỏ từ bên trên xuống. Vì thế nếu start httpd trước khi install httpd thì sẽ xảy ra lỗi vì hệ thống không kiếm tìm thấy service httpd nhằm start.
*

<< 5 >> PLAYBOOKS

Trong playbooks, bọn họ sẽ khẳng định những gì cần được làm. Hay nói theo cách khác là nơi ta đã viết kịch bạn dạng cho những con server. Playbooks sẽ được viết bằng định dạng YAML. Cần là các bạn cần đảm bảo an toàn đọc hiểu được nội dung của phương pháp viết vào YAML nhé.Trong playbooks sẽ đựng một tập hợn các activities (hoạt động) hay các tasks (nhiệm vụ) sẽ tiến hành chạy bên trên một hay như là một nhóm servers.Trong kia task là một hành động duy nhất được tiến hành trên server, ví dụ như cài gói service nào đó, hay bật và tắt service.Xem thử lấy ví dụ một playbook đối kháng giản: # Simple Ansible Playbook1.yml- name: Play 1 hosts: localhost tasks: - name: Execute command "date" command: date - name: Execute script on hệ thống script: test_script.sh - name: Install httpd service yum: name: httpd state: present - name: Start web vps service: name: httpd state: startedTrên đó là một playbook đơn giản chứa một kịch bạn dạng có thương hiệu Play 1 (name: Play 1).Kịch bạn dạng này sẽ được chạy trên vps localhost (hosts: localhost). Nếu bạn có nhu cầu thực hiện tại cùng những nhiệm vụ kia trên nhiều con server thì bạn chỉ cần liệt kê thương hiệu server giỏi tên group server. Khai báo thương hiệu server tốt group vps sẽ bên trong phần inventory nhé.Có tổng số 4 nhiệm vụ cần được chạy mang lại server. Trọng trách lần lượt là:chạy lệnh datechạy tệp tin test_script.shcài đặt dịch vụ httpdstart thương mại & dịch vụ httpd vừa sở hữu trênCác tasks trong playbooks được liệt kê dạng array. Phần bên trên đã gồm nói đến, nếu như đổi nơi thứ tự các tasks thì đã gây ảnh hưởng không nhỏ nếu số đông task đó bao gồm mối liên quan với nhau. Như ta thấy task lắp thêm 3 và task đồ vật 4 có mối tương tác với nhau. Nếu nhằm task start httpd lên trước task install thì sẽ sở hữu được lỗi xảy ra nếu server trọn vẹn chưa được mua httpd.Bạn lưu ý các ở trong tính command, script, yum, service là đầy đủ module có sẵn bởi ansible cung cấp. Module cung ứng bạn viết với thực thi những nhiệm vụ một cách đơn giản hơn. Nếu còn muốn tự tạo nên một module riêng biệt thì ansible vẫn hỗ trợ và cho phép bạn viết module riêng nhằm chạy bằng python. Ngoài ra module dễ dàng và đơn giản trên, ansible còn cung ứng hằng trăm module khác, bạn có thể bài viết liên quan ở document của ansible.https://docs.ansible.com/Để làm rõ hơn module có nhiệm vụ gì, chúng ta thử chú ý vào task vật dụng 3 là task setup dịch vụ httpd. Bình thưởng trong linux, ước ao cài dịch vụ httpd, chúng ta phải gõ:yum install httpdNhưng vào playbook bạn chỉ cần khai báo tên module với tên dịch vụ, module được khai báo trường đoản cú khắc sẽ nhận lệnh với tự tiến hành việc thiết lập gói httpd theo yêu thương cầu.Cuối cùng, khi chúng ta đã viết chấm dứt một playbook, vậy làm cách nào nhằm chạy nó. Rất 1-1 giản. Ansible cung cấp cho chính mình cú pháp như sau:ansible-playbook Ví dụ tệp tin playbook của doanh nghiệp tên là my_playbook.yml, các bạn sẽ run như sau:ansible-playbook my_playbook.ymlBên cạnh đó nếu bạn cần trợ giúp gì thì dùng lệnh:ansible-playbook -help

<< 6 >> MODULES

Như đã giới thiệu ở phần trên, ansible cung ứng rất các module, không thể trình diễn hết các module trong bài viết này, đề nghị mình sẽ ra mắt một vài module phổ biến thường được sử dụng cho những thao tác đơn giản.System: bao gồm các module như User, Group, Hostname, Systemd, Service, v.v... Commands: thông thường sẽ có module nhỏ như Command, Expect, Raw, Script, Shell, v.v...Files: các module thao tác với file như Copy, Find, Lineinfile, Replace, v.v...Database: Ansbile cũng support mạnh bạo những module thao tác làm việc với DB như Mongodb, Mssql, Mysql, Postgresql, Proxysql, v.v...Cloud: Ansible cũng luôn nhớ kết hợp với các dịch vụ thương mại clound nổi tiếng như Amazon, Google, Docker, Linode, VMware, Digital Ocean, v.v...Windows: mạnh bạo với gần như module như win_copy, win_command, win_domain, win_file, win_shellVà còn hàng trăm ngàn module khác đã có ansible cung ứng sẵn.

<< 7 >> INVENTORY

Đây là khu vực sẽ đựng tên các con hệ thống hay showroom ip mà bạn có nhu cầu thực thi. Chú ý lại file playbook ngơi nghỉ trên, thì trong tệp tin playbook sẽ có một thuộc tính là hosts, đấy đó là nơi khai báo thương hiệu server. Bây giờ thử xem file inventory solo giản:#Sample Inventory FileServer1.company.comServer2.company.com Server3.company.com Server4.company.com Server5.company.com Server6.company.com Server7.company.comServer8.company.com maildbwebBạn để ý cách khai báo với , , . Đây là cách khai bao 1 group các server với nhau. là tên gọi group. Trong playbook, nếu bạn muốn file playbook đó sẽ triển khai group những server tương quan đến web, bạn chỉ việc khai báohosts: webCòn là biện pháp khai báo group các group với nhau.Bên cạnh đó, Ansible còn cung cấp một số params giao hàng cho việc truy cập vào server mà bạn đã khai báo vào inventory file thuận lợi hơn. Rõ ràng như hệ thống nào kia muốn truy vấn vào cần hỗ trợ user cùng password, tuyệt server đó không hẳn là linux mà là window, thì bài toán login vào cũng có thể có phần khác. Xem ví dụ để hiểu thêm về các params nhưng ansible đã cung cấp nhé.#Sample Inventory file# website Serversweb_node1 ansible_host=web01.xyz.com ansible_connection=winrm ansible_user=administrator ansible_password=Win$Passweb_node2 ansible_host=web02.xyz.com ansible_connection=winrm ansible_user=administrator ansible_password=Win$Pass # DB Serverssql_db1 ansible_host=sql01.xyz.com ansible_connection=ssh ansible_user=root ansible_ssh_pass=Lin$Passsql_db2 ansible_host=sql02.xyz.com ansible_connection=ssh ansible_user=root ansible_ssh_pass=Lin$PassĐối với hệ thống window, Ansible cung cấp kiểu connect là winrm. Trong khi cách khai báo password cũng khác với Linux. Ở window sẽ sử dụng param ansible_ssh_pass, còn linux là ansible_password. Các bạn lưu ý điều này nhé.

Xem thêm: Lý Thuyết Kính Lúp Kính Hiển Vi Và Cách Sử Dụng Sinh 6, Kính Lúp, Kính Hiển Vi Và Cách Sử Dụng

<< 8 >> VARIABLES

Tiếp theo bọn họ sẽ làm cho quen cùng với biến.Vậy thay đổi là gì? cũng giống như các ngôn ngữ lập trình khác, biến chuyển được thực hiện để giữ trữ các giá trị và bao gồm thể biến đổi giá trị được.Xem ví dụ sau đây để làm rõ cách khai báo phát triển thành và thực hiện biến trong ansible ra làm sao nhé.- name: Print car"s information hosts: localhost vars: car_model: "BMW M3" country_name: USA title: "Systems Engineer" tasks: - name: Print my car model command: echo "My car"s mã sản phẩm is car_model " - name: Print my country command: echo "I live in the ‌ country_name " Để khai báo biến, chúng ta sẽ thực hiện thuộc tính vars mà lại ansible đã cung cấp.car_model đã là key, "BMW M3" vẫn là value. Dưới để thực hiện biến car_model ta sử dụng cặp lốt ngoặc nhọn cùng tên đổi mới car_model

<< 9 >> CONDITIONS

Ansible cũng có thể chấp nhận được bạn điều hướng lệnh chạy hay giới hạn phạm vi để run câu lệnh làm sao đó. Nói khác đi là nếu đk thoả thì câu lệnh đó bắt đầu được thực thi.Bây tiếng ta thử giải một đề câu hỏi như sau: nếu tuổi bên trên 22 thì in ra screen là "Tôi đã tốt nghiệp" và ngược lại nếu tuổi bên dưới 22 thì in là "Tôi chưa giỏi nghiệp".Lúc này họ sẽ áp dụng thuộc tính when mà lại ansible cung ứng để giới hạn phạm vi chạy của câu lệnh.#Simple playbook.yml- name: Toi domain authority tot nghiep không hosts: localhost vars: age: 25 tasks: - command: echo "Toi chua tot nghiep" when: age = 22■ registerAnsible còn cung ứng một trực thuộc tính khá mạnh bạo là register. Register góp nhận hiệu quả trả về từ một câu lệnh. Sau đó ta có thể dùng kết quá trả về kia cho hầu như câu lệnh chạy sau đó.Ví dụ ta có bài toán như sau: bình chọn trạng thái của service httpd, giả dụ start thua thì gởi mail thông báo cho admin.#Sample ansible playbook.yml- name: check status of service and email if its down hosts: localhost tasks: - command: service httpd status register: command_output - mail: to: Admins subject: Service Alert body: "Service is down" when: command_output.stdout.find("down") != -1 Nhờ vào nằm trong tính register, kết quả trả về sẽ được chứa vào trở thành command_output. Từ kia ta thực hiện tiếp các thuộc tính của biến chuyển command_output là stdout.find nhằm tìm chữ "down" có lộ diện trong văn bản trả về không. Nếu không tìm thấy thì hiệu quả sẽ là -1.

<< 10 >> LOOPS

Bạn còn lưu giữ module yum không. Module yum trong ansible playbook góp ta cài đặt hay xoá một gói service làm sao đó. Vào ví dụ tại vị trí playbook, chúng ta chỉ bao gồm cài một gói service. Cơ mà nếu server yêu cầu thiết lập thêm nhiều gói service khác như mysql, php thì sao nhĩ. Như bình thường chúng ta đã viết như sau:# Simple Ansible Playbook1.yml- name: Install packages hosts: localhost tasks: - name: Install httpd service yum: name: httpd - name: Install mysql service yum: name: mysql - name: Install php service yum: name: phpỞ đây mới ví dụ 3 service bắt buộc cài mà đề xuất viết lập lại những thuộc tính name, module yum đến 3 lần. Nếu như server cần cài lên đến mức 100 gói service thì câu hỏi ngồi copy/paste cũng trở thành vấn đề đấy. Cụ vào đó, họ sẽ sử dụng công dụng loops mà lại ansible đã cung ứng để nhằm viết.#Simple Ansible Playbook1.yml- name: Install packages hosts: localhost tasks: - name: Install all service yum: name=" chiến thắng " state=present with_items: - httpd - mysql - php with_items là một trong những lệnh lặp, thực hiện cùng một tác vụ những lần. Mỗi lần chạy, nó lưu quý giá của từng thành bên trong biến item. 

<< 11 >> ROLES

Nếu bạn có khá nhiều server hay nhiều group server và mỗi server thực thiện hồ hết tasks riêng rẽ biệt. Và khi này trường hợp viết tất cả vào và một file playbook thì hơi là xấu code và khó khăn để cai quản lý. Ansible đã cung ứng sẵn công dụng roles, về đơn giản và dễ dàng nó sẽ giúp bạn phân chia khu vực với trọng trách riêng biệt.Ví dụ các bạn có một kịch bạn dạng như mặt dưới:#Simple Ansible setup_application.yml- name: phối firewall configurations hosts: website vars: http_port: 8081 snmp_port: 160-161 inter_ip_range: 192.0.2.0 tasks: - firewalld: service: https permanent: true state: enabled - firewalld: port: " http_port "/tcp permanent: true state: disabled - firewalld: port: " snmp_port "/udp permanent: true state: disabled - firewalld: source: " inter_ip_range "/24 zone: internal state: enabledMục tiêu của tệp tin playbook setup_application.yml này là thông số kỹ thuật tường lửa đến group server về web. Hiện giờ chúng ta vẫn cắt nhỏ file playbook này ra thành hồ hết file tất cả chức năng đơn lẻ như file chỉ chưa định nghĩa biến, giỏi file chứa định nghĩa tasks. Trước khi cắt tệp tin playbook bé dại gọn lại, ta yêu cầu tạo cấu tạo thư mục như sau nhằm ansible nhận thấy được những thành phần ta đã khai báo. 
*

CUỐI BÀI

Đến trên đây thì đã kết thúc phần cơ phiên bản khai niệm về ansible. Để hiểu hiểu được playbooks file, thì rất cần phải nắm được những viết script trong tệp tin YAML nhé.