[Ansible] Phần 1 - Cài đặt và cấu hình

SystemEvolve 1x tổ chức ngày 19/06/2015 đã thảo luận về vấn đề: Cách sử dụng Ansible và một số khác biệt so với SaltStack. Vậy Ansible là gì? Sử dụng như thế nào? Trong loạt bài về Ansible, chúng ta sẽ cùng tìm hiểu từ tổng quan tới chi tiết về Ansible, các đặc điểm, cài đặt cũng như cấu trúc sử dụng trong Ansible.

Ansible là gì?

Ansible đang là công cụ Configuration Management khá nổi bật hiện nay.

  • Là công cụ mã nguồn mở 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.
  • Sử dụng SSH (hoặc Powershell) và các module được viết bằng ngôn ngữ Python để điểu khiển hệ thống.
  • Sử dụng định dạng JSON để hiển thị thông tin và sử dụng YAML (Yet Another Markup Language) để xây dựng cấu trúc mô tả hệ thống.

Đặ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
  • Bảo mật cao ( do sử dụng giao thức SSH để kết nối )
  • Cú pháp dễ đọc, dễ học, dễ hiểu

Yêu cầu cài đặt

  • Hệ điều hành: Linux (Redhat, Debian, Ubuntu, Centos, ...), Windows
  • Thư viện Jinja2: dùng để xây dựng template cấu hình
  • Thư viện PyYAML: hỗ trợ cấu trúc YAML
  • Python 2.4 trở lên

Cài đặt Ansible

  • Trên CentOS:

    • Cài đặt EPEL repo
    • Cài đặt thông qua yum:
sudo 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

Cấu hình

Demo sử dụng hệ điều hành Ubuntu 14.04, với các hệ điều hành khác cũng hoàn toàn tương tự.

Server master: 192.168.1.100  
Server agent: 192.168.1.101  
  • Tạo tài khoản truy cập SSH trên agent

Do policy của hệ thống giới hạn tài khoản root truy cập cũng như để thuận tiện cho việc quản lý (tránh dùng chung account của người quản trị) thì nên tạo 1 tài khoản khác phục vụ cho ansible

Tạo tài khoản:

$ sudo adduser ansible

Cấu hình sudo cho phép tài khoản ansible sử dụng không cần password

$ sudo vi /etc/sudoers.d/ansible
ansible ALL=(ALL)   NOPASSWD:ALL  
  • Tạo ssh key

Để thuận tiện cho việc sử dụng Ansible cũng như giới hạn 1 số hệ thống chỉ cho phép xác thực qua key. (Ansible có hỗ trợ kết nối thông qua password)

Tạo ssh keyfile: ( trên master )

$ ssh-keygen -C "ansible@master"
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa): `/etc/ansible/ansible_key`  
...

Lý do không đặt ssh key ở thư mục mặc định là do rất có thể có nhiều người quản trị cùng tham gia quản lý.)

Copy keyfile sang agent:

$ ssh-copy-id -i /etc/ansible/ansible_key.pub ansible@192.168.1.101

Kiểm tra:

$ ssh -i /etc/ansible/ansible_key ansible@192.168.1.101
  • Cấu hình host và group

Ansible lưu thông tin những hệ thống trong file /etc/ansible/hosts (inventory) theo cấu trúc dạng INI như sau:

mail.example.com

[webservers]
foo.example.com  
bar.example.com

[dbservers]
one.example.com  
two.example.com  
three.example.com  

Trong đó:
*.example.com: hostname của các host (phải cấu hình tiếp trong file /etc/hosts để xác định địa chỉ IP)
[webservers], [dbservers]: là các group

Ở ví dụ demo này, cấu hình /etc/ansible/hosts như sau:

[webservers]
web1 ansible_ssh_host=192.168.1.101 ansible_ssh_private_key_file=ansible_key ansible_ssh_user=ansible  

List các tham số hỗ trợ: inventory parameters

Sử dụng các lệnh cơ bản

$ ansible web1 -m ping
$ ansible webservers -m ping
$ ansible all -m ping
$ ansible web1 -m command -a 'df -h'
$ ansible web1 -s -m command -a 'fdisk -l'
$ ansible -i /etc/ansible/hosts all -m ping

Chú ý:

  • Ansible cho phép chỉ định 1 host, 1 group hoặc tất cả (all) khi thực thi
  • -m: lựa chọn sử dụng module
  • -a: tham số gửi vào module
  • -s: sử dụng sudo
  • -i: chỉ định inventory file (mặc định /etc/ansible/hosts)

Ở các phần sau, chúng ta sẽ cùng tìm hiểu về cấu trúc sử dụng trong Ansible trong một số ví dụ thực tế.