- vừa được xem lúc

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

0 0 50

Người đăng: Dương Anh Tuấn

Theo Viblo Asia

(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.2 [jobserver]
192.168.89.100
192.168.89.101 [dbservers]
192.168.90.200
192.168.90.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 apiserver -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 python trên client. Ngoài ra nên cài thêm python3
  • 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
# ssh-keygen -t rsa (ấn Enter nhiều lần)
# ssh-copy-id _@.com (thực hiện trên tất cả các client mà bạn muốn join vào ansible)
# ssh-copy-id _@.com
# ssh-copy-id _@.com
.... Chạy lệnh:
$$ ansible apiserver -m shell -a "whoami"
192.168.88.2 | 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: "/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:

_@.com:/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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 528

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 407

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 770

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 367

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 459

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 436