+18

(Phần 1) Tìm hiểu về Ansible.

(update: 2022)

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 "nhiều" 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 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 server API, cài mysql lên server db, cài java + deploy process lên khối Job/backend... Ở đâ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

[apiserver]
192.168.88.13
192.168.88.14

[jobserver]
192.168.89.100
192.168.89.101

[dbservers]
192.168.90.200
192.168.90.201

[group_server1:childrens]
apiserver
jobserver

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

# ansible -i /etc/ansible/hosts [tên host_group] -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 inventory host_group)

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 apiserver -m ping -u tuanda -k
SSH password: (nhập pass của host api)
192.168.88.13 | 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 python trên client. Ngoài ra nên cài thêm python3
Nểu chạy lỗi Host Key checking is enabled and sshpass does not support this, ta ssh tuanda@192.168.88.13 để lưu known_hosts
  • Cả 2 bước trên chỉ là demo cơ bản. Các option -k -K -s nhớ rất mất thời gian. Vì vậy ta sẽ đặt "ssh-key" để quản lý Ansible tập trung và các client. Ta có thể đặt trong file /etc/ansible/hosts (về sau nên sử dụng sshkey, sẽ rất thuận tiện)
 Bước 1: Tạo ssh-key
# su - tuanda 
# ssh-keygen -t rsa (ấn Enter nhiều lần)
# ssh-copy-id tuanda@192.168.88.13 (thực hiện trên tất cả các client mà bạn muốn join vào ansible)
# ssh-copy-id tuanda@192.168.88.14
....
 
Chạy lệnh:
# su - tuanda 
# ansible apiserver -m shell -a "whoami"
192.168.88.13 | CHANGED | rc=0 >>
tuanda
192.168.88.14 | CHANGED | 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. Trỏ thư viện group_host cần gọi, mặc định nếu không có -i thì sẽ gọi /etc/ansible/hosts
-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 apiserver -m ping (giải thích: gọi ping toàn bộ các hosts trong /etc/ansible/hosts)
$$ ansible apiserver -m command -a uptime
$$ ansible apiserver -a uptime (Default, ansible sẽ cho module = "command")
$$ ansible apiserver -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"

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. Ta sẽ cần viết ra các file playbook và lưu lại. Playbook đơn giản có mẫu như sau (check ping và cài đặt apache2 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 
  become: true
  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: "httpd.conf"
     dest: "/etc/httpd/conf/httpd.conf"
     owner: root
     group: root
     mode: 0644
########### Đẩy code về client
  - name: Deploy web file
    template:
     src: "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:

root@ubuntu:/etc/ansible/playbook-test# ansible-playbook -i /etc/ansible/hosts apache.yaml

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí