(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. (trích: bachkhoa-aptech)

Ansible giúp cấu hình server theo tùy biến rất đa dạng, giảm thiểu thời gian thao tác trên từng server được cài đặt

Step 1.Cài đặt ansible:

# Cài đặt trên Ubuntu
apt-add-repository -y ppa:ansible/ansible
apt-get update
apt-get install -y ansible
# Cài đặt trên centos
yum install epel-release
yum install git python python-devel python-pip openssl ansible

2: Inventory Host - Bước đi đầu tiên

Đầu tiên cần khai báo host_group để dễ gọi các khối server. Ví dụ ta muốn cài apache2/nginx lên khối server API, cài mysql lên khối server db, cài java + deploy process lên khối Job... Ở đây cần quy hoạch từng khối để dễ gọi lệnh ansible về sau.

 vim /etc/ansible/hosts
[local]
127.0.0.1

[api]
192.168.88.2

[job]
192.168.89.100
192.168.89.101

[dbservers]
192.168.90.200
192.168.89.201

Cấu trúc lệnh gọi ansible sẽ như sau:

# ansible [tên host] -m [tên module] -a [tham số truyền vào module]

Lệnh thứ 1. Basic nhất có thể: ( -m là loại module, -k là nhập password, , -u là user, -i là đường dẫn host define)

Tình huống: Tôi muốn ping đến host API xem có thể kết nối để cài đặt hay không
$$ ansible api -m ping -u tuanda -k
SSH password: (nhập pass của host api)
192.168.88.2 | 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 api -m shell -a "whoami" -u tuanda -k -K -s
SSH password:
SUDO password[defaults to SSH password]:
192.168.88.2 | SUCCESS | rc=0 >>
root
  • Cả 2 bước trên chỉ là demo cơ bản. Chứ hơi đéo đâu mà nhớ các option kia. Giờ các server gọi bằng sshkey hết rồi. Ta có thể đặt trong file /etc/ansible/hosts (về sau nên sử dụng sshkey, sẽ rất thuận tiện)
vim /etc/ansible/hosts
[api]
192.168.88.2 ansible_ssh_user=tuanda  ansible_ssh_private_key_file=/etc/ansible/key_ssh_server/id_rsa
Chạy:
$$ ansible api -m shell -a "whoami"
192.168.88.2 | SUCCESS | rc=0 >>
tuanda

Một số câu lệnh cơ bản.

*# ansible [tên host cần gọi] -m [tên module] -a [tham số truyền vào module]*
-i : inventory host. Load thư viện host
-m : gọi module của ansible
-a : command_argument gửi kèm theo module mà ta đang gọi
-u : user
-vvvv : debug option

$$ ansible all -m ping (giải thích: gọi ping toàn bộ các hosts trong /etc/ansible/hosts)
$$ ansible all -m command -a uptime
$$ ansible all -a uptime (Default, ansible sẽ cho module = "command". Nên ta ko cần -m command thêm vào cũng được.)
$$ ansible -m shell -a 'top -bcn1 | head' (giải thích: chạy lệnh shell ở remote client![](https://images.viblo.asia/8335ed0c-7cfe-41b6-b7cf-bd37e05979a7.png)
)
- 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 . Được chia các module chính như: db, file, monitor, network, package, storage, web, cloud....

Phần 2: Ansible playbook

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. Playbook đơn giản có mẫu như sau (check ping và cài đặt trên ubuntu client)

---
- hosts: local
  tasks: 
    - name: Ping check host
      ping: ~
    - name: Install Apache2
      apt: name=apache2 update_cache=yes
  • Với CentOS, ta chỉ cần đổi apt thành yum. Bài toán nâng cao hơn 1 chút là cài Apache2 + deploy đơn giản .config file , deploy .html file. Ở 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 code 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. Ngoài ra còn gán biến cho các file được copy.

Ta sẽ được kết quả như sau:

[email protected]:/etc/ansible/playbook-test# ansible-playbook apache2.yml

PLAY ***************************************************************************

TASK [setup] *******************************************************************
changed: [192.168.88.2]

TASK [Install HTTP] ************************************************************
changed: [192.168.88.2]

TASK [Start HTTPD after install] ***********************************************
changed: [192.168.88.2]

TASK [Backup config HTTP (backup from client)] *********************************
changed: [192.168.88.2]

TASK [Deploy new config] *******************************************************
changed: [192.168.88.2]

TASK [Deploy web file] *********************************************************
changed: [192.168.88.2]

PLAY RECAP *********************************************************************
192.168.88.2            : ok=6    changed=3    unreachable=0    failed=0

Phần tiếp theo: Tìm hiểu về variable, investory và role. https://viblo.asia/p/phan-2-tim-hieu-ve-ansible-YWOZry8rKQ0


All Rights Reserved