(Phần 1) Tìm hiểu về Ansible.
Ansible là gì: Việc cài đặt và cấu hình các máy chủ thường được ghi chép lại trong tài liệu dưới dạng các câu lệnh đã chạy, với giải thích kèm theo. Cách thức này gây mệt mỏi cho quản trị viên vì phải làm theo từng bước ở mỗi máy khi thiết lập mới, và có thể dẫn đến sai lầm, thiếu sót. Các hệ thống ...
Ansible là gì: Việc cài đặt và cấu hình các máy chủ thường được ghi chép lại trong tài liệu dưới dạng các câu lệnh đã chạy, với giải thích kèm theo. Cách thức này gây mệt mỏi cho quản trị viên vì phải làm theo từng bước ở mỗi máy khi thiết lập mới, và có thể dẫn đến sai lầm, thiếu sót. Các hệ thống quản lý cấu hình như Puppet hay Chef giúp tự động hóa quá trình này, tuy nhiên, chúng cần được thiết lập sẵn trên các máy chủ trước khi hoạt động. Ansible là một công cụ khác, chỉ cần có ssh và python2 trên máy được quản lý (hoặc WinRM và PowerShell khi quản lý Windows) mà không cần cài đặt gì khác.
Ansible thiết lập cấu hình máy theo một vở diễn (play). Các tác vụ trong mỗi vở mô tả trạng thái ta muốn có trên mỗi máy, chứ không chỉ là các lệnh cần chạy như tài liệu chung chung. Ansible bỏ qua các bước đã hoàn thành, và chỉ chạy một tác vụ khi điều kiện nhất định được thỏa mãn. Các tác vụ liên quan đến nhau có thể được tập hợp lại thành một vai trò (role), sau đó áp dụng cho một nhóm các máy khi cần thiết. Nếu một vai trò được thiết kế linh hoạt với các biến thể, một quản trị viên khác có thể sử dụng nó trong môi trường của mình qua cộng đồng chia sẻ Ansible Galaxy, hay trực tiếp từ tác giả.
Việc giữ cấu hình các máy trong một định dạng dễ đọc như YAML cũng mở ra khả năng theo dõi sự tiến triển cúa môi trường bằng công cụ quản lý mã nguồn như git/hg/svn, và đan xen cấu hình đó trong tài liệu giải thích theo kiểu literate programming (lập trình bên trong thuyết minh). Đây sẽ là những nguồn tài nguyên quý giá để quản trị viên mới làm quen với môi trường, và cung cấp bối cảnh khi có vấn đề xảy ra. (bachkhoa-aptech)
1.Cài đặt ansible trên ubuntu:
apt-add-repository -y ppa:ansible/ansible apt-get update apt-get install -y ansible apt-get install sshpass (ssh-pass hỗ trợ chạy ansible đẩy password vào client, không cần phải dùng key. Tôi sẽ nói ở dòng dưới)
2: Bước đi đầu tiên Đầu tiên ta phải định nghĩa host/group những máy cần ssh vào. Cài đặt host trong ansible giống như /etc/hosts vậy. Nó có chức năng phân giải tên gọi thành ip address. Nhưng linh động hơn rất nhiều, có thể nhóm group lại với nhau, đặt thông số đi kèm hosts....
vim /etc/ansible/hosts [api] 192.168.106.175 [framgia] 192.168.106.176 [webservers] foo.example.com bar.example.com [dbservers] one.example.com two.example.com [webservers] www[01:50].example.com
Chúng ta sẽ chạy thử lệnh đầu tiên nào: ( -m là loại module, -k là nhập password, , -u là user, -i là đường dẫn host define)
$$ ansible -i hosts api -m ping -u tuanda -k SSH password: (nhập pass của host api) 192.168.106.175 | SUCCESS => { "changed": false, "ping": "pong" } Nếu chạy lỗi như sau: "**bash: /usr/bin/python: No such file or directory"** thì bạn cần phải cài thêm python trên client
- Lệnh thứ 2. Giờ chúng ta muốn chạy quyền root trên api thì sao. Ta sẽ thêm option -s là chạy sudo, -K để nhập sudo pass.
$$ ansible -i hosts api -m shell -a "whoami" -u tuanda -k -K -s SSH password: SUDO password[defaults to SSH password]: 192.168.106.175 | SUCCESS | rc=0 >> root
- Nhưng giờ chúng ta lại không muốn gõ pass nữa, vậy ta sẽ chèn thêm biến sshkey trong file /etc/ansible/hosts
vim /etc/ansible/hosts [api] 192.168.106.175 ansible_ssh_user=tuanda ansible_ssh_private_key_file=/etc/ansible/key_ssh_server/id_rsa Chạy: $$ ansible -i hosts api -m shell -a "whoami" 192.168.106.175 | SUCCESS | rc=0 >> tuanda
Một số câu lệnh cơ bản.
Ansible option -i : inventory host. Load thư viện host -m : gọi module của ansible -a : command được gửi vào module -u : user -vvvv : debug option $$ ansible -i hosts all -m ping $$ ansible -i 'localhost,' -c local all -m ping (Ping local) $$ ansible -i hosts all -m shell -a 'top -bcn1 | head' $$ ansible -i hosts all -m command -a uptime Mặc định, ansible sẽ cho module là "command". Nên ta ko cần -m command thêm vào cũng được. $$ ansible -i hosts all -a uptime - restart mysql $$ ansible dbserver -m service -a "name=mysql state=restarted" --key-file=~/.ssh/db.pem -u ubuntu --sudo Tất cả module của ansible bạn có thể tham khảo ở đây http://docs.ansible.com/ansible/list_of_all_modules.html
Chúng ta ko rảnh để gõ lại từng lệnh phía trên phải không. Ansible rất linh hoạt khi hỗ trợ playbook bằng ngôn ngữ YAML (file .yml). Từ đó, khi admin cần setup server/service nào. Chỉ cần gọi file yml này ra, tất cả sẽ được thực thi một cách tự động.
- Để cho dễ làm quen nhất, tôi sẽ hướng dẫn các bạn cài đặt Apache webserver và deploy đơn giản .config, .html. Ansible server là ubuntu, client là centos. Ở phần sau tôi sẽ hướng dẫn các bạn config cho ansible tự detect OS và chọn apt/yum riêng.
- hosts: servertest remote_user: root tasks: ########## Cài đặt gói tin httpd và start . - name: Install HTTP yum: name=httpd state=latest - name: Start HTTPD after install service: name=httpd state=started ########### Deploy config #backup - name: Backup config HTTP (backup from client) command: cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.backup1 #Deploy - name: Deploy config httpd template: src: "/etc/ansible/config/httpd.conf" dest: "/etc/httpd/conf/httpd.conf" owner: root group: root mode: 0644 ########### Đẩy source về client - name: Deploy web file template: src: "/etc/ansible/config/index.html" dest: "/var/www/html/index.html" ########### Khởi động lại apache để áp dụng config - name: Start HTTPD after install service: name=httpd state=restarted
Dưới task sẽ là các module để chạy. Module yum : để install gói tin http. Module service: để chạy lệnh "service httpd start". Module command: để chạy lệnh trên client. Modudle Template: là copy file từ ansible server tới client.
Ta sẽ được kết quả như sau:
root@ubuntu:/etc/ansible/playbook-test# ansible-playbook apache2.yml PLAY *************************************************************************** TASK [setup] ******************************************************************* changed: [192.168.106.150] TASK [Install HTTP] ************************************************************ changed: [192.168.106.150] TASK [Start HTTPD after install] *********************************************** changed: [192.168.106.150] TASK [Backup config HTTP (backup from client)] ********************************* changed: [192.168.106.150] TASK [Deploy new config] ******************************************************* changed: [192.168.106.150] TASK [Deploy web file] ********************************************************* changed: [192.168.106.150] PLAY RECAP ********************************************************************* 192.168.106.150 : ok=6 changed=3 unreachable=0 failed=0