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

Docker + Ansible: Cách sạch sẽ để tự động hóa hạ tầng

0 0 7

Người đăng: Kubernetes

Theo Viblo Asia

Nếu bạn từng cảm thấy choáng ngợp khi phải quản lý nhiều máy chủ, cấu hình hoặc bước triển khai, Ansible chính là người bạn đồng hành đáng tin cậy.

Bài viết này sẽ hướng dẫn bạn một thiết lập Ansible thực tế, có tính mô-đun cao — lý tưởng cho các developer và kỹ sư DevOps muốn mở rộng tự động hóa một cách thông minh mà không cần “chế cháo” quá nhiều.

Chúng ta cũng sẽ đi sâu vào cách sử dụng các role bên ngoài, tags, vòng lặp (loops), handlers và kiểm thử, tất cả được sắp xếp trong một cấu trúc thư mục sạch sẽ.

Cấu trúc thư mục (Cơ bản của dự án)

ansible/
├─ README.md
├─ ansible.cfg
├─ go-install-playbook.yml
├─ hosts.ini
├─ install_ansible.sh
├─ install-server-tools.yml
├─ requirements.yml
└─ roles/ └─ server-tools/ ├─ README.md ├─ defaults/main.yml ├─ files/ ├─ handlers/main.yml ├─ meta/main.yml ├─ tasks/ │ ├─ install_docker.yml │ ├─ main.yml │ └─ wander.yml ├─ templates/ ├─ tests/ │ ├─ inventory │ └─ test.yml └─ vars/main.yml

Cấu trúc thư mục này tuân theo các best practices của Ansible. Mỗi role đều có tính mô-đun, có thể tái sử dụng và kiểm thử được.

Cài đặt có điều kiện (Hỗ trợ đa bản phân phối Linux)

Sử dụng ansible_facts để cài đặt các gói tùy theo hệ điều hành:

- name: Install web server based on OS family package: name: "{{ 'httpd' if ansible_facts['os_family'] == 'RedHat' else 'apache2' }}" state: present

Điều này giúp playbook của bạn hoạt động được trên nhiều bản phân phối Linux khác nhau.

Lặp qua các tác vụ

Thay vì viết lại tác vụ cho từng user:

- name: Create users user: name: "{{ item.name }}" groups: "{{ item.groups }}" loop: "{{ user_list }}"

Với danh sách user như sau:

user_list: - { name: "alice", groups: "docker" } - { name: "bob", groups: "sudo" }

Handlers hoạt động thế nào?

Handlers chỉ được kích hoạt khi được thông báo — rất phù hợp cho việc restart dịch vụ:

- name: Update NGINX config template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf notify: Restart NGINX

Trong handlers/main.yml:

- name: Restart NGINX service: name: nginx state: restarted

Gắn thẻ (Tags) để thực thi có chọn lọc

Gắn tag cho tác vụ để chạy riêng lẻ khi cần:

- name: Sync NGINX config copy: src: nginx.conf dest: /etc/nginx/nginx.conf tags: - nginx - config

Chạy chỉ những tác vụ liên quan đến cấu hình:

ansible-playbook install-server-tools.yml --tags config

Ví dụ về role: server-tools

Role này sẽ cài đặt các công cụ CLI như Docker và Wander.

tasks/main.yml

---
- import_tasks: install_docker.yml
- import_tasks: wander.yml

tasks/wander.yml

- name: Install Wander binary get_url: url: https://github.com/robinovitch61/wander/releases/latest/download/wander_Linux_x86_64 dest: /usr/local/bin/wander mode: '0755'

Tổng kết

Khi mọi thứ đã sẵn sàng:

ansible-playbook -i hosts.ini install-server-tools.yml -v

Lệnh trên sẽ thiết lập Docker, công cụ dev, certbot cho HTTPS, cron và cấu hình NGINX an toàn khi reload.

Giữ cho hệ thống sạch sẽ, mô-đun hóa, và chúc bạn tự động hóa vui vẻ!

Bình luận

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

- 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.

1 1 572

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

Phần 1: Giới thiệu về Kubernetes

Kubernetes là gì. Trang chủ: https://kubernetes.io/. Ai cần Kubernetes.

0 0 115

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

Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)

1. Vì sao nên sử dụng. . .

0 0 117

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

Docker - những kiến thức cơ bản phần 1

Giới thiệu. Nếu bạn đang làm ở một công ty công nghệ thông tin, chắc rằng bạn đã được nghe nói về Docker.

0 0 94

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

Docker: Chưa biết gì đến biết dùng (Phần 2 - Dockerfile)

1. Mở đầu.

0 0 79

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

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 141