Chào các bạn!
Là dân system chắc là các bạn cũng đã từng nghe nhắc nhiều đến cụm từ “Configuration Management” hoăc cứ google là ra hàng tá bài viết liên quan.
Vâng! Configuration Management (CM) có thể hiểu là công cụ hỗ trợ, cấu hình, cài đặt hệ thống một cách tự động. Có rất nhiều công cụ như Ansible, Chef, Puppet, Saltstack … Loạt bài viết này sẽ không tập trung vào việc so sánh các công cụ CM mà chỉ hướng dẫn bạn cách cài đặt và sử dụng Ansible.
1. Ansible là cái gì?
Ansible có thể hiểu nôm na là công cụ dùng để quản lý cài đặt, cấu hình hệ thống một cách tập trung và cho phép thực thi câu lệnh điều khiển.
2. Ansible có những tính năng gì hay ho ?
+ Dự phòng tài nguyên (provisioning)
+ Quản lý cấu hình (configuration management)
+ Triển khai ứng dụng (app deployment)
+ Giao hàng liên tục (continous delivery)
+ Bảo mật và tuân thủ (security and compliance)
+ Điều phối (orchestration).
3. Đặc điểm của Ansible
+ Không cần cài đặt phần mềm lên các agent, chỉ cần cài đặt tại master.
+ Không service, daemon, chỉ thực thi khi được gọi
+ Cú pháp dễ đọc, dễ học, dễ hiểu
4. Ansible playbook thì sao?
Ansible playbook giúp chúng ta tổ chức công việc của mình theo nhiều cách. Trong hình thức trực tiếp nhất, chúng ta có thể làm việc với các module của Ansible sử dụng công cụ dòng lệnh “ansible” và file inventory.
4.1. Inventory
File inventory giúp Ansible biết các server mà nó cần kết nối sử dụng SSH, thông tin kết nối nó yêu cầu, và tùy chọn các biến gắn liền với các server này. File inventory có định dạng là INI. Trong file inventory, chúng ta có thể chỉ định nhiều hơn một máy chủ và gom chúng thành nhiều nhóm.
Ex: file inventory hosts.ini như sau
[webservers]
192.168.175.129
192.168.175.130
4.2 Task (nhiệm vụ)
Một khái niệm quan trọng khác là các task. Mỗi task của Ansible chứa một tên, một module để gọi, các tham số của module, và tùy chọn các điều kiện trước và sau. Chúng cho phép chúng ta gọi các module Ansible và truyền thông tin tới các task kế tiếp.
4.3 Vars (Các biến)
Biến hữu dụng cho việc tái sử dụng thông tin chúng ta cung cấp hoặc tập hợp. Chúng ta có thể định nghĩa biến trong các file inventory, các file YAML hoặc trong các playbook.
4.4 Playbook
Ansible playbook được viết bằng cú pháp YAML . Nó có thể chứa nhiều hơn một play. Mỗi play chứa tên của các nhóm máy chủ để kết nối tới và các nhiệm vụ nó cần thực hiện. Nó cũng có thể chứa các biến/các role/các handler, nếu đã định nghĩa.
Ex: cấu trúc của một playbook
– hosts: dbservers
gather_facts: no
vars:
who: World
tasks:
– name: say hello
debug: msg=”Hello {{ who }}”
– name: retrieve the uptime
command: uptime
Trong playbook trên, chúng ta đã nói rằng Ansible sẽ thao tác trên các server đã được định nghĩa trong nhóm máy chủ “dbservers”. Chúng ta đã tạo một biến gọi là “who” và sau đó chúng ta định nghĩa các nhiệm vụ của chúng ta. Chú ý rằng trong nhiệm vụ đầu tiên nơi chúng ta in ra một thông điệp debug, chúng ta đã sử dụng biến “who” và Ansible in “Hello World” ra màn hình. Trong nhiệm vụ thứ 2, chúng ta nói với Ansible kết nối tới mỗi máy chủ và sau đó thực thi lệnh “uptime”.
5. Hướng dẫn cài đặt và tổ chức một ansible playbook
5.1 Cài đặt.
Việc cài đặt ansible khá là đơn giản:
Trên CentOS:
$ yum install epel-release
$ yum install ansible
Trên Ubuntu:
Cấu hình PPA, cài đặt:
$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible
Trên các phiên bản Ubuntu cũ, gói software-properties-common có tên khác là python-software-properties
5.2 Viết một playbook cho việc triển khai các dịch vụ
Ở đây mình đã có viết một playbook cho việc deploy các dịch vụ như nginx, mongodb, redis, postgresql.
Mô hình deploy:
+ node master ( 192.168.75.128): cài đặt ansible tool
+ node deploy services (192.168.75.129 & 192.168.75.130): các dịch vụ như nginx, mongodb, redis, postgresql sẽ được deploy trên 2 node này
Các bạn có thể tham khảo playbook qua link github sau:
https://github.com/lieunn/ansible-services/tree/master/roles
+ Trên node master thực thi lệnh sau để tiến hành deploy services:
[root@pio-instance1:]# ansible-playbook -i ansible-services/deployment ansible-services/analytics.yml
Cấu trúc tổ chức thư mục playbook:
[root@pio-instance1:~]# ll /build/ansible-services
-rw-r–r–. 1 root root 65 Sep 20 05:55 analytics.yml
-rw-r–r–. 1 root root 28 Sep 15 08:12 deployment
-rw-r–r–. 1 root root 19 Sep 23 08:47 README.md
drwxr-xr-x. 6 root root 4096 Sep 20 05:34 roles
[root@pio-instance1:~]# ll /build/ansible-services/roles/
total 16
drwxr-xr-x. 7 root root 4096 Sep 16 07:48 mongodb
drwxr-xr-x. 7 root root 4096 Sep 16 06:13 nginx
drwxr-xr-x. 6 root root 4096 Sep 20 05:34 postgres
drwxr-xr-x. 6 root root 4096 Sep 20 04:11 redis
[root@pio-instance1:~]# ll /build/ansible-services/roles/mongodb/
total 20
drwxr-xr-x. 2 root root 4096 Sep 16 07:54 files
drwxr-xr-x. 2 root root 4096 Sep 16 09:09 handlers
drwxr-xr-x. 2 root root 4096 Sep 16 09:13 tasks
drwxr-xr-x. 2 root root 4096 Sep 16 08:09 templates
drwxr-xr-x. 2 root root 4096 Sep 16 08:36 vars
Một số nguồn tham khảo:
https://techmaster.vn/posts/33717/su-dung-ansible-vo-postgresql
https://congcan.wordpress.com/tag/saltstack/
http://blog.vccloud.vn/configuration-management/
https://tech.fpt.com.vn/cicdcqm-giai-phap-toan-dien-nang-cao-chat-luong-du/
2 Comments on [Configuration Management] ANSIBLE TOOL