Syllabus chi tiết học Ansible trong 1 tuần
Table of contents
- Part 1: Ansible overview
- Part 2: Modules
- Part 3: Playbooks & Roles
- Part 4: Bảo mật và quản lý mật khẩu
- Part 5: Tối ưu hóa và nâng cao hiệu suất
- Part 6: Mở rộng Ansible với Galaxy và Collections
- Part 7: Ứng dụng thực tế và hướng phát triển
- Một số nội dung bổ sung: Khám phá kiến thức chuyên sâu về cloud & network automation
- Bài hướng dẫn chi tiết:
Part 1: Ansible overview
Mục tiêu:
Hiểu biết sâu sắc về IaC và vai trò then chốt của Ansible trong tự động hóa cơ sở hạ tầng.
Khả năng phân tích và so sánh Ansible với các giải pháp IaC khác, lựa chọn công cụ phù hợp cho từng dự án.
Nắm vững kiến trúc Ansible, từ Control Node đến Modules, và cách chúng tương tác để tạo nên sức mạnh tự động hóa.
Thành thạo cài đặt, cấu hình Ansible trên nhiều nền tảng, xử lý lỗi và tối ưu hóa môi trường làm việc.
Tự tin sử dụng Ansible CLI, thực thi Ad-hoc commands với nhiều options nâng cao, và bắt đầu làm quen với Playbooks.
Nội dung chi tiết:
1. IaC:
Từ thủ công đến tự động:
Điểm lại lịch sử quản trị hệ thống: Từ thao tác thủ công đến script, những hạn chế và bài toán cần giải quyết.
Sự ra đời của IaC như một giải pháp tất yếu: Tự động hóa, kiểm soát phiên bản, cơ sở hạ tầng như code.
Lợi ích vượt trội của IaC:
Tăng tốc độ triển khai: Từ ngày/tuần xuống còn phút/giờ.
Giảm thiểu lỗi do con người: Loại bỏ "human error", đảm bảo tính nhất quán.
Tái sử dụng và quản lý phiên bản: Cơ sở hạ tầng như code, dễ dàng quản lý, tái sử dụng, rollback.
Tăng cường khả năng cộng tác: Team cùng làm việc trên cùng một "codebase" cơ sở hạ tầng.
Bức tranh toàn cảnh IaC:
Phân loại các công cụ IaC theo nhiều tiêu chí:
Mutable vs. Immutable Infrastructure: Thay đổi trực tiếp hay tạo mới hoàn toàn?
Agent-based vs. Agentless: Cần cài agent trên target hay không?
Ngôn ngữ: Sử dụng DSL riêng hay ngôn ngữ lập trình phổ biến?
Phân tích ưu nhược điểm của từng loại, ví dụ:
Mutable dễ tiếp cận nhưng khó quản lý trạng thái, Immutable phức tạp hơn nhưng nhất quán.
Agent-based mạnh mẽ nhưng tốn tài nguyên, Agentless nhẹ nhàng nhưng phụ thuộc kết nối.
Ansible:
Đơn giản và dễ sử dụng: Ngôn ngữ YAML dễ đọc, dễ viết, dễ hiểu.
Mạnh mẽ và linh hoạt: Hàng trăm modules, plugins đáp ứng mọi nhu cầu.
Kiến trúc Agentless: Dễ triển khai, quản lý, ít overhead.
Cộng đồng lớn mạnh: Hỗ trợ phong phú, nhiều tài liệu, dễ dàng tìm kiếm giải pháp.
So sánh Ansible với các đối thủ:
Chef: Mạnh mẽ, cấu hình phức tạp, phù hợp với tổ chức lớn.
Puppet: Kiến trúc client-server, mạnh về quản lý cấu hình, phù hợp với môi trường lớn.
Terraform: Chuyên về quản lý cloud, khai báo thay vì imperative, mạnh khi kết hợp với Ansible.
SaltStack: Tốc độ cao, kiến trúc scalable, phù hợp với môi trường lớn, phức tạp.
Lựa chọn công cụ phù hợp: Không có "best tool", chỉ có "right tool" cho từng bài toán cụ thể. Ansible ghi điểm với sự đơn giản, dễ sử dụng, phù hợp với nhiều quy mô.
2. Ansible overview:
Kiến trúc Agentless - Đơn giản và Hiệu quả:
Control Node kết nối đến Managed Nodes thông qua SSH.
Không cần cài đặt agent trên Managed Nodes, giảm thiểu overhead.
Ansible sử dụng push-based model: Control Node đẩy configurations đến Managed Nodes.
Cơ chế hoạt động:
Ansible kết nối đến Managed Node qua SSH.
Sao chép modules cần thiết đến Managed Node.
Thực thi modules trên Managed Node.
Xóa modules sau khi hoàn thành.
Ưu điểm: Dễ triển khai, quản lý đơn giản, ít overhead, phù hợp với cả môi trường lớn và nhỏ.
Nhược điểm: Phụ thuộc vào SSH, bảo mật có thể là vấn đề nếu cấu hình không đúng, khả năng mở rộng có thể bị giới hạn.
Hệ sinh thái Ansible:
Control Node:
Yêu cầu hệ điều hành: Linux/macOS (khuyến nghị), có thể sử dụng WSL trên Windows.
Cài đặt Python và các package cần thiết.
Lưu trữ Playbooks, Inventories, configurations.
Managed Nodes:
Hỗ trợ đa dạng hệ điều hành: Linux, Windows, macOS, network devices.
Cần có Python để chạy Ansible modules.
Cho phép kết nối SSH từ Control Node.
Inventory:
Định nghĩa các Managed Nodes theo nhóm, hostnames, IP addresses.
Hỗ trợ biến để cấu hình linh hoạt.
Có thể sử dụng dynamic inventory để tự động cập nhật danh sách hosts.
Định dạng file: INI (
.ini
), YAML (.yml
).
Modules:
Mỗi module thực hiện một tác vụ cụ thể (ví dụ: quản lý user, cài đặt package, cấu hình service).
Ansible cung cấp hàng trăm modules "sẵn sàng sử dụng", phân loại theo chức năng: system, cloud, network, web...
Có thể viết modules tùy chỉnh bằng Python để mở rộng khả năng của Ansible.
Modules đảm bảo tính idempotency: Chỉ thực hiện thay đổi khi cần thiết, giúp Playbook có thể chạy lại nhiều lần mà không gây ra side effects.
Plugins:
Tăng cường chức năng cho Ansible core.
Phân loại theo chức năng: connection, lookup, callback, filter, strategy, vars.
Ví dụ:
Connection plugins: Thay đổi cách thức Ansible kết nối đến Managed Node (ví dụ: SSH, WinRM).
Lookup plugins: Lấy dữ liệu từ các nguồn khác nhau (ví dụ: file, database, environment variables).
Callback plugins: Thực thi các hành động trước, trong, sau khi Playbook chạy.
Playbooks:
File YAML chứa chuỗi các tasks (công việc) cần thực hiện trên Managed Nodes.
Cấu trúc rõ ràng, dễ đọc, dễ hiểu.
Hỗ trợ biến, điều kiện, lặp để tạo Playbook linh hoạt.
Có thể sử dụng Roles để tổ chức Playbook lớn thành các thành phần nhỏ hơn, dễ quản lý và tái sử dụng.
3. Cài đặt Ansible
Lựa chọn phương pháp cài đặt:
Package manager (khuyến nghị): Đơn giản, nhanh chóng, đảm bảo dependencies.
Ubuntu/Debian:
apt install ansible
.CentOS/RHEL:
yum install ansible
.
Pip (Python package manager): Cài đặt phiên bản cụ thể, có thể sử dụng virtual environments.
pip install ansible
.
Source code: Linh hoạt, kiểm soát phiên bản, phù hợp với người dùng nâng cao.
- Tải source code từ Github, build và cài đặt.
Xử lý lỗi thường gặp:
Thiếu package dependencies: Cài đặt các package còn thiếu.
Phiên bản Python không tương thích: Cài đặt phiên bản Python phù hợp hoặc sử dụng virtual environment.
Lỗi liên quan đến quyền truy cập: Sử dụng
sudo
hoặc đăng nhập bằng user có quyền root.
Cấu hình môi trường làm việc Ansible:
File cấu hình Ansible (
ansible.cfg
):Vị trí:
/etc/ansible/ansible.cfg
(hệ thống),~/.ansible.cfg
(user).Cấu hình đường dẫn Inventory, user kết nối, SSH key, ...
Ví dụ cấu hình:
[defaults] inventory = /etc/ansible/hosts remote_user = user private_key_file = /home/user/.ssh/id_rsa forks = 5
Môi trường ảo Python (khuyến nghị):
Tạo môi trường ảo:
python3 -m venv .venv
.Kích hoạt môi trường ảo:
source .venv/bin/activate
.Cài đặt Ansible trong môi trường ảo:
pip install ansible
.Lợi ích:
Cô lập dependencies của Ansible với hệ thống.
Dễ dàng quản lý phiên bản Ansible.
Tránh xung đột với các ứng dụng Python khác.
4. Ansible CLI:
Khám phá các lệnh cơ bản:
ansible
: Thực thi Ad-hoc commands.Cú pháp:
ansible <host_pattern> -m <module_name> -a "<module_arguments>"
.Ví dụ:
ansible webservers -m service -a "name=nginx state=restarted"
.
ansible-playbook
: Chạy Playbook.Cú pháp:
ansible-playbook <playbook_name>.yml
.Ví dụ:
ansible-playbook install_nginx.yml
.
ansible-vault
: Mã hóa và giải mã dữ liệu.Mã hóa file:
ansible-vault encrypt my_secrets.yml
.Giải mã file:
ansible-vault decrypt my_secrets.yml
.
ansible-galaxy
: Quản lý Roles.Tải Role:
ansible-galaxy install username.role_name
.Tìm kiếm Role:
ansible-galaxy search <keyword>
.
Ad-hoc Commands:
Khái niệm: Lệnh đơn lẻ, thực thi ngay trên CLI, không cần viết Playbook.
Lợi ích:
Thực thi các tác vụ đơn giản, nhanh chóng.
Kiểm tra kết nối, gather information từ Managed Nodes.
Khắc phục sự cố, debug.
Cấu trúc lệnh:
ansible <host_pattern> -m <module_name> -a "<module_arguments>"
.<host_pattern>
: Xác định Managed Node hoặc nhóm Managed Nodes (ví dụ:webservers
,dbservers
,192.168.1.1
).m <module_name>
: Tên module cần sử dụng (ví dụ:apt
,yum
,service
,user
).a "<module_arguments>"
: Các tham số truyền cho module (ví dụ:name=nginx state=started
).
Ví dụ thực tế:
Ping tất cả các Managed Nodes:
ansible all -m ping
.Khởi động dịch vụ
nginx
trên nhómwebservers
:ansible webservers -m service -a "name=nginx state=started"
.Tạo user mới trên Managed Node
192.168.1.100
:ansible 192.168.1.100 -m user -a "name=john group=wheel state=present"
.
Ad-hoc Commands nâng cao:
i <inventory_file>
: Sử dụng file Inventory cụ thể.u <remote_user>
: Kết nối đến Managed Node với user cụ thể.k
: Yêu cầu nhập mật khẩu SSH.b
: Chạy với quyền root trên Managed Node.v
,vvv
: Tăng mức độ chi tiết output (verbose mode).f <forks>
: Thay đổi số lượng kết nối đồng thời.Kết hợp các options để tạo lệnh phức tạp hơn, ví dụ:
ansible webservers -i production_inventory.yml -u deploy_user -b -m apt -a "name=nginx state=latest"
.
Bài tập:
Cài đặt Ansible và cấu hình môi trường:
Cài đặt Ansible trên máy trạm (Linux/macOS).
Tạo hai máy ảo (Ubuntu & CentOS) và cấu hình SSH key-based authentication từ máy trạm.
Tạo Ansible Inventory:
Tạo file Inventory (ví dụ:
hosts.ini
hoặchosts.yml
).Thêm hai máy ảo vào Inventory, phân nhóm theo hệ điều hành:
webservers
(Ubuntu),dbservers
(CentOS).
Thực hành Ad-hoc commands:
Sử dụng
ping
module để kiểm tra kết nối đến tất cả Managed Nodes.Cài đặt package
nginx
trên nhómwebservers
và packagehttpd
trên nhómdbservers
, sử dụng module phù hợp với từng hệ điều hành (apt
hoặcyum
).Khởi động dịch vụ
nginx
trên nhómwebservers
và dịch vụhttpd
trên nhómdbservers
.Tạo user
ansible_admin
với quyền sudo trên tất cả Managed Nodes.
Part 2: Modules
Mục tiêu:
Hiểu rõ vai trò quan trọng của Modules trong hệ sinh thái Ansible.
Phân biệt các loại Modules, cách chúng hoạt động, và cách tìm kiếm module phù hợp.
Nắm vững các Modules quan trọng trong quản lý hệ thống: quản lý packages, services, users, files, ...
Sử dụng thành thạo các Modules nâng cao để thực hiện các tác vụ phức tạp.
Bắt đầu làm quen với việc debug và xử lý lỗi khi làm việc với Modules.
Nội dung chi tiết:
1. Modules:
Vai trò trung tâm:
Modules là "trái tim" của Ansible, thực thi các tác vụ cụ thể trên Managed Nodes.
Mỗi Module được thiết kế để thực hiện một công việc duy nhất (ví dụ: cài đặt package, khởi động service, tạo user, ...).
Ansible có sẵn hàng trăm Modules, đáp ứng gần như mọi nhu cầu tự động hóa cơ sở hạ tầng.
Nguyên tắc hoạt động "Idempotency":
Modules được thiết kế để đảm bảo tính idempotent: chỉ thực hiện thay đổi khi cần thiết.
Nếu chạy Module nhiều lần trên cùng một trạng thái hệ thống, kết quả sẽ luôn như nhau.
Lợi ích:
Tránh side effects, đảm bảo tính nhất quán cho cơ sở hạ tầng.
An toàn khi chạy Playbook nhiều lần, ví dụ: khi rollback hoặc deploy lại.
Phân loại Modules:
Core Modules: Được tích hợp sẵn trong Ansible Core, được hỗ trợ và maintain bởi cộng đồng Ansible.
Extras Modules: Các Modules bổ sung, không được tích hợp trong Ansible Core, thường được sử dụng cho các tác vụ đặc biệt.
Community Modules: Được phát triển và chia sẻ bởi cộng đồng Ansible, có thể tìm thấy trên Ansible Galaxy.
Tìm kiếm và khám phá Modules:
Tài liệu Ansible: https://docs.ansible.com/ là nguồn tài liệu chính thức và đầy đủ nhất.
Lệnh
ansible-doc
: Hiển thị thông tin chi tiết về Module, bao gồm các tham số, giá trị trả về, ví dụ:ansible-doc apt
.Ansible Galaxy: Tìm kiếm Modules được chia sẻ bởi cộng đồng.
2. Modules quản lý hệ thống
Quản lý Packages:
apt
(Debian/Ubuntu):Cài đặt, gỡ bỏ, cập nhật packages.
Ví dụ:
Cài đặt package
nginx
:apt: name=nginx state=latest
Gỡ bỏ package
mysql-server
:apt: name=mysql-server state=absent
yum
(CentOS/RHEL):Tương tự như
apt
nhưng dành cho hệ điều hành dựa trên RPM.Ví dụ:
Cài đặt package
httpd
:yum: name=httpd state=present
Cập nhật tất cả packages:
yum: name=* state=latest
dnf
(Fedora/CentOS Stream):Trình quản lý package mặc định trên các hệ điều hành mới của Fedora và CentOS.
Sử dụng tương tự như
yum
.
Quản lý Services:
service
:Khởi động, dừng, restart, enable/disable services.
Ví dụ:
Khởi động service
nginx
:service: name=nginx state=started
Dừng service
mysqld
:service: name=mysqld state=stopped
systemd
:Quản lý services sử dụng
systemd
(trình quản lý service mặc định trên hầu hết các bản phân phối Linux hiện đại).Ví dụ:
Khởi động service
docker
:systemd: name=docker state=started
Enable service
firewalld
khi khởi động:systemd: name=firewalld enabled=yes
Quản lý Users & Groups:
user
:Tạo, xóa, sửa đổi users.
Ví dụ:
Tạo user
john
:user: name=john state=present shell=/bin/bash
Thêm user
jane
vào groupsudo
:user: name=jane groups=sudo append=yes state=present
group
:Tạo, xóa, sửa đổi groups.
Ví dụ:
Tạo group
developers
:group: name=developers state=present
Thêm user
john
vào groupdevelopers
:group: name=developers state=present gid=1001 members=john
Quản lý Files & Directories:
file
:Tạo, xóa, sửa đổi files & directories.
Ví dụ:
Tạo file
/etc/motd
:file: path=/etc/motd state=touch mode=0644 owner=root group=root
Xóa directory
/tmp/test
:file: path=/tmp/test state=absent
copy
:Sao chép file từ Control Node đến Managed Nodes.
Ví dụ:
- Sao chép file
config.php
từ Control Node đến/var/www/html
:copy: src=config.php dest=/var/www/html/config.php
- Sao chép file
lineinfile
:Chèn hoặc sửa đổi dòng trong file.
Ví dụ:
- Thêm dòng
PermitRootLogin yes
vào file/etc/ssh/sshd_config
:lineinfile: path=/etc/ssh/sshd_config line="PermitRootLogin yes" state=present
- Thêm dòng
Modules khác:
command
: Thực thi command trên Managed Node, không sử dụng shell.shell
: Thực thi command trên Managed Node, sử dụng shell.cron
: Quản lý cron jobs.get_url
: Tải file từ URL.unarchive
: Giải nén file.
3. Modules nâng cao:
template
:Tạo file cấu hình động với Jinja2 templating engine.
Truyền biến từ Playbook vào template.
Ví dụ:
- name: Configure Nginx virtual host template: src: templates/vhost.conf.j2 dest: /etc/nginx/sites-available/mysite.conf owner: root group: root mode: 0644 vars: domain_name: example.com server_name: www.example.com
blockinfile
:Chèn hoặc thay thế khối nội dung trong file.
Hỗ trợ nhiều options để định vị khối nội dung, kiểm soát indentation.
Ví dụ:
- name: Add configuration block to sshd_config blockinfile: path: /etc/ssh/sshd_config block: | # Custom SSH settings Port 2222 PermitRootLogin no create: yes
Sử dụng
register
để lưu trữ output:register
cho phép bạn lưu trữ kết quả trả về của một task (bao gồm cả output của Module) vào một biến.Sử dụng biến này trong các tasks tiếp theo.
Ví dụ:
- name: Get current date command: date +%Y-%m-%d register: current_date - name: Create directory with current date file: path: /tmp/backup/{{ current_date.stdout }} state: directory mode: 0755
4. Debug & xử lý lỗi:
Tăng Verbosity:
- Sử dụng option
v
(hoặcvv
,vvv
) khi chạy Playbook để hiển thị output chi tiết hơn.
- Sử dụng option
debug
Module:In giá trị của biến, debug logic trong Playbook.
Ví dụ:
- name: Print debug message debug: msg: "The value of variable 'x' is {{ x }}"
Xử lý Lỗi:
ignore_errors
: Bỏ qua lỗi của task và tiếp tục Playbook.failed_when
: Đánh dấu task làfailed
khi một điều kiện nào đó được thỏa mãn.changed_when
: Kiểm soát khi nào một task được đánh dấu làchanged
.
Bài tập:
Thực hành Modules cơ bản:
Viết Playbook sử dụng
apt
để cài đặtnginx
trên Ubuntu vàyum
để cài đặthttpd
trên CentOS.Sử dụng
service
hoặcsystemd
để đảm bảonginx
vàhttpd
luôn chạy.Tạo user
webadmin
và thêm vào groupwww-data
trên Ubuntu, thêm vào groupapache
trên CentOS.
Làm việc với Files & Templates:
Sao chép file cấu hình
nginx.conf
từ Control Node đến/etc/nginx/
trên Ubuntu.Sử dụng
template
để tạo file cấu hìnhhttpd.conf
trên CentOS, truyền biếnServerName
từ Playbook.Sử dụng
lineinfile
để thêm dòngindex index.php index.html
vào file cấu hìnhnginx
trên Ubuntu.
- Debug & Xử lý Lỗi:
Chạy Playbook với các options
v
,vv
,vvv
để xem output chi tiết.Sử dụng
debug
module để in giá trị của các biến trong Playbook.Thêm
ignore_errors
vào task có thể gặp lỗi để Playbook tiếp tục chạy.
Part 3: Playbooks & Roles
Mục tiêu:
Nắm vững cấu trúc và cách thức hoạt động của Playbook, từ hosts đến tasks, variables, handlers.
Viết Playbook với cấu trúc rõ ràng, dễ đọc, dễ hiểu, tuân thủ best practices.
Sử dụng thành thạo các tính năng nâng cao của Playbook: biến, điều kiện, lặp, tags, ...
Hiểu rõ khái niệm và lợi ích của Roles trong việc tổ chức và tái sử dụng Playbook.
Tự tin viết Roles với cấu trúc chuẩn, truyền tham số linh hoạt, và sử dụng Roles trong Playbook.
Nội dung chi tiết:
1. Playbooks:
Ad-hoc commands & Playbooks:
Ad-hoc commands phù hợp với các tác vụ đơn giản, nhanh chóng.
Khi cần thực hiện nhiều tasks phức tạp, Playbooks là giải pháp tối ưu.
Playbook cho phép bạn định nghĩa chuỗi các tasks, logic thực thi, và cấu hình cho Ansible.
Cấu trúc Playbook:
Playbooks được viết bằng YAML, một định dạng dữ liệu dễ đọc, dễ viết, dễ hiểu.
Cấu trúc cơ bản của Playbook:
hosts
: Xác định Managed Nodes hoặc nhóm Managed Nodes sẽ thực thi Playbook.tasks
: Danh sách các tasks cần thực hiện trên Managed Nodes.variables
: Khai báo biến sử dụng trong Playbook.handlers
: Định nghĩa các tasks sẽ được thực thi khi có thay đổi từ các tasks khác.
Ví dụ Playbook đơn giản:
--- - hosts: webservers tasks: - name: Install Nginx apt: name: nginx state: latest - name: Start Nginx service: name: nginx state: started
Phân tích chi tiết các thành phần:
hosts
:Có thể là một hostname, IP address, hoặc nhóm hosts được định nghĩa trong Inventory.
Hỗ trợ patterns để lựa chọn hosts linh hoạt (ví dụ:
webservers
,dbservers[0:2]
,all
).
tasks
:Mỗi task là một công việc cần thực hiện trên Managed Node.
Mỗi task sử dụng một Module cụ thể để thực hiện công việc (ví dụ:
apt
,yum
,service
,user
, ...).Thực thi tuần tự từ trên xuống dưới.
variables
:Cho phép lưu trữ giá trị để sử dụng lại trong Playbook.
Khai báo biến sử dụng cú pháp
{{ variable_name }}
.Ví dụ:
{{ webserver_port }}
,{{ db_password }}
.
handlers
:Là các tasks đặc biệt, chỉ được thực thi khi có thay đổi từ các tasks khác.
Thường được sử dụng để restart service sau khi cấu hình.
Được trigger bởi
notify
directive trong tasks.
Thực thi Playbook:
Lệnh:
ansible-playbook <playbook_name>.yml
.Kết nối đến Managed Nodes, sao chép modules, thực thi tasks, và hiển thị kết quả.
2. Biến, điều kiện, lặp:
Variable:
Các loại biến:
Facts: Thông tin thu thập từ Managed Nodes (ví dụ: hệ điều hành, IP address, CPU, RAM).
Variables: Khai báo trực tiếp trong Playbook hoặc file variables.
Registered variables: Lưu trữ output của tasks.
Extra vars: Truyền biến từ command line.
Phạm vi và thứ tự ưu tiên:
Global: Áp dụng cho tất cả Playbooks.
Playbook: Áp dụng cho Playbook hiện tại.
Inventory: Áp dụng cho host hoặc nhóm hosts trong Inventory.
Role: Áp dụng cho Role cụ thể.
Sử dụng biến:
Truy cập giá trị biến:
{{ variable_name }}
.Truyền biến từ command line:
ansible-playbook my_playbook.yml -e "variable1=value1 variable2=value2"
.
Điều kiện (
when
):Thực thi task chỉ khi một điều kiện nào đó được thỏa mãn.
Sử dụng toán tử so sánh, toán tử logic, kiểm tra giá trị biến, ...
Ví dụ:
- name: Install Apache only on CentOS yum: name: httpd state: latest when: ansible_distribution == 'CentOS'
Lặp (
loop
):Thực hiện một task nhiều lần với dữ liệu khác nhau.
Sử dụng với danh sách, dictionaries.
Ví dụ: Tạo nhiều users từ danh sách:
- name: Create multiple users user: name: "{{ item.username }}" state: present groups: "{{ item.groups }}" loop: - { username: 'john', groups: 'wheel' } - { username: 'jane', groups: 'users' }
3. Roles:
Từ Playbook dài dòng đến Roles gọn gàng:
Khi Playbook trở nên phức tạp, việc quản lý và tái sử dụng code trở nên khó khăn.
Roles ra đời để giải quyết vấn đề này, giúp chia nhỏ Playbook thành các module nhỏ hơn, có thể tái sử dụng.
Lợi ích của Roles:
Modularity: Chia nhỏ Playbook thành các thành phần độc lập.
Reusability: Sử dụng lại Roles trong nhiều Playbooks khác nhau.
Maintainability: Dễ dàng quản lý, bảo trì và cập nhật code.
Cấu trúc thư mục của Role:
tasks/
: Chứa các tasks của Role.handlers/
: Chứa các handlers của Role.defaults/
: Chứa các giá trị mặc định cho biến.vars/
: Chứa các biến của Role.files/
: Chứa các files sẽ được sao chép đến Managed Nodes.templates/
: Chứa các templates.meta/
: Chứa metadata của Role (ví dụ: dependencies).
Sử dụng Roles trong Playbook:
Sử dụng
roles
directive trong Playbook để gọi Role.Ví dụ:
- hosts: webservers roles: - role: nginx
Truyền tham số cho Roles:
Sử dụng
vars
trongroles
directive.Ví dụ:
- hosts: webservers roles: - role: nginx vars: nginx_version: 1.20.1
Bài tập:
Viết Playbook với biến, điều kiện, lặp:
Tạo Playbook cài đặt
nginx
trên Ubuntu vàhttpd
trên CentOS, sử dụng biếnwebserver_package
để lưu trữ tên package.Sử dụng
when
để chỉ cài đặt package khi biếninstall_webserver
có giá trịtrue
.Sử dụng
loop
để tạo nhiều virtual hosts chonginx
vàhttpd
từ danh sách.
Chuyển đổi Playbook thành Role:
Chuyển đổi Playbook ở bài tập 1 thành Role
webserver
.Tạo các biến
webserver_type
(nginx hoặc httpd) vàvirtual_hosts
(danh sách virtual hosts).Viết Playbook sử dụng Role
webserver
để cài đặt và cấu hình web server trên Ubuntu và CentOS.
Tìm hiểu và sử dụng Roles từ Ansible Galaxy:
Tìm kiếm Role
geerlingguy.nginx
trên Ansible Galaxy.Viết Playbook sử dụng Role này để cài đặt và cấu hình
nginx
trên Ubuntu.Tham khảo tài liệu của Role để tìm hiểu cách truyền tham số và cấu hình.
Part 4: Bảo mật và quản lý mật khẩu
Mục tiêu:
Nhận thức rõ tầm quan trọng của bảo mật khi làm việc với Ansible.
Hiểu rõ cách thức hoạt động và sử dụng thành thạo Ansible Vault để bảo mật thông tin nhạy cảm.
Áp dụng các kỹ thuật quản lý mật khẩu an toàn, bảo vệ Playbook và dữ liệu nhạy cảm.
Sử dụng kết nối SSH nâng cao để tăng cường bảo mật cho Ansible.
Làm quen với các modules quản lý mạng để thiết lập tường lửa và kiểm soát truy cập.
Nội dung chi tiết:
1. Bảo mật Ansible:
Rủi ro tiềm ẩn khi không chú trọng bảo mật:
Playbooks và roles có thể chứa thông tin nhạy cảm: mật khẩu, API keys, credentials.
Nếu không được bảo vệ, thông tin này có thể bị lộ, gây ra rủi ro bảo mật nghiêm trọng.
Các phương pháp bảo mật Ansible:
Ansible Vault: Mã hóa files và biến chứa thông tin nhạy cảm.
Quản lý mật khẩu an toàn: Không lưu trữ mật khẩu trực tiếp trong Playbook, sử dụng vault hoặc các công cụ quản lý mật khẩu chuyên dụng.
SSH key-based authentication: Sử dụng SSH keys thay vì mật khẩu để kết nối đến Managed Nodes.
Firewall: Cấu hình firewall để giới hạn truy cập đến Control Node và Managed Nodes.
Best practices bảo mật Ansible:
Không bao giờ lưu trữ thông tin nhạy cảm trực tiếp trong Playbook.
Luôn sử dụng Ansible Vault để bảo vệ thông tin nhạy cảm.
Sử dụng SSH keys thay vì mật khẩu.
Giới hạn truy cập đến Control Node và Managed Nodes.
Thường xuyên cập nhật Ansible và các modules lên phiên bản mới nhất.
2. Ansible Vault:
Cơ chế hoạt động:
Ansible Vault sử dụng thuật toán mã hóa mạnh mẽ (AES256) để mã hóa files và biến.
Cần cung cấp mật khẩu để mã hóa và giải mã dữ liệu.
Dữ liệu được mã hóa không thể đọc được nếu không có mật khẩu.
Mã hóa và giải mã files:
Mã hóa file:
ansible-vault encrypt <file_path>
.Giải mã file:
ansible-vault decrypt <file_path>
.Xem nội dung file đã mã hóa:
ansible-vault view <file_path>
.
Sử dụng biến được mã hóa trong Playbook:
Khai báo biến trong file YAML và mã hóa bằng Ansible Vault.
Sử dụng
!vault
tag để đánh dấu biến được mã hóa.Ansible sẽ tự động giải mã biến khi chạy Playbook.
Ví dụ:
--- secret_key: !vault | -----BEGIN VAULT ENCRYPTED STRING----- version: 1.1 # ... (nội dung đã mã hóa) ... -----END VAULT ENCRYPTED STRING-----
Quản lý mật khẩu Vault:
Nhập mật khẩu từ command line: Ansible sẽ nhắc nhập mật khẩu khi chạy Playbook.
Sử dụng Vault password file: Lưu trữ mật khẩu trong file và truyền cho Ansible.
Environment variable: Lưu trữ mật khẩu trong biến môi trường
ANSIBLE_VAULT_PASSWORD_FILE
.
Khuyến nghị bảo mật khi sử dụng Vault:
Sử dụng mật khẩu mạnh và không trùng lặp.
Không lưu trữ mật khẩu cùng với Playbook.
Phân quyền truy cập chặt chẽ cho Vault password file.
Thay đổi mật khẩu định kỳ.
3. Quản lý mật khẩu an toàn:
Không bao giờ lưu trữ mật khẩu trực tiếp trong Playbook!
Các giải pháp thay thế:
Ansible Vault: Giải pháp đơn giản, tích hợp sẵn trong Ansible.
Hệ thống quản lý mật khẩu chuyên dụng (Vault): HashiCorp Vault, AWS Secrets Manager, Azure Key Vault.
- Lợi ích: Quản lý tập trung, kiểm soát truy cập chi tiết, lưu trữ audit logs.
Sử dụng
lookup
plugins để truy cập secrets từ Vault:lookup
plugins cho phép truy xuất dữ liệu từ các nguồn khác nhau, bao gồm cả Vault.Ví dụ: Sử dụng
hashi_vault
plugin để lấy secret từ HashiCorp Vault:- name: Get database password from Vault debug: msg: "Database password: {{ lookup('hashi_vault', 'secret/data/database password') }}"
4. Kết nối SSH:
SSH key-based authentication:
Tạo cặp SSH key trên Control Node.
Sao chép public key đến Managed Nodes.
Cấu hình Ansible sử dụng SSH key để kết nối (trong
ansible.cfg
hoặc command line).Lợi ích: Bảo mật hơn mật khẩu, không cần nhập mật khẩu khi chạy Playbook.
SSH config file:
Tạo file
~/.ssh/config
để lưu trữ cấu hình SSH cho từng host.Ví dụ:
Host webserver1 HostName 192.168.1.100 User ubuntu IdentityFile ~/.ssh/id_rsa_webserver1 Host dbserver1 HostName 192.168.1.200 User centos IdentityFile ~/.ssh/id_rsa_dbserver1
Jump host:
Sử dụng một máy chủ trung gian (jump host) để kết nối đến Managed Nodes trong mạng riêng.
Cấu hình jump host trong
ansible.cfg
hoặc SSH config file.Lợi ích: Tăng cường bảo mật, chỉ cần mở cổng SSH trên jump host.
5. Modules mạng & tường lửa:
net_firewall_rule
: Quản lý firewall rules trên Linux (iptables, firewalld, ufw).Ví dụ: Mở port 80 và 443 trên CentOS sử dụng firewalld:
- name: Allow HTTP and HTTPS traffic net_firewall_rule: zone: public service: [http, https] permanent: yes state: enabled
net_hostname
: Thay đổi hostname của Managed Node.net_interface
: Cấu hình network interface.Các modules khác: Ansible cung cấp nhiều modules khác để quản lý mạng, tham khảo tài liệu để biết thêm chi tiết.
Bài tập:
Bảo mật Playbook với Ansible Vault:
Tạo file
vault_vars.yml
chứa biếndb_password
và mã hóa bằng Ansible Vault.Viết Playbook sử dụng biến
db_password
từ filevault_vars.yml
để tạo user database.
Sử dụng SSH key-based authentication:
Tạo cặp SSH key trên Control Node.
Sao chép public key đến Managed Nodes.
Cấu hình Ansible sử dụng SSH key để kết nối.
Chạy lại Playbook ở bài tập 1 và xác nhận không cần nhập mật khẩu.
Cấu hình firewall:
Sử dụng module
net_firewall_rule
để mở các ports cần thiết (ví dụ: 22, 80, 443) trên Managed Nodes.Kiểm tra kết quả bằng cách thử truy cập vào các ports này từ máy trạm.
Part 5: Tối ưu hóa và nâng cao hiệu suất
Mục tiêu:
Hiểu rõ các yếu tố ảnh hưởng đến tốc độ và hiệu suất của Ansible.
Sử dụng thành thạo các kỹ thuật tối ưu hóa: kiểm soát chiến lược thực thi, sử dụng handlers hiệu quả, ...
Nâng cao khả năng kiểm soát luồng thực thi của Playbook: điều khiển trạng thái task, xử lý lỗi linh hoạt.
Áp dụng các "tuyệt chiêu" để tối ưu Playbook cho môi trường lớn, đảm bảo tốc độ và sự ổn định.
Nội dung chi tiết:
1. Chiến lược Thực thi:
Thực thi song song:
Ansible mặc định thực thi tasks song song trên nhiều hosts, tăng tốc độ triển khai.
Số lượng forks (kết nối song song) được cấu hình bởi
forks
trongansible.cfg
(mặc định là 5).
Kiểm soát song song với
serial
:serial
cho phép bạn chia nhỏ số lượng hosts thực thi đồng thời, phù hợp với tác vụ cần cẩn trọng hoặc tài nguyên hạn chế.Ví dụ: Cập nhật firmware cho 100 thiết bị, chỉ cho phép 10 thiết bị cập nhật đồng thời:
- hosts: network_devices serial: 10 tasks: - name: Update firmware # ...
strategy
:linear
(mặc định): Thực thi tasks tuần tự trên từng batch hosts.free
: Thực thi tasks trên các hosts "rảnh rỗi" nhất, tối ưu hóa tốc độ cho môi trường không đồng nhất.Ví dụ: Sử dụng
free
strategy:- hosts: all strategy: free tasks: - name: Install software # ...
2. Handlers & Notify:
Handlers:
Tasks đặc biệt, chỉ được thực thi khi có thay đổi từ các tasks khác.
Thường được sử dụng để restart services, reload configurations.
Đảm bảo idempotency: chỉ thực thi khi cần thiết.
notify
:Sử dụng
notify
trong task để trigger handler tương ứng.Ví dụ: Restart
nginx
sau khi thay đổi cấu hình:- name: Update Nginx configuration # ... notify: restart nginx handlers: - name: restart nginx service: name: nginx state: restarted
Tối ưu hóa handlers:
Chỉ định handlers ở cấp Playbook để tránh lặp lại trong nhiều tasks.
Sử dụng
listen
vàflush_handlers
để kiểm soát handlers linh hoạt hơn.
3. Flow Control:
failed_when
vàchanged_when
:failed_when
: Đánh dấu task làfailed
khi một điều kiện nào đó được thỏa mãn.changed_when
: Kiểm soát khi nào một task được đánh dấu làchanged
.Ví dụ:
- name: Check if website is up uri: url: <https://example.com> register: website_status failed_when: website_status.status_code != 200 - name: Send alert if website is down # ... when: website_status is failed
block
,rescue
,always
:block
: Nhóm các tasks lại với nhau.rescue
: Thực thi tasks khi có lỗi xảy ra trongblock
.always
: Luôn thực thi tasks, dùblock
thành công hay thất bại.Ví dụ:
- name: Install and configure database block: - name: Install MySQL # ... - name: Configure MySQL # ... rescue: - name: Rollback database installation # ... always: - name: Send notification # ...
4. Xử lý lỗi
max_fail_percentage
:Dừng Playbook khi tỉ lệ hosts bị lỗi vượt quá ngưỡng cho phép.
Ví dụ: Dừng Playbook nếu có hơn 20% hosts bị lỗi:
- hosts: all max_fail_percentage: 20 tasks: - name: Install software # ...
any_errors_fatal
:Dừng Playbook ngay khi có bất kỳ lỗi nào xảy ra.
Phù hợp với tác vụ cần tính chính xác tuyệt đối.
delegate_to
Chạy task trên một host khác, không phải host được chỉ định trong
hosts
.Ví dụ: Chạy task trên Control Node để generate config file:
- name: Generate config file on control node template: # ... delegate_to: localhost
Bài tập:
Thực hành
serial
vàstrategy
:Tạo 10 máy ảo (sử dụng Vagrant hoặc Docker) và thêm vào Ansible Inventory.
Viết Playbook cài đặt một phần mềm trên 10 máy ảo này, sử dụng
serial
để kiểm soát số lượng hosts thực thi đồng thời (ví dụ:serial: 2
).Thực hiện benchmark và so sánh tốc độ thực thi với các giá trị
serial
khác nhau (1, 2, 5, 10).Thay đổi
strategy
thànhfree
và so sánh tốc độ thực thi.
Tối ưu hóa handlers:
Viết Playbook cấu hình
nginx
và sử dụng handler để restartnginx
sau mỗi lần thay đổi cấu hình.Chạy Playbook nhiều lần và quan sát số lần handler được thực thi.
Tối ưu hóa Playbook bằng cách chỉ định handler ở cấp Playbook và sử dụng
notify
trong các tasks.
Kiểm soát luồng thực thi và xử lý lỗi:
Viết Playbook với các tasks có thể gặp lỗi (ví dụ: kết nối đến database, tải file từ URL không tồn tại).
Sử dụng
failed_when
hoặcchanged_when
để kiểm soát trạng thái task dựa trên kết quả của task trước đó.Sử dụng
block
,rescue
,always
để xử lý lỗi và đảm bảo Playbook tiếp tục chạy cho đến khi hoàn thành.
Part 6: Mở rộng Ansible với Galaxy và Collections
Mục tiêu:
Ansible Galaxy: tìm kiếm, tải xuống và sử dụng hàng ngàn Roles và Collections từ cộng đồng.
Nắm vững cách thức đóng góp cho cộng đồng: tạo, đóng gói và xuất bản Roles và Collections của riêng bạn lên Ansible Galaxy.
Phát triển kỹ năng tái sử dụng code, tận dụng sức mạnh cộng đồng để tối ưu hóa và đẩy nhanh quá trình tự động hóa.
Nội dung chi tiết:
1. Ansible Galaxy:
Giới thiệu Ansible Galaxy:
Là kho lưu trữ trực tuyến (online repository) khổng lồ cho Ansible content.
Cung cấp hàng ngàn Roles và Collections được phát triển bởi cộng đồng và các nhà cung cấp (vendors) uy tín.
Miễn phí sử dụng, giúp bạn tiết kiệm thời gian và công sức khi tự động hóa.
Tìm kiếm resources trên Galaxy:
Truy cập website: https://galaxy.ansible.com/
Sử dụng thanh tìm kiếm để tìm Roles và Collections theo tên, từ khóa, tác giả, ...
Lọc kết quả theo nhiều tiêu chí: số lượt tải xuống, đánh giá, phiên bản Ansible tương thích.
Tải xuống và sử dụng Roles:
ansible-galaxy
CLI: Công cụ dòng lệnh để tương tác với Ansible Galaxy.Cài đặt Role:
ansible-galaxy install username.role_name
.Cập nhật Role:
ansible-galaxy update username.role_name
.Gỡ bỏ Role:
ansible-galaxy remove username.role_name
.
requirements.yml
file: Quản lý dependencies (Roles cần thiết) cho Playbook.Liệt kê các Roles cần thiết với phiên bản cụ thể.
Cài đặt Roles từ
requirements.yml
:ansible-galaxy collection install -r requirements.yml
.
Ví dụ: Cài đặt Role
geerlingguy.nginx
:ansible-galaxy install geerlingguy.nginx
Khám phá Roles phổ biến:
geerlingguy.nginx: Cài đặt và cấu hình Nginx web server.
geerlingguy.mysql: Cài đặt và cấu hình MySQL database server.
geerlingguy.postgresql: Cài đặt và cấu hình PostgreSQL database server.
ansible.posix.ssh_config: Quản lý SSH config file.
... và hàng ngàn Roles khác cho mọi nhu cầu!
2. Tạo và publish Roles:
Cấu trúc thư mục Role:
Giữ nguyên cấu trúc thư mục như phần Roles trước đó.
Thêm file
README.md
để mô tả Role chi tiết: chức năng, cách sử dụng, tham số, ví dụ.Thêm file
meta/main.yml
để cung cấp metadata cho Role: tên, phiên bản, tác giả, dependencies.
Best practices khi viết Roles:
Idempotency: Đảm bảo Role có thể chạy nhiều lần mà không gây ra side effects.
Modularity: Chia nhỏ Role thành các tasks, handlers, templates rõ ràng.
Documentation: Viết tài liệu chi tiết, dễ hiểu, giúp người khác dễ dàng sử dụng Role.
Testing: Kiểm thử Role kỹ lưỡng trước khi chia sẻ.
Publish Role lên Ansible Galaxy:
Tạo tài khoản trên Ansible Galaxy.
Tạo new repository trên Galaxy và push code Role lên.
Ansible Galaxy sẽ tự động build và publish Role của bạn.
Share Roles:
Chia sẻ Role trên các diễn đàn, blog, mạng xã hội.
Yêu cầu cộng đồng đóng góp, báo cáo lỗi, đánh giá Role của bạn.
3. Ansible Collections:
Roles & Collections:
Roles giúp tổ chức code tốt hơn, nhưng vẫn còn limitations khi muốn đóng gói nhiều Roles, Modules, Plugins liên quan.
Collections ra đời như một giải pháp "cao cấp" hơn, đóng gói toàn bộ "hệ sinh thái" Ansible content.
Giới thiệu về Collections:
Là một bộ sưu tập (collection) các Roles, Modules, Plugins, Playbooks có liên quan đến nhau.
Giúp tổ chức code tốt hơn, dễ dàng chia sẻ và sử dụng lại.
Đang dần thay thế Roles như đơn vị đóng gói chính thức của Ansible.
Cấu trúc thư mục Collection:
roles/
: Chứa các Roles.modules/
: Chứa các Modules.plugins/
: Chứa các Plugins.playbooks/
: Chứa các Playbooks ví dụ.docs/
: Chứa tài liệu.
Sử dụng Collections:
Cài đặt Collection từ Galaxy:
ansible-galaxy collection install username.collection_name
.Sử dụng content từ Collection:
username.collection_name.content_name
(ví dụ:my_company.webserver.nginx_install
).
Tạo và Chia sẻ Collections:
Tương tự như tạo Roles, nhưng cần chú ý đến cấu trúc thư mục và metadata.
Xuất bản Collection lên Ansible Galaxy để chia sẻ với cộng đồng.
Bài tập:
Khám phá Ansible Galaxy:
Tìm kiếm 3 Roles liên quan đến công việc của bạn (ví dụ: cài đặt database, cấu hình web server, quản lý users).
Đọc tài liệu và thử nghiệm cài đặt, sử dụng các Roles này trong Playbook của bạn.
Tạo và xuất bản Role:
Chọn một tác vụ bạn thường xuyên thực hiện (ví dụ: cài đặt và cấu hình một ứng dụng cụ thể).
Tạo Role để tự động hóa tác vụ này, viết tài liệu chi tiết, và xuất bản lên Ansible Galaxy.
- Tìm hiểu về Collections:
Tìm kiếm 2 Collections trên Ansible Galaxy và đọc tài liệu để hiểu rõ cách chúng được tổ chức và sử dụng.
Thử nghiệm cài đặt và sử dụng một số content từ Collections này trong Playbook của bạn.
Part 7: Ứng dụng thực tế và hướng phát triển
Nội dung chi tiết:
1. Dự án hoàn chỉnh:
Dự án: Triển khai ứng dụng web với Load Balancing và Database Server.
Mô tả: Bạn sẽ xây dựng Playbook để tự động hóa toàn bộ quá trình:
Cài đặt và cấu hình Web Server (Nginx/Apache) trên nhiều máy chủ.
Cài đặt và cấu hình Load Balancer (HAProxy/Nginx) để phân phối traffic.
Cài đặt và cấu hình Database Server (MySQL/PostgreSQL).
Triển khai ứng dụng web lên Web Servers.
Cấu hình Firewall và bảo mật cho hệ thống.
Hướng dẫn thực hiện:
Chuẩn bị môi trường:
Tạo 3 máy ảo (hoặc cloud instances): 1 Load Balancer, 2 Web Servers, 1 Database Server.
Cấu hình SSH key-based authentication từ máy trạm đến các máy ảo.
Tạo Ansible Inventory và thêm các máy ảo vào.
Viết Playbook:
Sử dụng Roles để tổ chức Playbook:
loadbalancer
,webserver
,database
.Sử dụng variables để cấu hình linh hoạt: IP addresses, hostnames, ...
Áp dụng các kỹ thuật đã học: handlers, templates, loops, ...
Thực thi và kiểm tra:
Chạy Playbook để triển khai ứng dụng.
Kiểm tra kết quả bằng cách truy cập ứng dụng web từ trình duyệt.
Thực hiện các bài kiểm tra bảo mật cơ bản.
2. Tích Hợp Ansible:
Ansible trong CI/CD Pipeline:
Tích hợp Ansible với các công cụ CI/CD phổ biến: Jenkins, GitLab CI/CD, ...
Tự động hóa quá trình build, test, và deploy ứng dụng.
Ví dụ:
Khi code được push lên Git repository, CI/CD pipeline sẽ:
Build ứng dụng.
Chạy các bài test tự động.
Sử dụng Ansible để deploy ứng dụng lên môi trường staging hoặc production.
Sử dụng Ansible trong môi trường Production:
Quản lý cấu hình: Đảm bảo tính nhất quán cho cơ sở hạ tầng production.
Triển khai ứng dụng: Tự động hóa quá trình deploy và rollback.
Khắc phục sự cố: Sử dụng Playbook để tự động hóa các tác vụ sửa lỗi.
3. Tự nghiên cứu:
Chủ đề 1: Network Automation:
Nội dung:
Các khái niệm cơ bản về Network Automation: NetDevOps, Infrastructure as Code for Network.
Giới thiệu các công cụ Network Automation phổ biến: Ansible, NAPALM, Netmiko, ...
Sử dụng Ansible để cấu hình và quản lý thiết bị mạng: switch, router, firewall, load balancer.
Làm quen với các modules Ansible dành cho network:
iosxr_
,nxos_
,junos_
,eos_
, ...
Tài liệu tham khảo:
Ansible for Network Automation: https://docs.ansible.com/ansible/latest/network/getting_started/index.html
Ansible Up & Running: https://www.oreilly.com/library/view/ansible-up-and/9781098109141/
Chủ đề 2: Cloud Automation:
Nội dung:
Các khái niệm cơ bản về Cloud Computing: IaaS, PaaS, SaaS.
Giới thiệu các nền tảng Cloud phổ biến: AWS, Azure, GCP.
Sử dụng Ansible để tự động hóa các tác vụ trên Cloud:
Provisioning cloud resources: servers, networks, storage.
Cấu hình và quản lý cloud services: databases, load balancers, ...
Triển khai ứng dụng lên Cloud.
Làm quen với các modules Ansible dành cho Cloud:
ec2
,azure_rm
,gcp_
, ...
Tài liệu tham khảo:
4. Báo cáo dự án & trình bày:
Format báo cáo:
Giới thiệu: Mô tả dự án, mục tiêu, đối tượng hướng đến.
Phân tích yêu cầu: Liệt kê các yêu cầu kỹ thuật, công nghệ sử dụng.
Thiết kế: Mô tả kiến trúc hệ thống, sơ đồ mạng, ...
Thực hiện: Giải thích chi tiết Playbook, Roles, Modules, ...
Kết quả: Minh họa kết quả đạt được, ảnh chụp màn hình, ...
Bài học kinh nghiệm: Rút ra bài học từ quá trình thực hiện dự án.
Trình bày:
Chuẩn bị slide trình bày ngắn gọn, súc tích, dễ hiểu.
Demo dự án hoạt động.
Trả lời câu hỏi từ người nghe.
Một số nội dung bổ sung: Khám phá kiến thức chuyên sâu về cloud & network automation
Cloud automation:
Nền tảng cloud:
Kiến trúc cloud: Nắm rõ khái niệm IaaS, PaaS, SaaS, các thành phần cơ bản của một nền tảng Cloud.
Các dịch vụ cloud: Tìm hiểu sâu về các dịch vụ phổ biến: tính năng, giá cả, trường hợp sử dụng.
Compute: EC2 (AWS), Virtual Machines (Azure), Compute Engine (GCP).
Storage: S3 (AWS), Blob Storage (Azure), Cloud Storage (GCP).
Network: VPC (AWS), Virtual Network (Azure), VPC Network (GCP).
Database: RDS (AWS), Azure SQL Database, Cloud SQL (GCP).
Ansible cho cloud:
Modules chuyên dụng: Các modules cho AWS, Azure, GCP, và các Cloud providers khác.
Dynamic Inventory: Sử dụng dynamic inventory để tự động cập nhật danh sách cloud instances.
Cloud-init: Tự động hóa cấu hình cloud instances khi khởi tạo.
Ứng dụng cho cloud:
Infrastructure as Code (IaC): Sử dụng Ansible (kết hợp với Terraform) để định nghĩa toàn bộ hạ tầng Cloud dưới dạng code.
Microservices: Tự động hóa triển khai và quản lý ứng dụng microservices trên Cloud.
Containers & Orchestration: Kết hợp Ansible với Docker, Kubernetes để triển khai ứng dụng containerized trên Cloud.
Bảo mật cho môi trường cloud:
IAM (Identity and Access Management): Quản lý quyền truy cập đến tài nguyên Cloud.
Security Groups & Firewalls: Cấu hình tường lửa cho cloud instances và networks.
Secrets Management: Lưu trữ và quản lý bí mật an toàn trên Cloud.
Chủ đề dự án thực tế tham khảo:
Triển khai ứng dụng web đa tầng trên AWS, Azure hoặc GCP.
Tự động hóa việc tạo và quản lý môi trường development, staging, production trên Cloud.
Xây dựng CI/CD pipeline cho ứng dụng Cloud, tích hợp Ansible vào quy trình deploy.
Network automation:
Network automation:
NetDevOps: Tìm hiểu về NetDevOps và cách Ansible hỗ trợ tự động hóa mạng.
Network as Code: Định nghĩa cấu hình mạng dưới dạng code, sử dụng Git để quản lý version.
Thiết bị mạng:
CLI (Command Line Interface): Nắm vững cú pháp CLI của các thiết bị mạng phổ biến: Cisco IOS, Juniper Junos, Arista EOS.
Data Models (YANG): Tìm hiểu về YANG data models, cơ sở cho Network Automation hiện đại.
Ansible cho network:
Modules chuyên dụng: Sử dụng các modules cho Cisco, Juniper, Arista, và các nhà cung cấp khác.
Network modules: net_interface, net_vlan, net_l2_interface, net_bgp, net_facts, ...
Kiến trúc mạng hiện đại:
SDN (Software-Defined Networking): Tìm hiểu về SDN và cách Ansible tích hợp với các controller SDN.
Network Virtualization (VXLAN, SD-WAN): Tự động hóa việc cấu hình và quản lý mạng ảo.
Một số nội dung thực hành tham khảo:
Cấu hình VLAN, STP, EtherChannel trên switch Cisco sử dụng Ansible.
Cấu hình routing protocols (RIP, OSPF, BGP) trên router Cisco sử dụng Ansible.
Tự động hóa việc backup và restore cấu hình thiết bị mạng.
Luyện kỹ năng thêm:
Khả năng giải quyết vấn đề: Debug Playbook, phân tích log, tìm kiếm giải pháp cho các vấn đề phức tạp.
Làm việc với Git: Quản lý code Ansible bằng Git, sử dụng branching, merging, ...
Bài hướng dẫn chi tiết:
https://mydevopslearning.notion.site/Ansible-c-b-n-80ae212032d144359793f62b71d1ee9d