Skip to main content

Command Palette

Search for a command to run...

Syllabus tham khảo cho DevOps Learning checklist (Part 1)

Updated
77 min read

1. Linux

Ngày 1: Linux và Shell Scripting

Nội dung:

  • Kiến trúc Linux từ Kernel đến User Space:

    • Phân tích về Kernel modules, system calls, VFS (Virtual File System).

    • Tìm hiểu về các process scheduler (CFS), memory management (paging, swapping).

    • Phân tích các system utilities cốt lõi (coreutils) và cách chúng tương tác với kernel.

  • Shell Scripting:

    • Bash : mảng, hàm, xử lý tín hiệu, debugging script (set -x, trap).

    • Các công cụ dòng lệnh siêu việt: awk (nhiều tệp tin, biểu thức phức tạp), sed , perl

    • Tối ưu hóa hiệu suất shell script.

    • Quản lý lỗi và logging trong script.

  • Quản lý Người dùng và Nhóm:

    • Phân tích về PAM (Pluggable Authentication Modules) và cấu hình các module xác thực khác nhau (LDAP, Kerberos).

    • Quản lý SELinux hoặc AppArmor: kiến trúc, các mode hoạt động, quản lý contexts, troubleshooting.

    • Tìm hiểu về các hệ thống quản lý danh tính (Identity Management) trong môi trường doanh nghiệp.

  • Hiểu về Linux Booting Process:

    • Các giai đoạn của quá trình khởi động: BIOS/UEFI, Bootloader (GRUB/systemd-boot), Kernel, Initramfs, Systemd.

    • Cấu hình Bootloader (ví dụ: chỉnh sửa /etc/default/grub).

    • Khôi phục hệ thống khi lỗi boot.

    • Tìm hiểu về các runlevels/targets.

Mini Projects:

  1. Viết một shell script để theo dõi hiệu suất hệ thống (CPU, memory, disk I/O) trong thời gian thực và ghi lại các thống kê vào một tệp tin log, đồng thời gửi cảnh báo nếu vượt quá ngưỡng cho phép.

  2. Sử dụng awk để phân tích một tệp tin log lớn, trích xuất các thông tin quan trọng và tạo báo cáo tùy chỉnh.

  3. Cấu hình SELinux hoặc AppArmor để giới hạn quyền truy cập của một dịch vụ cụ thể và kiểm tra các chính sách đã được áp dụng.

Ngày 2: Hệ thống Tệp tin Linux Quản lý Lưu Trữ

Nội dung:

  • Hệ thống Tệp tin Linux:

    • Ôn tập chi tiết mục đích các thư mục quan trọng.

    • Phân tích sâu về cấu trúc dữ liệu trên đĩa của ext4, XFS, Btrfs.

    • Tìm hiểu về journaling, barriers, metadata checksumming.

    • Các tùy chọn mount và tác động của chúng đến hiệu suất.

    • Sử dụng các công cụ chẩn đoán và sửa chữa hệ thống tệp tin (fsck).

    • Tìm hiểu về các hệ thống tệp tin phân tán (ví dụ: Ceph, GlusterFS - giới thiệu).

  • Quản lý LVM và RAID:

    • LVM thin provisioning, caching, mirroring.

    • RAID performance tuning, hot spares, monitoring RAID health.

    • Tích hợp LVM và RAID.

    • Tìm hiểu về các giải pháp lưu trữ phần cứng và cách Linux tương tác với chúng.

  • Quản lý Dung lượng và Hiệu suất Đĩa:

    • Phân tích I/O patterns với blktrace, iotop.

    • Tối ưu hóa hiệu suất đĩa (scheduler, readahead).

    • Quản lý quotas (grace periods, soft/hard limits).

Mini Projects:

  1. Thiết lập một cấu hình LVM phức tạp với thin provisioning và thử nghiệm việc tạo và xóa nhiều logical volumes.

  2. Tạo một RAID 6 array và mô phỏng lỗi hai ổ đĩa liên tiếp, quan sát quá trình phục hồi dữ liệu.

  3. Sử dụng blktraceiotop để phân tích hoạt động I/O của một tiến trình cụ thể và xác định các nút thắt cổ chai về hiệu suất đĩa.

  4. Thực hành việc mount và umount các loại hệ thống tệp tin khác nhau với các tùy chọn mount khác nhau. Gây ra lỗi hệ thống tệp tin (ví dụ: bằng cách tắt máy đột ngột) và sử dụng fsck để sửa chữa.


Ngày 3: Mạng Linux và Network Namespace/Cgroups

Nội dung:

  • Mạng Linux:

    • Các khái niệm mạng cơ bản (IP, subnet, gateway, DNS)

    • Các công cụ cấu hình mạng (ip, ifconfig, netstat, ss)

    • Phân tích sâu về TCP/IP stack trong Linux kernel.

    • Tìm hiểu về các giao thức mạng (BGP, OSPF - khái niệm).

    • Network namespaces: tạo, quản lý, kết nối namespaces (veth pairs, bridges).

    • VRF (Virtual Routing and Forwarding) trong Linux.

    • Traffic control (tc) và QoS (Quality of Service) trong Linux.

    • Các công cụ phân tích mạng gói tin (tcpdump, wireshark trên server).

  • Control Groups (cgroups):

    • Phân tích kiến trúc cgroups v1 và v2.

    • Quản lý tài nguyên chi tiết (CPU shares/quota, memory limits/swappiness, block I/O weight/throttle, network bandwidth).

    • Sử dụng systemd-run để chạy các lệnh hoặc dịch vụ trong cgroup riêng biệt.

    • Tích hợp cgroups với namespaces để tạo môi trường container hóa nhẹ.

Mini Projects:

  1. Tạo hai network namespace riêng biệt, cấu hình địa chỉ IP cho mỗi namespace và thiết lập kết nối giữa chúng bằng veth pairs.

  2. Sử dụng tc để giới hạn băng thông mạng cho một giao diện cụ thể hoặc cho một cgroup.

  3. Chạy một tiến trình tốn nhiều CPU trong một cgroup và giới hạn lượng CPU mà cgroup đó có thể sử dụng. Quan sát tác động lên hiệu suất của tiến trình.

  4. Sử dụng tcpdump để theo dõi lưu lượng truy cập mạng đến và đi từ một dịch vụ cụ thể và phân tích các gói tin.


Ngày 4: Nginx và Cấu Hình Core

Nội dung:

  • Kiến trúc Nginx:

    • Cách web server hoạt động (HTTP/HTTPS)

    • Cài đặt Nginx từ repository và từ source

    • Phân tích kiến trúc event-driven, non-blocking I/O.

    • Tìm hiểu về worker processes, master process, shared memory.

    • Phân tích các giai đoạn xử lý request trong Nginx (phases).

    • Tìm hiểu về các modules core và cách chúng hoạt động.

  • Cấu Hình Nginx Core:

    • Phân tích sâu tệp tin nginx.conf (global directives, events block).

    • Tối ưu hóa worker processes và connections.

    • Cấu hình logging (custom formats, multiple logs).

    • Sử dụng include files để quản lý cấu hình phức tạp.

    • Dynamic modules và cách biên dịch/tải chúng.

  • Hiệu suất Nginx Core:

    • Tối ưu hóa buffer sizes.

    • Sử dụng sendfile, tcp_nodelay, tcp_nopush.

    • Caching metadata.

Mini Projects:

  1. Phân tích cấu hình Nginx mặc định và xác định vai trò của từng directive core.

  2. Tạo cấu hình logging tùy chỉnh để ghi lại thông tin chi tiết về thời gian xử lý request và các headers quan trọng.

  3. Thử nghiệm với các thiết lập buffer sizes và quan sát tác động lên hiệu suất khi phục vụ các tệp tin lớn.


Ngày 5: Nginx Server Blocks và Xử Lý Request

Nội dung:

  • Server Blocks:

    • Cấu hình cơ bản server blocks (listen, server_name, root, index)

    • Cấu hình name-based và IP-based virtual hosts.

    • Sử dụng wildcards và regular expressions trong server_name.

    • Biến trong Nginx và cách sử dụng chúng trong cấu hình.

    • Các biến server, request, response.

  • Xử Lý Request:

    • location directive: các loại matching (prefix, exact, regex, case-insensitive).

    • Thứ tự xử lý location blocks.

    • rewrite directive và return directive: các flag, tạo rewrite rules phức tạp.

    • try_files directive và các use case phức tạp.

    • Error handling và custom error pages.

  • Hiểu về các giao thức quan trọng (HTTP, SSL/TLS):

    • Các phương thức HTTP (GET, POST, PUT, DELETE...).

    • Cấu trúc request và response.

    • Vai trò của SSL/TLS trong bảo mật web.

Mini Projects:

  1. Tạo một cấu hình Nginx phức tạp với nhiều server blocks và location blocks, sử dụng các loại matching khác nhau và đảm bảo các request được định tuyến chính xác.

  2. Sử dụng rewrite rules để thực hiện các chuyển hướng phức tạp và chuẩn hóa URL.

  3. Cấu hình try_files để phục vụ các tệp tin tĩnh hoặc chuyển hướng đến một ứng dụng backend nếu tệp tin không tồn tại.

  4. Tạo nhiều server blocks để host các website tĩnh khác nhau trên cùng một máy chủ

  5. Cấu hình Nginx để redirect HTTP sang HTTPS.


Ngày 6: Nginx Reverse Proxy và Load Balancing

Nội dung:

  • Reverse Proxy:

    • Sự khác biệt giữa Reverse Proxy và Load Balancer

    • Cấu hình cơ bản Nginx làm reverse proxy (proxy_pass)

    • Cấu hình proxy_pass với các tùy chọn nâng cao.

    • Quản lý headers khi proxying (proxy_set_header, xóa headers).

    • Timeouts và buffering trong proxying.

    • Kết nối keepalive với backend servers.

    • Proxying đến các giao thức khác (FastCGI, uWSGI, gRPC - giới thiệu).

  • Load Balancing:

    • Các thuật toán load balancing cơ bản (Round Robin, Least Connections, IP Hash)

    • Cấu hình cơ bản load balancing với upstream

    • Các thuật toán load balancing và tùy chỉnh (weighted round-robin, least connections, IP hash, generic hash, random two least loaded).

    • Health checks (proxy_pass với resolve, upstream blocks với state).

    • Session persistence (sticky sessions) với các phương pháp khác nhau (ip_hash, cookie, learn).

    • Dynamic reconfiguration của upstream servers.

Mini Projects:

  1. Cấu hình Nginx làm reverse proxy cho một ứng dụng web đơn giản chạy trên cổng khác.

  2. Thiết lập load balancing cho hai backend web server sử dụng thuật toán Round Robin và kiểm tra.

  3. Cấu hình session persistence dựa trên IP hash.

  4. Cấu hình Nginx làm reverse proxy cho một ứng dụng web chạy trên nhiều backend servers và cấu hình session persistence dựa trên cookie.

  5. Sử dụng health checks để đảm bảo chỉ các backend servers khỏe mạnh mới nhận được lưu lượng truy cập.

  6. Cấu hình load balancing với thuật toán generic hash dựa trên một header tùy chỉnh.


Ngày 7: Nginx (Security aspect)

Nội dung:

  • Các Giao Thức Quan Trọng:

    • Phân tích sâu về SSL/TLS: Handshake, Certificates, Ciphers

    • TCP và UDP: So sánh, cấu trúc header, use cases

    • FTP và SFTP: So sánh, cách hoạt động, bảo mật

    • SCP và SSH: So sánh, cách hoạt động, bảo mật

  • SSL/TLS:

    • Cấu hình SSL/TLS (cipher suites, protocols, OCSP stapling, HSTS).

    • quản lý SSL certificates (Let's Encrypt, manual renewal).

    • Client certificate authentication.

  • Bảo Mật Nginx Core:

    • Giới hạn kích thước request.

    • Giới hạn số lượng kết nối và request từ một địa chỉ IP (limit_req_zone, limit_conn_zone).

    • Ngăn chặn các tấn công phổ biến (DDoS, slowloris).

    • cấu hình WAF (Web Application Firewall) với ngx_http_modsecurity_module (cài đặt, cấu hình cơ bản rule sets).

  • Theo Dõi và Phân Tích Bảo Mật Nginx:

    • Phân tích access logs và error logs để phát hiện các hoạt động đáng ngờ.

    • Tích hợp Nginx logs với các công cụ SIEM.

Mini Projects:

  1. Cấu hình Nginx để sử dụng HTTPS với chứng chỉ tự ký.

  2. Implement basic HTTP authentication cho một thư mục.

  3. Sử dụng openssl để kiểm tra thông tin chứng chỉ SSL/TLS của một website.

  4. Cấu hình Nginx với các cipher suites và protocols mạnh nhất, bật OCSP stapling và HSTS.

  5. Implement rate limiting để bảo vệ một API endpoint cụ thể khỏi bị tấn công brute-force.

  6. Cài đặt và cấu hình cơ bản ngx_http_modsecurity_module với một rule set phổ biến (ví dụ: OWASP Core Rule Set).


Ngày 8: Monitoring và Logging

Nội dung:

  • Monitoring Hệ Thống:

    • Cài đặt, cấu hình và sử dụng Prometheus và Grafana.

    • Viết các queries PromQL phức tạp để theo dõi các chỉ số hệ thống và ứng dụng quan trọng.

    • Tạo dashboards Grafana tùy chỉnh để trực quan hóa dữ liệu monitoring.

    • Thiết lập alerts dựa trên các ngưỡng tùy chỉnh.

    • Giám sát hiệu suất Nginx với các exporters (ví dụ: nginx_exporter).

  • Logging:

    • Cấu hình rsyslog hoặc systemd-journald để xử lý logs phức tạp (filtering, routing, remote logging an toàn).

    • Giới thiệu về ELK stack (Elasticsearch, Logstash, Kibana) cho quản lý và phân tích logs tập trung quy mô lớn.

    • Tích hợp Nginx logs và system logs vào ELK stack (cài đặt và cấu hình cơ bản).

  • Quản lý service:

    • Hiểu về Initd và Systemd

    • Các lệnh quản lý dịch vụ với systemctl

    • Tạo Systemd Service Units tùy chỉnh

    • Xem logs dịch vụ với journalctl

    • Quản lý services bằng script Initd (ví dụ: tạo script đơn giản)

Mini Projects:

  1. Tạo một Systemd Service Unit để chạy một script đơn giản khi khởi động và quản lý nó bằng systemctl.

  2. Cấu hình logrotate để quản lý logs của Nginx.

  3. Cài đặt và cấu hình Prometheus và nginx_exporter. Tạo một dashboard Grafana để hiển thị các chỉ số hiệu suất Nginx quan trọng (request rate, error rate, latency).

  4. Cấu hình rsyslog để gửi tất cả các logs từ một máy chủ đến một centralized log server qua TLS.

  5. Cài đặt và cấu hình cơ bản Elasticsearch và Kibana. Cấu hình Logstash hoặc Filebeat để thu thập logs Nginx và system logs và gửi chúng đến Elasticsearch. Sử dụng Kibana để khám phá và phân tích logs.


Ngày 9: Automation và Infrastructure as Code (IaC)

Nội dung:

  • Automation với Ansible:

    • Kiến trúc Ansible (control node, managed nodes, inventory, modules, playbooks).

    • Viết playbooks Ansible để tự động hóa các tác vụ cấu hình hệ thống (cài đặt phần mềm, cấu hình tệp tin, quản lý dịch vụ).

    • Sử dụng variables, facts, templates trong Ansible playbooks.

    • Quản lý secrets trong Ansible Vault.

    • Thực hiện các tác vụ quản lý Nginx bằng Ansible modules.

  • Infrastructure as Code (IaC):

    • Giới thiệu về Terraform: kiến trúc, core concepts (providers, resources, state).

    • Viết cấu hình Terraform cơ bản để provision cơ sở hạ tầng (ví dụ: tạo một máy ảo trên cloud provider).

    • Quản lý state trong Terraform.

  • Volumes trong Linux:

    • Khái niệm về mount points và filesystem

    • Sử dụng lệnh mountumount.

    • Cấu hình /etc/fstab để mount tự động.

    • Hiểu về các loại thiết bị lưu trữ (block devices)

Mini Projects:

  1. Thêm một partition hoặc file loopback làm volume và mount nó vào hệ thống. Cấu hình /etc/fstab để nó được mount tự động khi khởi động.

  2. Viết một playbook Ansible để tự động cài đặt và cấu hình Nginx trên một nhóm máy chủ.

  3. Mở rộng playbook trên để tự động cấu hình một virtual host Nginx.

  4. Sử dụng Terraform để tạo một máy ảo đơn giản trên một cloud provider (ví dụ: AWS, GCP, Azure - yêu cầu có tài khoản cloud).


Ngày 10: Troubleshooting và Dự án

Nội dung:

  • Troubleshooting Linux và Nginx:

    • Các bước tiếp cận vấn đề khi troubleshooting

    • Sử dụng logs để xác định nguyên nhân lỗi

    • Kiểm tra cấu hình

    • Kiểm tra kết nối mạng

    • Kiểm tra tài nguyên hệ thống

    • Sử dụng các công cụ gỡ lỗi (strace, ltrace, perf) để phân tích các vấn đề hiệu suất và lỗi.

    • Phân tích core dumps và backtraces.

    • Debugging Nginx configuration.

    • Giải quyết các troubleshooting scenarios phức tạp liên quan đến Nginx, mạng, hệ thống tệp tin và hiệu suất.

    • Sử dụng các tài liệu, diễn đàn, cộng đồng và kiến thức đã học để giải quyết các vấn đề thực tế.

  • Dự án:

    • Thiết kế và triển khai một kiến trúc web đơn giản với Nginx làm reverse proxy và load balancer cho một ứng dụng backend (có thể là một ứng dụng tĩnh đơn giản hoặc một ứng dụng web mẫu).

    • Cấu hình SSL/TLS, bảo mật cơ bản và monitoring cho kiến trúc này.

    • Thực hiện các thử nghiệm tải đơn giản và phân tích hiệu suất.

Mini Projects:

  1. Gặp phải một vấn đề hiệu suất với Nginx (ví dụ: response chậm). Sử dụng các công cụ như strace hoặc perf để xác định nguyên nhân gốc rễ của vấn đề.

  2. Triển khai dự án thực tế đã mô tả ở trên.

  3. Giả lập một cuộc tấn công đơn giản vào web server của bạn và sử dụng các công cụ bảo mật đã học để phát hiện và ngăn chặn nó.

  4. Break Something and Troubleshoot: Chủ động gây ra lỗi trong các cấu hình đã học (ví dụ: sai cấu hình Nginx, lỗi mạng, lỗi mount) và thực hành các kỹ năng troubleshooting để khắc phục.

2. Learn How IT Infrastructure Components Work

Ngày 1: Tổng quan về Hạ tầng IT và Mô hình Mạng

  • Buổi sáng:

    • Tổng quan về các thành phần cơ bản của hạ tầng IT (máy chủ, mạng, lưu trữ, ảo hóa, cloud).

    • Vai trò của IT Infrastructure trong một hệ thống sản xuất.

    • Giới thiệu chi tiết về mô hình OSI và TCP/IP:

      • Chức năng và giao thức của từng layer.

      • Quá trình đóng gói và giải đóng gói dữ liệu.

      • So sánh mô hình OSI và TCP/IP.

    • Các giao thức mạng cơ bản: Ethernet, IP, TCP, UDP, DNS, HTTP/HTTPS.

  • Buổi chiều:

    • Tìm hiểu sâu về các giao thức lớp mạng (Layer 3): IP Addressing (IPv4 và IPv6), Routing (cơ bản về định tuyến).

    • Giới thiệu về các công cụ mạng cơ bản: ping, traceroute, ipconfig/ifconfig, netstat.

    • Thực hành sử dụng Wireshark để phân tích gói tin mạng.

  • Mini Project:

    1. Cài đặt và cấu hình một máy ảo Linux đơn giản. Sử dụng các lệnh mạng cơ bản để kiểm tra kết nối.

    2. Sử dụng Wireshark để bắt và phân tích lưu lượng truy cập HTTP khi truy cập một trang web. Xác định các layer trong gói tin.

    3. Tìm hiểu về một giao thức lớp ứng dụng khác (ví dụ: SMTP, FTP) và mô tả quá trình giao tiếp dựa trên mô hình OSI/TCP-IP.

Ngày 2: Network Topologies và Địa chỉ IP

  • Buổi sáng:

    • Tìm hiểu chi tiết về các Network Topologies vật lý và logic: Bus, Star, Ring, Mesh, Tree, Hybrid. Ưu nhược điểm và ứng dụng của từng loại.

    • Giới thiệu về các thiết bị mạng cơ bản: Hub, Switch, Router, Firewall. Chức năng và cách hoạt động.

    • Phân tích sự khác biệt giữa Switch Layer 2 và Layer 3.

  • Buổi chiều:

    • Đi sâu vào địa chỉ IP:

      • Cấu trúc địa chỉ IPv4 và IPv6.

      • Các lớp địa chỉ IPv4 (Class A, B, C, D, E) và mục đích sử dụng.

      • Địa chỉ Public và Private IPv4. Các dải địa chỉ Private.

      • Địa chỉ Link-local, Unique Local, Global Unicast trong IPv6.

    • Thực hành cấu hình địa chỉ IP tĩnh và động trên máy ảo.

  • Mini Project:

    1. Thiết kế sơ đồ mạng logic cho một văn phòng nhỏ với các yêu cầu cụ thể (số lượng máy, phòng ban). Xác định topology phù hợp và giải thích lý do.

    2. Tìm hiểu về giao thức DHCP. Cài đặt và cấu hình một DHCP server đơn giản trong môi trường lab. Kiểm tra việc cấp phát địa chỉ IP động.

    3. Phân tích một đoạn cấu hình mạng của một router (ví dụ: Cisco IOS) và xác định các thông tin về interface và địa chỉ IP.

Ngày 3: CIDR Notation và Subnetting (IPv4)

  • Buổi sáng:

    • Tìm hiểu chi tiết về CIDR (Classless Inter-Domain Routing) Notation:

      • Ý nghĩa của prefix length.

      • Cách biểu diễn mạng và host sử dụng CIDR.

      • Lợi ích của CIDR so với mô hình phân lớp truyền thống.

    • Thực hành chuyển đổi giữa dotted decimal notation và CIDR notation.

  • Buổi chiều:

    • Đi sâu vào Subnetting (chia mạng con) trong IPv4:

      • Mục đích của subnetting.

      • Các bước thực hiện subnetting: xác định số subnet cần, số host mỗi subnet, tính toán subnet mask, network address, broadcast address, range địa chỉ host.

      • Thực hành giải các bài tập về subnetting với các yêu cầu khác nhau.

    • Giới thiệu về Supernetting (gom mạng).

  • Mini Project:

    1. Cho một dải địa chỉ IPv4 và yêu cầu về số lượng subnet và host mỗi subnet, thực hiện chia subnet và liệt kê thông tin chi tiết của từng subnet.

    2. Cấu hình địa chỉ IP và subnet mask trên các máy ảo trong lab theo kết quả của bài tập subnetting. Kiểm tra khả năng giao tiếp giữa các subnet.

    3. Tìm hiểu về các công cụ subnet calculator trực tuyến và sử dụng chúng để kiểm tra kết quả tính toán của bạn.

Ngày 4: Subnetting (IPv6) và Public/Private Networks

  • Buổi sáng:

    • Subnetting trong IPv6:

      • Hiểu về cấu trúc địa chỉ IPv6 và prefix length.

      • Cách chia subnet trong IPv6.

      • Khái niệm về Subnet Router Advertisement.

    • Thực hành cấu hình địa chỉ IPv6 và chia subnet đơn giản trong lab.

  • Buổi chiều:

    • Public Network:

      • Khái niệm và mục đích sử dụng.

      • Vai trò của các nhà cung cấp dịch vụ Internet (ISPs).

      • Quản lý và cấp phát địa chỉ IP Public (thông qua RIRs và ISPs).

    • Private Network:

      • Khái niệm và mục đích sử dụng (LAN, Intranet).

      • Các dải địa chỉ IP Private (RFC 1918).

      • Lợi ích của việc sử dụng mạng riêng.

    • So sánh Public và Private Network.

  • Mini Project:

    1. Thiết kế sơ đồ địa chỉ IPv6 cho một mạng doanh nghiệp, bao gồm chia subnet cho các phòng ban khác nhau.

    2. Tìm hiểu về một RIR (ví dụ: ARIN, RIPE NCC) và cách họ quản lý địa chỉ IP Public.

    3. Mô tả một kịch bản thực tế mà một tổ chức cần sử dụng cả mạng Public và Private, giải thích lý do cho việc sử dụng từng loại mạng.

Ngày 5: Static và Dynamic IPs, Firewall

  • Buổi sáng:

    • Static IP Address:

      • Khái niệm và cách cấu hình.

      • Ưu điểm và nhược điểm.

      • Các trường hợp sử dụng (ví dụ: server, printer).

    • Dynamic IP Address:

      • Khái niệm và cách cấp phát (thông qua DHCP).

      • Ưu điểm và nhược điểm.

      • Quá trình thuê và gia hạn địa chỉ IP.

    • Thực hành cấu hình Static và Dynamic IP trên các hệ điều hành khác nhau (Windows, Linux).

  • **Buổi chiều **

    • Firewall:

      • Khái niệm và vai trò trong bảo mật mạng.

      • Các loại Firewall (Network-based, Host-based).

      • Nguyên lý hoạt động cơ bản: kiểm tra lưu lượng dựa trên rule (source/destination IP, port, protocol).

      • Giới thiệu về Stateful và Stateless Firewall.

    • Thực hành cấu hình Firewall cơ bản trên hệ điều hành (ví dụ: iptables trên Linux, Windows Firewall). Cho phép và chặn một số loại lưu lượng cụ thể.

  • Mini Project:

    1. Thiết lập một máy ảo đóng vai trò là server (ví dụ: web server). Cấu hình địa chỉ IP tĩnh cho server và địa chỉ IP động cho client. Kiểm tra khả năng truy cập.

    2. Cấu hình Firewall trên server để chỉ cho phép truy cập vào cổng HTTP (80) từ client. Kiểm tra bằng cách thử truy cập từ các cổng khác.

    3. Tìm hiểu về một phần mềm Firewall mã nguồn mở (ví dụ: pfSense) và các tính năng cơ bản của nó.

Ngày 6: Firewall, Proxy Server

  • Buổi sáng:

    • Firewall:

      • Tìm hiểu sâu hơn về các rule trong Firewall: order of rules, implicit deny.

      • Các khái niệm: DMZ (Demilitarized Zone), port forwarding, Network Address Translation (NAT) trên Firewall.

      • Thực hành cấu hình DMZ và port forwarding trên Firewall lab.

  • Buổi chiều:

    • Proxy Server:

      • Khái niệm và mục đích sử dụng (ẩn danh, kiểm soát truy cập, caching).

      • Các loại Proxy Server (Forward Proxy, Reverse Proxy).

      • Giao thức hoạt động của Proxy (ví dụ: HTTP Proxy, SOCKS Proxy).

      • Ưu điểm và nhược điểm của việc sử dụng Proxy.

    • Thực hành cài đặt và cấu hình một Forward Proxy server đơn giản (ví dụ: Squid). Cấu hình client để sử dụng Proxy.

  • Mini Project:

    1. Cấu hình Firewall để bảo vệ một web server đặt trong DMZ. Chỉ cho phép truy cập HTTP/HTTPS từ internet đến web server.

    2. Thiết lập một Forward Proxy server. Cấu hình trình duyệt của một máy ảo client để sử dụng Proxy. Kiểm tra xem lưu lượng truy cập web có đi qua Proxy không.

    3. Tìm hiểu về các use case khác nhau của Reverse Proxy (ví dụ: load balancing, SSL termination).

Ngày 7: NAT (Network Address Translation)

  • Buổi sáng:

    • NAT (Network Address Translation):

      • Khái niệm và lý do ra đời (giải quyết vấn đề cạn kiệt địa chỉ IPv4).

      • Các loại NAT: Static NAT, Dynamic NAT, PAT (Port Address Translation - thường được gọi là NAT Overload).

      • Chi tiết về cách PAT hoạt động (sử dụng port để phân biệt các kết nối).

    • Ưu điểm và nhược điểm của NAT. Các vấn đề có thể xảy ra với NAT (ví dụ: với một số giao thức).

  • Buổi chiều:

    • Thực hành cấu hình NAT trên Router/Firewall trong lab:

      • Cấu hình Static NAT để ánh xạ một địa chỉ Public IP với một địa chỉ Private IP của server.

      • Cấu hình Dynamic NAT để cho phép nhiều máy client trong mạng Private truy cập internet thông qua một nhóm địa chỉ Public IP.

      • Cấu hình PAT để cho phép nhiều máy client truy cập internet thông qua một địa chỉ Public IP duy nhất.

    • Kiểm tra hoạt động của NAT bằng cách theo dõi lưu lượng mạng.

  • Mini Project:

    1. Thiết lập một mạng lab với một router có chức năng NAT. Cấu hình PAT để các máy ảo client có thể truy cập internet thông qua địa chỉ IP Public của router.

    2. Cấu hình Static NAT để một dịch vụ chạy trên một máy ảo trong mạng Private có thể được truy cập từ bên ngoài bằng một địa chỉ IP Public và port cụ thể.

    3. Tìm hiểu về các giao thức mà NAT có thể gây ra vấn đề (ví dụ: FTP active mode) và cách giải quyết (ví dụ: ALG - Application Layer Gateway).

Ngày 8: Public & Private DNS

  • Buổi sáng:

    • DNS (Domain Name System):

      • Khái niệm và vai trò trong việc phân giải tên miền thành địa chỉ IP.

      • Cấu trúc phân cấp của DNS. Root DNS servers, TLD DNS servers, Authoritative DNS servers.

      • Quá trình phân giải tên miền (recursive và iterative queries).

      • Các loại bản ghi DNS quan trọng: A, AAAA, CNAME, MX, TXT, NS, PTR, SOA.

  • Buổi chiều:

    • Public DNS:

      • Các nhà cung cấp Public DNS phổ biến (ví dụ: Google DNS, Cloudflare DNS, OpenDNS).

      • Ưu điểm và nhược điểm của việc sử dụng Public DNS.

      • Cấu hình Public DNS trên client và server.

    • Private DNS:

      • Mục đích sử dụng DNS server trong mạng nội bộ (phân giải tên miền nội bộ, quản lý bản ghi).

      • Cài đặt và cấu hình một Private DNS server đơn giản (ví dụ: BIND, dnsmasq).

      • Tạo và quản lý các bản ghi DNS cho các host trong mạng nội bộ.

  • Mini Project:

    1. Cấu hình một máy ảo Linux làm Private DNS server cho một domain nội bộ (ví dụ: local.lan). Tạo các bản ghi A cho một vài host trong mạng. Cấu hình các máy client để sử dụng DNS server này và kiểm tra khả năng phân giải tên miền nội bộ.

    2. So sánh thời gian phân giải tên miền khi sử dụng Public DNS và Private DNS (nếu có).

    3. Tìm hiểu về các công cụ kiểm tra DNS (ví dụ: nslookup, dig) và sử dụng chúng để truy vấn thông tin DNS.

Ngày 9: VPN (Virtual Private Network)

  • Buổi sáng:

    • VPN (Virtual Private Network):

      • Khái niệm và mục đích sử dụng (bảo mật kết nối, truy cập tài nguyên mạng riêng từ xa).

      • Các giao thức VPN phổ biến: IPsec, OpenVPN, WireGuard, L2TP/IPsec, PPTP.

      • So sánh ưu nhược điểm của các giao thức VPN.

      • Các thành phần cơ bản của VPN: VPN client, VPN server, VPN tunnel.

  • Buổi chiều:

    • Các loại VPN:

      • Site-to-site VPN: Kết nối hai hoặc nhiều mạng riêng biệt qua internet.

      • Client-to-site VPN (Remote Access VPN): Cho phép người dùng từ xa kết nối an toàn vào mạng riêng.

    • Thực hành cấu hình một VPN server đơn giản (ví dụ: OpenVPN) và một VPN client để kết nối đến server. Kiểm tra khả năng truy cập tài nguyên mạng riêng sau khi kết nối VPN.

  • Mini Project:

    1. Thiết lập một site-to-site VPN giữa hai mạng lab ảo hóa sử dụng OpenVPN hoặc IPsec.

    2. Cấu hình một client-to-site VPN để một máy ảo bên ngoài mạng lab có thể truy cập các tài nguyên bên trong mạng lab.

    3. Tìm hiểu về các use case khác nhau của VPN trong môi trường doanh nghiệp.

Ngày 10: IPv4 & IPv6 Protocols, SAN (Storage Area Network)

  • Buổi sáng:

    • So sánh chi tiết giao thức IPv4 và IPv6:

      • Định dạng địa chỉ, không gian địa chỉ.

      • Header format và các trường.

      • Các tính năng khác biệt (ví dụ: stateless autoconfiguration trong IPv6).

      • Thách thức và chiến lược chuyển đổi từ IPv4 sang IPv6.

    • Các giao thức liên quan đến IP: ICMP, ARP, NDP (Neighbor Discovery Protocol trong IPv6).

  • Buổi chiều:

    • SAN (Storage Area Network):

      • Khái niệm và mục đích sử dụng (cung cấp lưu trữ tập trung hiệu suất cao).

      • Các thành phần chính của SAN: Host Bus Adapters (HBAs), SAN switches, storage arrays.

      • Các giao thức kết nối SAN phổ biến: Fibre Channel (FC), iSCSI, NVMe over Fabrics (NVMe-oF).

      • Các khái niệm cơ bản về LUN (Logical Unit Number), zoning, masking.

  • Mini Project:

    1. Nghiên cứu về một giao thức chuyển đổi IPv4 sang IPv6 (ví dụ: Dual-stack, Tunneling, Translation). Mô tả cách nó hoạt động.

    2. Tìm hiểu về kiến trúc của một giải pháp SAN cụ thể từ một nhà cung cấp (ví dụ: Dell EMC, HPE, NetApp).

    3. Mô phỏng một kịch bản sử dụng SAN trong một trung tâm dữ liệu và giải thích lợi ích của nó.

Ngày 11: Backups và NFS (Network File System)

  • Buổi sáng:

    • Backups:

      • Tầm quan trọng của việc sao lưu dữ liệu trong môi trường production.

      • Các loại sao lưu: Full, Incremental, Differential. Ưu nhược điểm của từng loại.

      • Các ...các chiến lược sao lưu (ví dụ: 3-2-1 rule).

      • Các công nghệ và phần mềm sao lưu phổ biến.

      • Quy trình khôi phục dữ liệu (Recovery).

      • Disaster Recovery (DR) và Business Continuity (BC) ở mức độ cơ bản liên quan đến backup.

  • Buổi chiều:

    • NFS (Network File System):

      • Khái niệm và mục đích sử dụng (chia sẻ file qua mạng).

      • Kiến trúc client-server của NFS.

      • Các phiên bản NFS (NFSv3, NFSv4).

      • Các bước cấu hình NFS server và client trên Linux.

      • Các tùy chọn mount và vấn đề về quyền truy cập trong NFS.

  • Mini Project:

    1. Thiết lập một NFS server trên một máy ảo Linux. Tạo một thư mục chia sẻ và cấu hình quyền truy cập. Mount thư mục chia sẻ này trên một máy ảo client Linux khác.

    2. Tìm hiểu về một phần mềm backup mã nguồn mở (ví dụ: Bacula, Amanda) và các tính năng cơ bản của nó.

    3. Mô tả một quy trình backup và restore đơn giản cho một web server sử dụng NFS để lưu trữ dữ liệu.

Ngày 12: Object Storage và Disk I/O

  • Buổi sáng:

    • Object Storage:

      • Khái niệm và sự khác biệt so với block storage (SAN) và file storage (NFS).

      • Các đặc điểm của object storage: scalability, durability, metadata.

      • Các use case phổ biến của object storage (lưu trữ cloud, backup, archive).

      • Giới thiệu về các giao thức và API truy cập object storage (ví dụ: S3 API).

      • Các dịch vụ object storage phổ biến (ví dụ: AWS S3, Azure Blob Storage, Google Cloud Storage, MinIO).

  • Buổi chiều:

    • Disk I/O (Input/Output):

      • Các khái niệm cơ bản: IOPS (Input/Output Operations Per Second), Throughput (băng thông), Latency (độ trễ).

      • Mối quan hệ giữa IOPS, Throughput và Latency.

      • Các yếu tố ảnh hưởng đến hiệu suất Disk I/O (loại ổ cứng, RAID level, controller, queue depth).

      • Các công cụ đo kiểm hiệu suất Disk I/O (ví dụ: fio trên Linux, DiskSpd trên Windows).

    • Thực hành sử dụng một công cụ để đo kiểm hiệu suất Disk I/O trên một máy ảo với cấu hình ổ cứng khác nhau (nếu có thể).

  • Mini Project:

    1. Tìm hiểu về kiến trúc và các tính năng chính của một dịch vụ object storage cụ thể (ví dụ: AWS S3).

    2. Sử dụng một công cụ dòng lệnh (ví dụ: aws cli cho S3, az cli cho Azure Blob) để thực hiện các thao tác cơ bản với object storage (tạo bucket, upload/download object, list bucket).

    3. Phân tích kết quả đo kiểm Disk I/O và giải thích sự khác biệt dựa trên các yếu tố ảnh hưởng.

Ngày 13: Databases

  • Buổi sáng:

    • Databases:

      • Khái niệm cơ bản về hệ quản trị cơ sở dữ liệu (DBMS).

      • Các loại hình cơ sở dữ liệu phổ biến: Relational Databases (SQL), NoSQL Databases.

      • Giới thiệu về các DBMS phổ biến: MySQL, PostgreSQL, SQL Server (cho SQL); MongoDB, Cassandra, Redis (cho NoSQL).

      • Các khái niệm cơ bản trong relational databases: tables, schemas, rows, columns, primary keys, foreign keys, indexes.

  • Buổi chiều:

    • Các thao tác cơ bản với SQL:

      • Câu lệnh SELECT, INSERT, UPDATE, DELETE.

      • Mệnh đề WHERE, ORDER BY, GROUP BY, HAVING.

      • Các hàm tổng hợp (COUNT, SUM, AVG, MIN, MAX).

      • Giới thiệu về JOIN (INNER, LEFT, RIGHT).

    • Thực hành kết nối và thực hiện các truy vấn SQL cơ bản trên một database server (ví dụ: cài đặt MySQL hoặc PostgreSQL đơn giản).

  • Mini Project:

    1. Thiết kế một schema đơn giản cho một ứng dụng web (ví dụ: quản lý sản phẩm). Xác định các bảng, cột, khóa chính và khóa ngoại.

    2. Sử dụng SQL để tạo các bảng đã thiết kế và nhập một số dữ liệu mẫu. Thực hiện các truy vấn SELECT phức tạp để lấy thông tin theo yêu cầu.

    3. Tìm hiểu về một loại NoSQL database (ví dụ: MongoDB) và so sánh các khái niệm tương đương với relational databases.

Ngày 14: Databases và Key-Value Stores

  • Buổi sáng:

    • Databases:

      • Tìm hiểu về indexes và vai trò của chúng trong việc tối ưu hóa hiệu suất truy vấn.

      • Các khái niệm về transaction và ACID properties.

      • Giới thiệu về database replication và clustering cho mục đích high availability.

      • Các khái niệm cơ bản về database backup và recovery.

  • Buổi chiều:

    • Key-Value Stores:

      • Khái niệm và đặc điểm (lưu trữ dữ liệu dưới dạng cặp key-value).

      • Ưu điểm và nhược điểm so với relational databases.

      • Các use case phổ biến (caching, session management, real-time data).

      • Giới thiệu về các key-value stores phổ biến: Redis, Memcached.

      • Các thao tác cơ bản với một key-value store (ví dụ: SET, GET, DELETE trong Redis).

    • Thực hành cài đặt và sử dụng Redis cho mục đích caching đơn giản.

  • Mini Project:

    1. Tìm hiểu về một kỹ thuật database replication (ví dụ: master-slave replication trong MySQL) và mô tả cách nó hoạt động.

    2. Sử dụng Redis để implement một hệ thống counter đơn giản hoặc một hệ thống caching cho một tập dữ liệu nhỏ.

    3. So sánh hiệu suất đọc/ghi giữa một relational database và một key-value store trong một use case cụ thể (ví dụ: truy cập dữ liệu session).

Ngày 15: High Availability (HA) - Distributed Systems và Failover

  • Buổi sáng:

    • High Availability (HA):

      • Khái niệm và tầm quan trọng của HA trong môi trường production.

      • Các yếu tố gây ra downtime.

      • Các metric đánh giá HA (ví dụ: uptime percentage).

    • Distributed Systems (Clusters):

      • Khái niệm và lợi ích của hệ thống phân tán (scalability, fault tolerance).

      • Các kiến trúc cluster phổ biến (ví dụ: active-passive, active-active).

      • Các thách thức trong việc xây dựng và quản lý hệ thống phân tán (consistency, coordination).

  • Buổi chiều:

    • Failover Mechanisms:

      • Khái niệm và các kỹ thuật failover (ví dụ: automatic failover, manual failover).

      • Các cơ chế phát hiện lỗi (health checks).

      • Các ví dụ về failover trong các thành phần hạ tầng (ví dụ: load balancer failover, database failover).

    • Tìm hiểu về một công nghệ clustering hoặc failover cụ thể (ví dụ: Pacemaker cho Linux HA).

  • Mini Project:

    1. Mô tả một kiến trúc HA đơn giản cho một web application, bao gồm load balancer và nhiều web server backend. Giải thích cách failover xảy ra khi một web server bị lỗi.

    2. Tìm hiểu về một giải pháp database HA (ví dụ: PostgreSQL replication với Patroni) và các bước cấu hình cơ bản.

    3. Thiết kế một hệ thống giám sát (monitoring) đơn giản để phát hiện lỗi và kích hoạt cảnh báo trong một hệ thống HA.

Ngày 16: High Availability (HA) - Disaster Recovery và Scaling

  • Buổi sáng:

    • Disaster Recovery (DR):

      • Khái niệm và sự khác biệt so với HA.

      • Các yếu tố cần xem xét trong kế hoạch DR (RTO - Recovery Time Objective, RPO - Recovery Point Objective).

      • Các chiến lược DR phổ biến (ví dụ: backup and restore, pilot light, warm standby, hot standby, multi-site).

    • Thực hành xây dựng một kịch bản DR đơn giản (ví dụ: restore từ backup sang một môi trường khác).

  • Buổi chiều:

    • Vertical Scaling (Scale Up):

      • Khái niệm và cách thực hiện (tăng tài nguyên cho một máy chủ).

      • Ưu điểm và nhược điểm.

      • Các giới hạn của vertical scaling.

    • Horizontal Scaling (Scale Out):

      • Khái niệm và cách thực hiện (thêm nhiều máy chủ vào hệ thống).

      • Ưu điểm và nhược điểm.

      • Các thách thức trong việc quản lý hệ thống scale out (load balancing, data consistency).

    • Phân tích khi nào nên sử dụng vertical scaling và khi nào nên sử dụng horizontal scaling.

  • Mini Project:

    1. So sánh chi tiết các chiến lược DR khác nhau về chi phí, RTO và RPO.

    2. Mô tả một kịch bản mà horizontal scaling là giải pháp tốt hơn vertical scaling và giải thích lý do.

    3. Tìm hiểu về một công nghệ hoặc kiến trúc hỗ trợ horizontal scaling (ví dụ: Kubernetes, microservices).

Ngày 17: Single Sign-On (SSO) - Active Directory/LDAP

  • Buổi sáng:

    • Single Sign-On (SSO):

      • Khái niệm và lợi ích (tiện lợi cho người dùng, tăng cường bảo mật).

      • Các giao thức SSO phổ biến (ví dụ: SAML, OAuth 2.0, OpenID Connect).

      • Các thành phần tham gia vào quy trình SSO (Identity Provider - IdP, Service Provider - SP).

  • Buổi chiều:

    • Active Directory (AD):

      • Khái niệm và vai trò trong hệ thống Windows (quản lý người dùng, nhóm, chính sách).

      • Cấu trúc của AD (Domain, Organizational Units - OUs, Trusts).

      • Các giao thức liên quan (LDAP, Kerberos).

      • Các thao tác quản trị cơ bản với AD (tạo user, group, join domain).

    • LDAP (Lightweight Directory Access Protocol):

      • Khái niệm và mục đích sử dụng (truy cập và quản lý thông tin thư mục).

      • Cấu trúc dữ liệu LDAP (Directory Information Tree - DIT, Distinguished Name - DN).

      • Các thao tác LDAP cơ bản (bind, search).

    • Thực hành kết nối đến một LDAP server (hoặc AD domain controller) bằng các công cụ LDAP client.

  • Mini Project:

    1. Mô tả quy trình SSO sử dụng SAML khi một người dùng truy cập một ứng dụng web.

    2. Cài đặt và cấu hình một LDAP server đơn giản (ví dụ: OpenLDAP). Tạo một số user và group.

    3. Tìm hiểu cách một ứng dụng web có thể tích hợp với LDAP hoặc Active Directory để xác thực người dùng.

Ngày 18: Single Sign-On (SSO) - Okta, OpenID Connect

  • Buổi sáng:

    • Okta:

      • Giới thiệu về Okta như một Identity-as-a-Service (IDaaS) platform.

      • Các tính năng chính của Okta (Universal Directory, SSO, MFA, Lifecycle Management).

      • Tìm hiểu về cách Okta hoạt động như một IdP.

      • Các khái niệm cơ bản trong Okta (Applications, Users, Groups, Policies).

    • Thực hành tạo một tài khoản Okta developer và cấu hình một ứng dụng SSO đơn giản.

  • Buổi chiều:

    • OpenID Connect (OIDC):

      • Khái niệm và vai trò là một lớp xác thực trên OAuth 2.0.

      • Các luồng (flows) xác thực trong OIDC (Authorization Code Flow, Implicit Flow, Hybrid Flow).

      • Các thành phần tham gia (Authorization Server, Client, User Agent, Relying Party).

      • Tìm hiểu về các ID Token và Access Token.

    • Phân tích sự khác biệt giữa SAML và OpenID Connect.

  • Mini Project:

    1. Tích hợp một ứng dụng web đơn giản (ví dụ: sử dụng một framework như Flask, Node.js) với Okta để thực hiện SSO.

    2. Mô tả chi tiết luồng Authorization Code Flow trong OpenID Connect.

    3. Tìm hiểu về JWT (JSON Web Tokens) và vai trò của chúng trong OpenID Connect.

Ngày 19: Security - Certificates, PKI, Zero Trust

  • Buổi sáng:

    • SSL/TLS Certificates:

      • Khái niệm và vai trò trong việc mã hóa và xác thực kết nối.

      • Sự khác biệt giữa Single và Mutual SSL.

      • Quá trình handshake của TLS.

      • Các loại certificate (Domain Validated, Organization Validated, Extended Validation).

      • Cách tạo và quản lý SSL certificates.

    • PKI (Public Key Infrastructure):

      • Khái niệm và các thành phần (Certificate Authority - CA, Registration Authority - RA, Certificates, Public/Private Keys).

      • Vai trò của CA trong việc cấp phát và quản lý certificates.

      • Các khái niệm về Certificate Revocation List (CRL) và Online Certificate Status Protocol (OCSP).

  • Buổi chiều:

    • Zero Trust Security:

      • Khái niệm và nguyên tắc cốt lõi ("never trust, always verify").

      • Sự khác biệt so với mô hình bảo mật truyền thống dựa trên perimeter.

      • Các yếu tố chính của Zero Trust (microsegmentation, least privilege access, multi-factor authentication, continuous validation).

      • Cách triển khai Zero Trust trong hạ tầng IT.

  • Mini Project:

    1. Tạo một self-signed SSL certificate và cấu hình một web server (ví dụ: Nginx, Apache) để sử dụng certificate này.

    2. Tìm hiểu về một CA công cộng (ví dụ: Let's Encrypt) và cách yêu cầu một certificate miễn phí.

    3. Mô tả cách các nguyên tắc của Zero Trust có thể được áp dụng để bảo vệ một ứng dụng microservices.

Ngày 20: Security - Rotation, Compliance, VPNs

  • Buổi sáng:

    • Password/Secret Rotation:

      • Tầm quan trọng của việc thay đổi mật khẩu và các bí mật (API keys, SSH keys) định kỳ.

      • Các công cụ và phương pháp để tự động hóa quá trình rotation (ví dụ: HashiCorp Vault, CyberArk).

      • Các chính sách về password complexity và rotation.

    • Security Compliance:

      • Giới thiệu về các tiêu chuẩn và quy định bảo mật phổ biến (ví dụ: ISO 27001, SOC 2, PCI DSS, GDPR).

      • Tầm quan trọng của việc tuân thủ các quy định này.

      • Các biện pháp kỹ thuật và quy trình để đạt được và duy trì compliance.

  • Buổi chiều:

    • Site-to-site VPN:

      • Các kiến trúc site-to-site VPN phức tạp hơn.

      • Các giao thức và cấu hình (ví dụ: BGP over IPsec).

      • Troubleshooting các vấn đề thường gặp với site-to-site VPN.

    • Client-to-site VPN:

      • Các phương pháp xác thực mạnh (ví dụ: sử dụng certificates, multi-factor authentication).

      • Các kỹ thuật split tunneling và full tunneling.

      • Các giải pháp VPN tập trung.

    • Tổng kết và ôn lại các kiến thức đã học trong 20 ngày.

  • Mini Project:

    1. Tìm hiểu về một công cụ quản lý bí mật (ví dụ: HashiCorp Vault) và các tính năng cơ bản của nó.

    2. Nghiên cứu về một tiêu chuẩn bảo mật (ví dụ: ISO 27001) và xác định các yêu cầu kỹ thuật liên quan đến hạ tầng IT.

    3. Thiết kế một giải pháp VPN cho phép nhân viên từ xa truy cập an toàn vào mạng công ty, bao gồm cả việc sử dụng xác thực hai yếu tố.


3. Learn Infrastructure Automation Tools

Ngày 1: Giới thiệu Infrastructure as Code và Vagrant

  • Buổi sáng:

    • Infrastructure as Code (IaC):

      • Khái niệm, lợi ích, và các phương pháp tiếp cận (Declarative vs. Imperative).

      • Các category của IaC tools: Provisioning, Configuration Management, Application Deployment.

      • Workflow của IaC trong môi trường phát triển và production.

    • Vagrant (Nền tảng):

      • Cài đặt và cấu hình Vagrant.

      • Kiến trúc Vagrant: Vagrantfile, Providers, Boxes, Provisioners.

      • Các lệnh Vagrant cơ bản: init, up, ssh, halt, destroy, reload, status.

      • Tìm hiểu sâu về Vagrantfile: cấu hình box, network (forwarded ports, private/public networks), synced folders.

  • Buổi chiều (4 tiếng):

    • Vagrant Providers (VirtualBox):

      • Cấu hình VirtualBox provider trong Vagrantfile: config.vm.provider :virtualbox do |vb| ... end.

      • Các tùy chọn cấu hình VirtualBox: name, memory, cpus, gui, customize.

      • Làm việc với VirtualBox Guest Additions.

      • Export và Import Vagrant Boxes từ VirtualBox.

    • Vagrant Provisioners (Shell cơ bản):

      • Sử dụng Shell provisioner để chạy scripts trên VM.

      • Tự động hóa các tác vụ cơ bản (cài đặt packages, tạo users).

      • Truyền biến từ Vagrantfile vào Shell script.

  • Mini Project:

    1. Tạo một Vagrantfile để khởi tạo một máy ảo Ubuntu Server với 2GB RAM và 2 vCPUs bằng VirtualBox.

    2. Sử dụng Shell provisioner để tự động cài đặt nginx trên máy ảo khi nó được tạo. Kiểm tra bằng cách truy cập từ trình duyệt host qua forwarded port.

    3. Tạo một Vagrant Box tùy chỉnh từ một máy ảo đã được cấu hình.

Ngày 2: Docker

  • Buổi sáng:

    • Containerization:

      • Khái niệm container và sự khác biệt so với máy ảo.

      • Lợi ích của containerization (portability, consistency, resource efficiency).

      • Kiến trúc Docker: Docker Engine (Docker Daemon, Docker Client), Docker Registry.

    • Docker Images:

      • Khái niệm Docker Image và Layers.

      • Dockerfile: Cú pháp và các chỉ thị cơ bản (FROM, RUN, COPY, ADD, WORKDIR, ENV, EXPOSE, CMD, ENTRYPOINT).

      • Xây dựng Docker Image bằng lệnh docker build.

      • Quản lý Docker Images: docker images, docker rmi, docker tag, docker push, docker pull.

  • Buổi chiều:

    • Docker Containers:

      • Tạo và chạy Docker Containers bằng lệnh docker run.

      • Các tùy chọn quan trọng của docker run: -d (detached), -p (port mapping), -v (volume mapping), --name, --network.

      • Quản lý Docker Containers: docker ps, docker stop, docker start, docker restart, docker rm, docker logs, docker exec.

      • Docker Volumes: Persistent storage cho containers. Các loại volumes (anonymous, named, bind mounts).

      • Docker Networks: Quản lý giao tiếp giữa các containers. Các loại networks (bridge, host, none, custom).

  • Mini Project:

    1. Viết một Dockerfile để tạo image cho một ứng dụng web Python đơn giản (ví dụ: Flask).

    2. Build image và chạy container, map port của container ra host để có thể truy cập ứng dụng từ trình duyệt.

    3. Tạo một named volume và mount nó vào container để lưu trữ dữ liệu ứng dụng một cách persistent.

Ngày 3: Docker và Docker Compose

  • Buổi sáng:

    • Docker Networking:

      • Tạo và quản lý custom Docker networks.

      • Container linking (legacy) và Docker DNS.

      • Network drivers (bridge, overlay, macvlan).

      • Inter-container communication.

    • Docker Storage:

      • Storage drivers.

      • Multi-host networking và storage.

    • Docker Security:

      • Docker user and security context.

      • Image scanning for vulnerabilities.

      • Network security policies.

  • Buổi chiều:

    • Docker Compose:

      • Giới thiệu Docker Compose: Định nghĩa và quản lý multi-container Docker applications.

      • docker-compose.yml file: Cú pháp và các directives (version, services, volumes, networks).

      • Các lệnh Docker Compose cơ bản: docker-compose up, docker-compose down, docker-compose ps, docker-compose logs.

      • Định nghĩa services, networks, và volumes trong docker-compose.yml.

      • Sử dụng environment variables và build context trong Docker Compose.

  • Mini Project:

    1. Tạo một custom Docker network và chạy hai containers (ví dụ: một web server và một database) trên mạng này. Kiểm tra khả năng giao tiếp giữa chúng.

    2. Viết một docker-compose.yml file để khởi chạy một ứng dụng web (ví dụ: WordPress) bao gồm web server (Nginx/Apache) và database (MySQL/PostgreSQL).

    3. Sử dụng environment variables trong docker-compose.yml để cấu hình database credentials.

Ngày 4: Kubernetes (K8s) cho Development - Minikube/Kind

  • Buổi sáng:

    • Giới thiệu Kubernetes:

      • Khái niệm orchestration và vai trò của Kubernetes.

      • Kiến trúc Kubernetes: Control Plane (API Server, etcd, Scheduler, Controller Manager), Worker Nodes (kubelet, kube-proxy, Container Runtime).

      • Các đối tượng Kubernetes cơ bản: Pods, Nodes, Namespaces.

    • Minikube:

      • Cài đặt và cấu hình Minikube.

      • Các lệnh Minikube cơ bản: start, stop, status, delete, kubectl.

      • Làm việc với Minikube profiles.

      • Accessing the Minikube cluster.

    • Kind (Kubernetes in Docker):

      • Cài đặt và cấu hình Kind.

      • Tạo và quản lý clusters bằng Kind.

      • So sánh Minikube và Kind về use cases và hiệu suất cho development.

  • Buổi chiều:

    • Kubernetes Core Concepts (Pods):

      • Định nghĩa Pod: đơn vị triển khai nhỏ nhất trong Kubernetes.

      • Running single and multi-container Pods.

      • Pod lifecycle.

      • Init Containers.

      • Container probes (Liveness and Readiness).

    • Kubernetes Core Concepts (Deployments):

      • Định nghĩa Deployment: quản lý replica sets và rolling updates cho Pods.

      • Creating and managing Deployments using kubectl apply.

      • Scaling Deployments.

      • Rolling updates and rollbacks.

  • Mini Project:

    1. Khởi tạo một cluster Kubernetes bằng Minikube hoặc Kind.

    2. Tạo một Deployment để chạy một ứng dụng web Docker image (đã tạo ở ngày 2). Expose Deployment bằng một Service (sẽ học ở ngày sau).

    3. Thực hiện rolling update cho Deployment bằng cách thay đổi image version. Quan sát quá trình update.

Ngày 5: Kubernetes (K8s) cho Development - Services, Volumes, ConfigMaps, Secrets

  • Buổi sáng:

    • Kubernetes Core Concepts (Services):

      • Định nghĩa Service: trừu tượng hóa việc truy cập vào các Pods.

      • Các loại Services: ClusterIP, NodePort, LoadBalancer, ExternalName.

      • Selectors và Endpoints.

      • DNS resolution trong Kubernetes.

    • Kubernetes Core Concepts (Volumes):

      • Persistent Volumes (PV) và Persistent Volume Claims (PVC): Quản lý storage độc lập với lifecycle của Pods.

      • Các loại Volumes phổ biến: emptyDir, hostPath, local, NFS, CSI (Container Storage Interface - giới thiệu).

  • Buổi chiều:

    • Kubernetes Core Concepts (ConfigMaps):

      • Quản lý configuration data cho ứng dụng.

      • Tạo ConfigMaps từ file, directory, hoặc literal values.

      • Consuming ConfigMaps as environment variables hoặc volume mounts.

    • Kubernetes Core Concepts (Secrets):

      • Quản lý sensitive information (passwords, API keys).

      • Tạo Secrets từ file hoặc literal values.

      • Encoding và decoding Secrets (base64).

      • Consuming Secrets as environment variables hoặc volume mounts.

  • Mini Project:

    1. Expose Deployment đã tạo ở ngày 4 bằng một Service kiểu NodePort. Truy cập ứng dụng từ trình duyệt host bằng Node IP và port.

    2. Tạo một Persistent Volume Claim và mount nó vào một Pod để lưu trữ dữ liệu. Kiểm tra dữ liệu vẫn còn sau khi Pod bị xóa và tạo lại.

    3. Tạo một ConfigMap chứa cấu hình cho ứng dụng web (ví dụ: database host). Mount ConfigMap vào Pod và đọc cấu hình từ ứng dụng.

    4. Tạo một Secret chứa database credentials và mount nó vào Pod dưới dạng environment variables.

Ngày 6: Terraform

  • Buổi sáng:

    • Giới thiệu Terraform:

      • Mục đích và lợi ích của Terraform cho infrastructure provisioning.

      • Kiến trúc Terraform: Core, Providers, State.

      • Workflow Terraform: init, plan, apply, destroy.

      • Terraform Configuration Language (HCL): Cú pháp cơ bản, blocks, arguments, expressions.

    • Terraform Providers:

      • Giới thiệu về các Terraform Providers (AWS, Azure, GCP, VirtualBox, Docker, Kubernetes).

      • Cấu hình Providers.

      • Tìm hiểu về Terraform Registry để khám phá Providers và Modules.

  • Buổi chiều:

    • Terraform Resources:

      • Định nghĩa và quản lý infrastructure resources (VMs, networks, storage, etc.).

      • Cú pháp định nghĩa resource: resource "<PROVIDER>_<RESOURCE_TYPE>" "<RESOURCE_NAME>" { ... }.

      • Các thuộc tính (attributes) của resource.

      • Resource dependencies (implicit và explicit).

    • Terraform Data Sources:

      • Đọc thông tin về infrastructure đã tồn tại.

      • Cú pháp định nghĩa data source: data "<PROVIDER>_<DATA_SOURCE_TYPE>" "<DATA_SOURCE_NAME>" { ... }.

      • Sử dụng data sources để lấy thông tin cần thiết cho resource configuration.

  • Mini Project:

    1. Cài đặt Terraform.

    2. Viết một cấu hình Terraform đơn giản để tạo một VirtualBox VM (sử dụng VirtualBox provider).

    3. Sử dụng data source để lấy thông tin về một box VirtualBox đã tồn tại và sử dụng thông tin này trong cấu hình VM mới.

Ngày 7: Terraform (Cơ bản với AWS)

  • Buổi sáng:

    • Terraform Provider for AWS (Cơ bản):

      • Cấu hình AWS provider (credentials, region).

      • Tìm hiểu về các AWS resources cơ bản: aws_vpc, aws_subnet, aws_internet_gateway, aws_route_table, aws_security_group, aws_instance.

    • Provisioning Network Infrastructure trên AWS với Terraform:

      • Tạo VPC, Subnets (public và private).

      • Tạo Internet Gateway và Route Table cho public subnet.

      • Tạo Security Group với các rule cơ bản.

  • Buổi chiều:

    • Provisioning EC2 Instance trên AWS với Terraform:

      • Sử dụng resource aws_instance.

      • Cấu hình ami, instance_type, subnet_id, security_groups, key_name, user_data.

      • Kết nối đến EC2 instance.

    • Terraform State:

      • Khái niệm Terraform State: lưu trữ thông tin về infrastructure đã được quản lý.

      • Local state và các backend state (S3, Terraform Cloud - giới thiệu).

      • Tầm quan trọng của việc quản lý state một cách an toàn.

  • Mini Project:

    1. Viết cấu hình Terraform để tạo một VPC với một public subnet và một EC2 instance chạy trong subnet đó.

    2. Thêm một Security Group rule để cho phép truy cập SSH (port 22) vào EC2 instance.

    3. Sử dụng user_data để tự động cài đặt nginx trên EC2 instance khi nó được tạo.

Ngày 8: Terraform (Modules và Variables)

  • Buổi sáng:

    • Terraform Modules:

      • Khái niệm Terraform Module: đóng gói và tái sử dụng cấu hình Terraform.

      • Cấu trúc thư mục của module.

      • Defining input variables and output values in modules.

      • Sử dụng modules từ Terraform Registry và local paths.

      • Best practices for writing reusable modules.

    • Terraform Variables:

      • Định nghĩa input variables trong Terraform configurations.

      • Các loại variables (string, number, bool, list, map, object).

      • Providing variable values: command-line arguments, terraform.tfvars files, environment variables.

      • Input validation and type constraints.

  • Buổi chiều:

    • Terraform Output Values:

      • Định nghĩa output values để hiển thị thông tin quan trọng sau khi apply.

      • Sử dụng output values để truy cập thông tin về các resource đã tạo.

    • Terraform Functions:

      • Sử dụng built-in Terraform functions để thao tác với dữ liệu.

      • String functions, numeric functions, collection functions, etc.

    • Terraform Conditionals and Loops (Meta-Arguments):

      • Sử dụng count meta-argument để tạo multiple instances of a resource.

      • Sử dụng for_each meta-argument để tạo resources based on a map or set.

      • Sử dụng depends_on meta-argument để define explicit dependencies.

  • Mini Project:

    1. Tạo một Terraform module để provision một EC2 instance với các tùy chọn cấu hình (instance type, AMI ID) có thể được truyền qua variables.

    2. Sử dụng module này trong cấu hình chính và cung cấp các giá trị variable khác nhau để tạo nhiều EC2 instances với cấu hình khác nhau.

    3. Define output values để hiển thị public IP address của các EC2 instances sau khi tạo.

Ngày 9: Terraform (State Management và Backend)

  • Buổi sáng:

    • Terraform State Management:

      • Tầm quan trọng của state locking để tránh corruption trong môi trường team.

      • State locking mechanisms của các backend khác nhau.

      • State import: Import existing infrastructure vào quản lý của Terraform.

      • State move: Di chuyển resource giữa các state.

      • State rm: Xóa resource khỏi state (cẩn thận khi sử dụng).

    • Terraform Backends:

      • Cấu hình Terraform Backend để lưu trữ state từ xa.

      • Các loại backends phổ biến: s3, azurerm, gcs, remote (Terraform Cloud).

      • Ưu điểm của việc sử dụng remote backends (collaboration, state locking, versioning).

  • Buổi chiều:

    • Terraform Workspaces:

      • Sử dụng workspaces để quản lý multiple environments (dev, staging, prod) với cùng một cấu hình.

      • Tạo và chuyển đổi giữa các workspaces.

      • Cân nhắc ưu và nhược điểm của workspaces so với việc sử dụng multiple state files hoặc modules.

    • Terraform Cloud (Giới thiệu):

      • Tổng quan về Terraform Cloud: remote state storage, collaboration, version control integration, Sentinel policies.

      • Thiết lập tài khoản Terraform Cloud và cấu hình remote backend.

  • Mini Project:

    1. Cấu hình Terraform backend để lưu trữ state trong AWS S3 bucket (đảm bảo bucket có versioning và state locking bằng DynamoDB).

    2. Tạo ba Terraform workspaces (dev, staging, prod) và triển khai cùng một cấu hình EC2 instance vào từng workspace. Quan sát cách state được quản lý riêng biệt.

    3. Tìm hiểu về Sentinel policies trong Terraform Cloud (nếu có điều kiện) và cách chúng có thể được sử dụng để enforce compliance.

Ngày 10: Terraform (Testing)

  • Buổi sáng:

    • Giới thiệu về Testing trong Infrastructure as Code:

      • Tầm quan trọng của testing để đảm bảo tính chính xác và độ tin cậy của infrastructure code.

      • Các loại test cho IaC: Static Analysis (linting), Unit Tests, Integration Tests, End-to-End Tests.

    • Terraform Testing Frameworks:

      • Giới thiệu về Terratest: một framework Go để viết integration tests cho Terraform.

      • Các thành phần của Terratest: terraform, aws, http, ssh packages.

      • Viết test cases bằng Go.

      • Cấu trúc một test suite Terratest.

  • Buổi chiều:

    • Viết Unit Tests cho Terraform (Sử dụng terraform validateterraform plan):

      • Sử dụng terraform validate để kiểm tra cú pháp và tính hợp lệ của cấu hình.

      • Sử dụng terraform plan -out=tfplan và phân tích plan để đảm bảo các thay đổi dự kiến là đúng.

      • Sử dụng terraform show -json tfplan để kiểm tra chi tiết các thuộc tính của resource trong plan.

    • Viết Integration Tests với Terratest:

      • Thiết lập môi trường test (ví dụ: tạo temporary AWS resources).

      • Sử dụng hàm terraform.InitAndApply để triển khai infrastructure trong test.

      • Sử dụng các hàm của Terratest AWS package để kiểm tra các thuộc tính của resource đã tạo (ví dụ: kiểm tra trạng thái EC2 instance, kiểm tra rule của Security Group).

      • Sử dụng hàm terraform.Destroy để dọn dẹp tài nguyên sau khi test.

  • Mini Project:

    1. Viết một Terratest để kiểm tra rằng một EC2 instance được tạo có đúng instance type và AMI ID như cấu hình Terraform.

    2. Viết một Terratest để kiểm tra rằng một Security Group được tạo có rule cho phép truy cập SSH từ một địa chỉ IP cụ thể.

    3. Sử dụng terraform planterraform show để kiểm tra plan cho việc tạo một S3 bucket và đảm bảo các thuộc tính (ví dụ: ACL) được cấu hình đúng.

Ngày 11: Terraform (Advanced Topics)

  • Buổi sáng:

    • Terraform Providers (Custom Providers và Provider Development):

      • Khi nào cần đến custom providers.

      • Tổng quan về kiến trúc và quy trình phát triển Terraform provider (sử dụng Go SDK).

      • Sử dụng community-driven custom providers.

    • Terraform Dynamic Blocks:

      • Tạo các block cấu hình lặp đi lặp lại một cách linh hoạt dựa trên dữ liệu.

      • Sử dụng dynamic block để cấu hình các list hoặc map của thuộc tính.

    • Terraform Import:

      • Xử lý các trường hợp import phức tạp.

      • Sử dụng terraform state listterraform state show để quản lý state trong quá trình import.

  • Buổi chiều:

    • Terraform Provisioners (Remote Exec và File Provisioners):

      • Sử dụng remote-exec provisioner để chạy lệnh trên VM sau khi tạo (cần SSH access). Cẩn trọng khi sử dụng provisioners.

      • Sử dụng file provisioner để copy file từ local machine lên VM.

      • Cân nhắc các giải pháp thay thế cho provisioners (ví dụ: configuration management tools).

    • Terraform Meta-Arguments (Lifecycle):

      • Sử dụng create_before_destroy để tạo resource mới trước khi xóa resource cũ (tránh downtime).

      • Sử dụng prevent_destroy để ngăn chặn việc xóa resource.

      • Sử dụng ignore_changes để bỏ qua các thay đổi bên ngoài Terraform quản lý.

  • Mini Project:

    1. Sử dụng dynamic block để cấu hình nhiều rule cho một Security Group dựa trên một list các port và protocol.

    2. Sử dụng remote-exec provisioner để cài đặt một package bổ sung trên EC2 instance sau khi nó được tạo.

    3. Sử dụng create_before_destroy để cập nhật cấu hình của một EC2 instance mà không gây downtime.

Ngày 12: Ansible

  • Buổi sáng:

    • Giới thiệu Ansible:

      • Mục đích và lợi ích của Ansible cho configuration management và application deployment.

      • Kiến trúc Ansible: Control Node, Managed Nodes, Inventory, Modules, Playbooks.

      • Ansible is agentless.

    • Ansible Inventory:

      • Định nghĩa managed nodes trong file inventory (INI hoặc YAML).

      • Sử dụng hostnames, IP addresses, và groups.

      • Variable assignment ở level inventory.

      • Dynamic Inventory.

    • Ansible Modules:

      • Khái niệm Ansible Module: đơn vị công việc trong Ansible.

      • Khám phá các module Ansible built-in (command, shell, apt, yum, service, user, file, copy, template).

      • Sử dụng ansible-doc để xem tài liệu module.

  • Buổi chiều:

    • Ansible Playbooks:

      • Viết Ansible Playbooks (YAML format).

      • Cấu trúc của Playbook: hosts, tasks, vars, roles.

      • Thực thi Playbooks bằng lệnh ansible-playbook.

      • Sử dụng gather_facts để thu thập thông tin về managed nodes.

      • Kiểm soát luồng thực thi với handlersnotify.

    • Ansible Ad-Hoc Commands:

      • Thực thi các tác vụ đơn lẻ trên managed nodes bằng lệnh ansible.

      • Sử dụng -m (module), -a (arguments), -i (inventory), -u (user), -k (ask for password).

  • Mini Project:

    1. Tạo một Ansible inventory file để quản lý một vài máy ảo (có thể dùng Vagrant để tạo).

    2. Sử dụng ad-hoc command để ping tất cả các máy trong inventory.

    3. Viết một Ansible Playbook để cài đặt nginx trên các máy trong inventory.

Ngày 13: Ansible (Playbooks)

  • Buổi sáng:

    • Ansible Variables:

      • Variable precedence.

      • Defining variables in Playbooks, included files, and roles.

      • Using Jinja2 templating for variables.

      • vars_files, vars_prompt.

      • Registering output of tasks as variables.

    • Ansible Conditionals:

      • Sử dụng when statement để thực hiện tasks dựa trên điều kiện.

      • Sử dụng facts và registered variables trong điều kiện.

      • Multiple conditions.

    • Ansible Loops:

      • Sử dụng loop keyword để thực hiện tasks lặp đi lặp lại.

      • Standard loops, with_items, with_dict.

      • Looping over registered variables.

  • Buổi chiều:

    • Ansible Handlers:

      • Sử dụng handlers để thực hiện các tác vụ chỉ khi có thay đổi.

      • Multiple handlers.

      • Forcing handlers to run.

    • Ansible Includes:

      • Chia nhỏ Playbooks thành các file nhỏ hơn bằng include_tasksinclude_role.

      • Static vs. dynamic includes.

    • Ansible Blocks and Error Handling:

      • Sử dụng block, rescue, và always để xử lý lỗi và thực hiện các tác vụ dọn dẹp.
  • Mini Project:

    1. Viết một Ansible Playbook để cấu hình nginx. Sử dụng variables để cấu hình port và server name.

    2. Sử dụng when condition để chỉ cài đặt một package cụ thể dựa trên hệ điều hành của managed node.

    3. Sử dụng loop để tạo nhiều user trên managed nodes từ một list các user được định nghĩa trong variables.

    4. Sử dụng handlers để restart dịch vụ nginx chỉ khi file cấu hình của nó bị thay đổi.

Ngày 14: Ansible (Roles)

  • Buổi sáng:

    • Giới thiệu Ansible Roles:

      • Mục đích và lợi ích của việc sử dụng Roles để tổ chức Ansible content.

      • Cấu trúc thư mục của một Role (tasks, handlers, vars, defaults, meta, templates, files).

      • Sử dụng Roles trong Playbooks.

    • Creating Ansible Roles:

      • Tạo Roles bằng lệnh ansible-galaxy init.

      • Viết tasks, handlers, variables, và templates trong Roles.

      • Sử dụng defaults để cung cấp giá trị mặc định cho variables trong Role.

  • Buổi chiều:

    • Using Ansible Galaxy:

      • Tìm kiếm và tải Roles từ Ansible Galaxy.

      • Quản lý dependencies của Roles bằng requirements.yml.

      • Sử dụng Roles từ Ansible Galaxy trong Playbooks.

    • Testing Ansible Roles:

      • Giới thiệu về các công cụ testing cho Ansible Roles (Ansible Lint, Testinfra).

      • Viết các test cơ bản cho Role.

    • Publishing Ansible Roles (Giới thiệu):

      • Chuẩn bị Role để publish lên Ansible Galaxy.

      • Metadata của Role.

  • Mini Project:

    1. Tạo một Ansible Role để cài đặt và cấu hình apache2 (hoặc httpd). Role nên có khả năng cấu hình port và virtual hosts thông qua variables.

    2. Sử dụng Role này trong một Playbook để triển khai apache2 trên một máy ảo.

    3. Tìm kiếm một Role có sẵn trên Ansible Galaxy để cài đặt một công cụ monitoring đơn giản (ví dụ: htop) và sử dụng Role này trong Playbook.

Ngày 15: Ansible (Advanced Topics)

  • Buổi sáng:

    • Ansible Lookups:

      • Sử dụng Lookups để lấy dữ liệu từ bên ngoài (files, databases, APIs).

      • Các Lookup plugins phổ biến (file, template, env, password).

    • Ansible Filters:

      • Sử dụng Filters để thao tác và biến đổi dữ liệu.

      • Các Filter plugins phổ biến (string manipulation, data conversion, list operations).

    • Ansible Vault:

      • Quản lý secrets (passwords, API keys) một cách an toàn trong Ansible.

      • Mã hóa và giải mã files bằng Ansible Vault.

      • Sử dụng Vault passwords.

  • Buổi chiều:

    • Ansible Dynamic Inventory:

      • Viết custom dynamic inventory scripts (Python).

      • Sử dụng dynamic inventory plugins cho các cloud providers (AWS EC2, Azure VMs, GCP Compute).

    • Ansible Collections:

      • Giới thiệu về Ansible Collections: đóng gói và phân phối Ansible content (modules, roles, plugins).

      • Cấu trúc của Collection.

      • Sử dụng Collections từ Ansible Galaxy.

  • Mini Project:

    1. Sử dụng lookup('file', ...) để đọc nội dung từ một file cấu hình và sử dụng nó trong template của nginx.

    2. Sử dụng Ansible Vault để mã hóa một file chứa database credentials và sử dụng nó trong Playbook.

    3. Cấu hình Ansible để sử dụng dynamic inventory plugin cho một cloud provider (nếu có tài khoản).

Ngày 16: Configuration Management - Chef, Puppet, SaltStack

  • Buổi sáng:

    • Chef:

      • Kiến trúc Chef: Chef Server, Chef Workstation, Chef Node, Recipes, Cookbooks.

      • Workflow của Chef.

      • So sánh Chef với Ansible.

    • Puppet:

      • Kiến trúc Puppet: Puppet Master, Puppet Agent, Manifests, Modules.

      • Puppet DSL (Domain Specific Language).

      • Workflow của Puppet.

      • So sánh Puppet với Ansible.

  • Buổi chiều:

    • SaltStack:

      • Kiến trúc SaltStack: Salt Master, Salt Minion, States, Pillars.

      • Workflow của SaltStack.

      • So sánh SaltStack với Ansible.

    • Lựa chọn công cụ Configuration Management phù hợp cho từng use case.

    • Giới thiệu về các khái niệm chung trong Configuration Management: Idempotency, Convergence, Drift Detection.

  • Mini Project:

    1. Nghiên cứu một ví dụ cấu hình cơ bản (ví dụ: cài đặt nginx) bằng Chef Recipe, Puppet Manifest, và SaltStack State. So sánh cú pháp và cách tiếp cận.

    2. Tìm hiểu về một module/cookbook/salt state có sẵn để quản lý một dịch vụ phổ biến (ví dụ: apache2) trong mỗi công cụ.

    3. So sánh ưu và nhược điểm của agent-based (Chef, Puppet, SaltStack) và agentless (Ansible) configuration management.

Ngày 17: VM Image/Container Management - Packer

  • Buổi sáng:

    • Giới thiệu HashiCorp Packer:

      • Mục đích và lợi ích của Packer cho việc xây dựng image máy ảo và container.

      • Kiến trúc Packer: Builders, Provisioners, Post-processors.

      • Packer Templates (JSON hoặc HCL).

      • Workflow của Packer: init, validate, build.

    • Packer Builders:

      • Các Builders phổ biến: amazon-ebs, azure-arm, googlecompute, virtualbox-iso, docker.

      • Cấu hình các Builders để tạo images cho các nền tảng khác nhau.

  • Buổi chiều:

    • Packer Provisioners:

      • Sử dụng Provisioners để cài đặt phần mềm và cấu hình hệ thống trong quá trình build image (Shell, Ansible, Chef, Puppet).

      • Thứ tự thực hiện Provisioners.

      • Truyền variables vào Provisioners.

    • Packer Post-processors:

      • Thực hiện các tác vụ sau khi image đã được build (ví dụ: push image lên registry, tạo snapshot).

      • Các Post-processors phổ biến.

  • Mini Project:

    1. Viết một Packer template để build một image VirtualBox Ubuntu Server đã cài đặt sẵn nginx. Sử dụng Shell provisioner để cài đặt nginx.

    2. Viết một Packer template để build một AMI (Amazon Machine Image) đã cài đặt sẵn một ứng dụng đơn giản.

    3. Sử dụng Ansible provisioner trong Packer để cấu hình image.

Ngày 18: VM Image/Container Management - Docker và Podman (Image Management)

  • Buổi sáng:

    • Docker Image Management:

      • Dockerfile best practices để tạo images nhỏ gọn và bảo mật.

      • Multi-stage builds.

      • Image layering in detail.

      • Sử dụng .dockerignore file.

    • Docker Registries:

      • Docker Hub: Public registry.

      • Private Docker Registries: Thiết lập và sử dụng.

      • Quản lý images trong registry (push, pull, tag, delete).

      • Image security scanning.

  • Buổi chiều:

    • Podman:

      • Giới thiệu về Podman: container engine không cần daemon.

      • So sánh Podman với Docker.

      • Các lệnh Podman tương đương với Docker (podman build, podman run, podman images, etc.).

      • Podman pods: Quản lý nhóm containers cùng nhau.

      • Rootless containers với Podman.

    • Chuyển đổi từ Docker sang Podman (Considerations).

  • Mini Project:

    1. Tối ưu hóa Dockerfile của một ứng dụng đã tạo bằng cách sử dụng multi-stage build.

    2. Đẩy Docker image lên Docker Hub (tạo tài khoản nếu chưa có).

    3. Chạy một container tương tự bằng Podman và so sánh các bước thực hiện.

Ngày 19: Test-Driven Infrastructure Development (TDID)

  • Buổi sáng:

    • Nguyên tắc của Test-Driven Development (TDD) áp dụng cho Infrastructure:

      • Viết test trước khi viết code infrastructure.

      • Chạy test và đảm bảo nó fail.

      • Viết code infrastructure để test pass.

      • Refactor code trong khi vẫn đảm bảo test pass.

    • Test Pyramid cho Infrastructure:

      • Unit Tests (Terraform Validate, Ansible Syntax Check).

      • Integration Tests (Terratest, Ansible Modules Testing).

      • End-to-End Tests (ví dụ: kiểm tra ứng dụng sau khi triển khai).

    • Viết Unit Tests cho Ansible:

      • Sử dụng ansible-lint để kiểm tra style và best practices.

      • Sử dụng yamllint để kiểm tra cú pháp YAML.

      • Sử dụng flake8 cho Python code trong custom modules/plugins.

  • Buổi chiều:

    • Viết Integration Tests cho Ansible:

      • Sử dụng Ansible modules trong test Playbooks để kiểm tra trạng thái của managed nodes sau khi chạy Playbook chính.

      • Sử dụng assert module.

      • Sử dụng các module kiểm tra service, package, file.

    • CI/CD tích hợp với Infrastructure Testing:

      • Tích hợp Terraform validation, plan, và apply vào pipeline CI/CD.

      • Tích hợp Ansible linting và Playbook testing vào pipeline CI/CD.

      • Chạy Terratest trong pipeline CI/CD.

  • Mini Project:

    1. Viết một Ansible Playbook để đảm bảo một ...dịch vụ (ví dụ: nginx) đang chạy và lắng nghe trên một port cụ thể. Viết một test Playbook để kiểm tra trạng thái dịch vụ này.

    2. Tích hợp terraform validateterraform plan vào một Git hook (ví dụ: pre-commit) để tự động kiểm tra cấu hình Terraform trước khi commit.

    3. Tìm hiểu về một CI/CD platform (ví dụ: GitLab CI, GitHub Actions, Jenkins) và cách cấu hình một pipeline đơn giản để chạy Terraform plan và Ansible linting.

Ngày 20: Infrastructure Automation in Production & Best Practices

  • Buổi sáng:

    • Triển khai Infrastructure Automation trong Production:

      • Quản lý state và secrets an toàn trong môi trường production.

      • Workflow triển khai (ví dụ: sử dụng GitOps).

      • Thực hiện thay đổi infrastructure một cách an toàn (blue/green deployments, canary deployments).

      • Chiến lược rollback.

    • Monitoring và Alerting cho Infrastructure Automation:

      • Theo dõi quá trình chạy của Terraform và Ansible.

      • Thiết lập cảnh báo khi có lỗi hoặc drift.

      • Tích hợp với các công cụ monitoring (Prometheus, Grafana, CloudWatch).

  • Buổi chiều:

    • Best Practices cho Infrastructure as Code:

      • Giữ cấu hình đơn giản và modular.

      • Sử dụng variables và modules/roles hiệu quả.

      • Viết code idempotent.

      • Quản lý phiên bản code infrastructure (Git).

      • Review code infrastructure.

      • Tài liệu hóa infrastructure code.

    • Security Best Practices cho Infrastructure Automation:

      • Quản lý credentials an toàn (không hardcode secrets).

      • Thực hiện least privilege.

      • Audit logs.

      • Quét lỗ hổng bảo mật trong images và dependencies.

    • Troubleshooting các vấn đề thường gặp với Infrastructure Automation tools.

  • Mini Project:

    1. Mô tả một workflow GitOps đơn giản để quản lý việc triển khai infrastructure bằng Terraform.

    2. Tìm hiểu cách tích hợp Terraform hoặc Ansible với một công cụ monitoring để theo dõi trạng thái triển khai.

    3. Liệt kê 5 best practices quan trọng nhất mà bạn sẽ áp dụng khi viết infrastructure code cho môi trường production và giải thích lý do.


4. Learn About Microservices, Containers & Kubernetes

Tuần 1: Docker và Microservices

Ngày 1: Docker Images

Buổi sáng:

  • Dockerfile: Tối ưu hóa layer caching, sử dụng ARG và ENV hiệu quả, security best practices (non-root user, least privilege), HEALTHCHECK.

  • Multi-Stage Builds: Các pattern phức tạp, chia sẻ artifacts giữa các stages, tối ưu hóa final image size.

  • Image Manifests và Multi-Architecture Images.

Buổi chiều:

  • Docker Image Security Hardening: Static analysis tools (Hadolint, Docker Bench for Security), vulnerability scanning tích hợp (Snyk, Trivy, Aqua Security), image signing và verification (Notary).

  • Custom Base Images: Xây dựng base images tối thiểu và an toàn.

  • Distroless Images.

  • Mini Project:

    1. Tối ưu hóa Dockerfile của một ứng dụng phức tạp bằng multi-stage build để giảm đáng kể kích thước image cuối cùng.

    2. Tích hợp một công cụ quét lỗ hổng bảo mật vào quy trình build Docker image.

    3. Xây dựng một Docker image distroless cho một ứng dụng Go hoặc Java.

Ngày 2: Docker Networking

Buổi sáng:

  • Docker Network Drivers: Overlay networks cho multi-host, Macvlan cho direct L2 connectivity, custom network drivers.

  • Service Discovery trong Docker: Sử dụng Docker DNS và các công cụ bên ngoài (Consul, etcd).

  • Network Plugins (Libnetwork): Kiến trúc và cách hoạt động.

Buổi chiều:

  • Securing Docker Networks: Network policies với các plugin bên ngoài (Calico, Weave Net), container isolation.

  • Troubleshooting Docker Networking Issues.

  • Integrating Docker with External Networks.

  • Mini Project:

    1. Thiết lập một overlay network giữa hai Docker hosts và chạy các containers trên mạng này.

    2. Sử dụng Docker DNS để các containers có thể tìm thấy nhau bằng hostname.

    3. Triển khai một network policy engine (ví dụ: Calico) cho Docker và tạo network policies để kiểm soát lưu lượng container.

Ngày 3: Docker Storage

  • Buổi sáng:

    • Docker Storage Drivers:

      • OverlayFS, AUFS, ZFS, Btrfs.

      • Hiệu suất và use cases.

    • Volume Plugins: Mở rộng khả năng lưu trữ của Docker (ví dụ: NFS, iSCSI).

    • Multi-Host Persistent Storage cho Docker (Giới thiệu các giải pháp).

  • Buổi chiều:

    • Data Management trong Docker: Backups và restores cho volumes, migrating volumes.

    • Storage Performance Tuning for Docker.

    • Container Storage Interface (CSI) cho Docker.

  • Mini Project:

    1. Cài đặt và cấu hình một Docker volume plugin (ví dụ: cho NFS).

    2. Thực hiện backup và restore cho một Docker volume chứa dữ liệu quan trọng.

    3. So sánh hiệu suất I/O của các Docker storage drivers khác nhau trong một workload cụ thể.

Ngày 4: Microservices Design Patterns

Buổi sáng:

  • Advanced Microservices Communication: Asynchronous vs. synchronous, message queues (RabbitMQ, Kafka), gRPC, GraphQL.

  • API Gateways: Kiến trúc, routing, authentication, rate limiting, circuit breaking.

  • Service Discovery Patterns: Client-side vs. server-side, registry implementations (Consul, etcd). *

Buổi chiều:

  • Data Management in Microservices: Database per service, shared database (challenges), Saga pattern, CQRS.

  • Resilience Patterns: Circuit breaker, retry, timeout, bulkhead.

  • Observability in Microservices: Logging, metrics, tracing (OpenTelemetry).

  • Mini Project:

    1. Thiết kế kiến trúc microservices cho một ứng dụng phức tạp (ví dụ: e-commerce) và xác định các pattern phù hợp cho giao tiếp, quản lý dữ liệu và khả năng phục hồi.

    2. Triển khai một API Gateway đơn giản (ví dụ: Kong hoặc Traefik) để định tuyến traffic đến các dịch vụ backend mock.

    3. Thiết lập một hệ thống logging và tracing cơ bản cho một ứng dụng microservices (sử dụng Docker Compose).

Ngày 5: Microservices Deployment Strategies và DevOps

Buổi sáng:

  • Advanced Deployment Strategies: Blue/green deployments, canary deployments, A/B testing, progressive delivery.

  • Container Orchestration cho Microservices: Tại sao Kubernetes là lựa chọn hàng đầu.

  • DevOps Culture và Practices cho Microservices: CI/CD pipelines, Infrastructure as Code (IaC), monitoring và alerting.

Buổi chiều:

  • Building CI/CD Pipelines cho Docker và Microservices: Sử dụng các công cụ như Jenkins, GitLab CI, GitHub Actions.

  • Infrastructure as Code (IaC) cho Microservices: Terraform và Kubernetes manifests.

  • Monitoring và Alerting cho Microservices trong môi trường Containerized.

  • Mini Project:

    1. Thiết kế một CI/CD pipeline để tự động build, test và deploy một ứng dụng microservices Dockerized lên môi trường dev.

    2. Sử dụng Terraform để provision cơ sở hạ tầng cơ bản (ví dụ: một cluster Kubernetes local) cho ứng dụng microservices.

    3. Thiết lập các cảnh báo cơ bản dựa trên metrics container (CPU, memory) sử dụng Prometheus và Alertmanager (trong Docker Compose).

Tuần 2: Kubernetes Cluster Administration và Core Concepts

Ngày 6: Kubernetes Cluster Installation và Setup

Buổi sáng:

  • kubeadm: Cài đặt và cấu hình multi-master Kubernetes cluster, TLS bootstrapping, certificate management, upgrade procedures.

  • k3s và RKE: Kiến trúc, use cases (edge, IoT), cài đặt và quản lý.

  • Choosing the Right Kubernetes Distribution.

Buổi chiều:

  • Network Plugins (CNI): Calico, Cilium, Weave Net, Flannel. Kiến trúc, tính năng, lựa chọn CNI phù hợp.

  • Storage Plugins (CSI): Kiến trúc CSI, triển khai CSI drivers cho các storage providers khác nhau.

  • Cluster Addons: CoreDNS, kube-proxy, metrics-server, dashboard.

  • Mini Project:

    1. Cài đặt một cluster Kubernetes multi-master sử dụng kubeadm trên các máy ảo.

    2. Triển khai một CNI plugin (ví dụ: Calico) vào cluster.

    3. Triển khai một CSI driver cho một storage provider (nếu có môi trường phù hợp).

Ngày 7: Kubernetes API Server và etcd

Buổi sáng:

  • Kubernetes API Server: Authentication và Authorization modes (RBAC, ABAC, Webhook), Admission Controllers (Mutating, Validating), API Aggregation.

  • Securing the API Server: TLS configuration, audit logs, network policies.

Buổi chiều:

  • etcd: RAFT consensus algorithm, performance tuning, backup và restore strategies cho production, monitoring etcd health.

  • Interacting with the Kubernetes API directly (curl, client-go).

  • Mini Project:

    1. Cấu hình audit logging cho Kubernetes API Server.

    2. Thực hiện backup và restore cho etcd cluster.

    3. Sử dụng kubectl auth can-i để kiểm tra quyền RBAC.

Ngày 8: Kubernetes Scheduler và Controllers

Buổi sáng:

  • Kubernetes Scheduler:

    • Scheduling algorithms, predicates và priorities, custom schedulers, node affinity/selector/taints/tolerations.
  • Resource Scheduling: CPU Manager, Memory Manager, Topology Manager.

Buổi chiều:

  • Kubernetes Controllers: Kiến trúc controller-runtime, các controller core (Deployment, ReplicaSet, StatefulSet, Service, etc.), writing custom controllers.

  • Leader Election.

  • Mini Project:

    1. Cấu hình node affinity và taints/tolerations để điều khiển việc scheduling Pods lên các node cụ thể.

    2. Quan sát hoạt động của Kubernetes Scheduler khi scale một Deployment.

    3. Tìm hiểu về kiến trúc của một controller Kubernetes cụ thể (ví dụ: Deployment Controller).

Ngày 9: Kubernetes Networking

Buổi sáng:

  • kube-proxy: ipvs mode internals, performance considerations, traffic shaping.

  • Service Discovery: CoreDNS configuration, custom DNS resolvers, external DNS.

  • Network Policies: Advanced policy rules, logging network policy events.

Buổi chiều:

  • Ingress Controllers: Kiến trúc của các Ingress Controllers phổ biến (Nginx, Traefik, HAProxy), custom configurations, advanced routing rules (rewrite, redirects).

  • External Load Balancers Integration: Cloud provider load balancers, MetalLB cho bare metal.

  • Mini Project:

    1. Cấu hình Ingress để thực hiện rewrite URL.

    2. Triển khai MetalLB trên một cluster local để cung cấp load balancer IP cho Services kiểu LoadBalancer.

    3. Phân tích lưu lượng mạng đến một Service bằng tcpdump trên các node.

Ngày 10: Kubernetes Storage

Buổi sáng:

  • Persistent Volumes: Volume binding modes (WaitForFirstConsumer), volume resizing, snapshots và restores.

  • StatefulSets: Quản lý stateful applications, stable network identities, ordered and graceful deployment và scaling.

Buổi chiều:

  • Local Persistent Volumes: Sử dụng direct-attached storage cho performance cao.

  • Advanced CSI Concepts: Volume cloning, volume health monitoring.

  • Data Protection và Disaster Recovery cho Kubernetes Storage.

  • Mini Project:

    1. Triển khai một ứng dụng stateful (ví dụ: PostgreSQL) sử dụng StatefulSets và Persistent Volumes.

    2. Thực hiện volume resizing cho một PVC.

    3. Tìm hiểu về một giải pháp backup và restore cho Kubernetes volumes (ví dụ: Velero).

Tuần 3: Kubernetes Security và Observability

Ngày 11: Kubernetes Security - Authentication và Authorization

Buổi sáng:

  • Authentication: X.509 Certificates, Static Token Files, Bootstrap Tokens, Service Account Tokens, OpenID Connect, Webhook Token Authentication.

  • Implementing External Authentication Providers.

Buổi chiều:

  • Authorization: RBAC API chi tiết, Attribute-Based Access Control (ABAC), Webhook Authorization.

  • Security Auditing: Configuring audit policies, analyzing audit logs.

  • Pod Security Admission (replaces Pod Security Policies).

  • Mini Project:

    1. Cấu hình một phương pháp authentication bên ngoài cho Kubernetes (ví dụ: OIDC).

    2. Viết audit policy để theo dõi các hoạt động cụ thể trong cluster.

    3. Triển khai và cấu hình Pod Security Admission.

Ngày 12: Kubernetes Security - Network Policies và Secrets Management

Buổi sáng:

  • Network Policies: Advanced selectors (namespaceSelector), named ports, default deny policies, troubleshooting network policies.

  • CNI Network Policy Implementations (Calico, Cilium).

Buổi chiều:

  • Secrets Management: Encryption at rest (etcd encryption), Secrets rotation, External Secrets Operator, HashiCorp Vault integration.

  • Sealed Secrets.

  • Mini Project:

    1. Triển khai các network policies phức tạp để cô lập các ứng dụng trong các namespace khác nhau.

    2. Cấu hình mã hóa etcd để bảo vệ Secrets at rest.

    3. Triển khai External Secrets Operator để đồng bộ Secrets từ một external provider (ví dụ: AWS Secrets Manager).

Ngày 13: Kubernetes Observability - Metrics

Buổi sáng:

  • Metrics in Kubernetes: Node metrics (kubelet), Pod and container metrics (cAdvisor), Kubernetes control plane metrics (kube-state-metrics).

  • Prometheus: Kiến trúc, cấu hình, Prometheus Query Language (PromQL), exporters.

Buổi chiều:

  • Deploying and Configuring Prometheus in Kubernetes.

  • Alerting with Alertmanager: Configuration, routing alerts.

  • Visualization with Grafana: Creating dashboards for Kubernetes metrics.

  • Mini Project:

    1. Triển khai Prometheus và Grafana trên cluster Kubernetes.

    2. Cấu hình Prometheus để scrape metrics từ kubelet và kube-state-metrics.

    3. Tạo một dashboard Grafana hiển thị các metrics quan trọng của cluster và Pods.

    4. Thiết lập một alert rule trong Alertmanager dựa trên một metric cụ thể.

Ngày 14: Kubernetes Observability - Logging và Tracing

Buổi sáng:

  • Logging in Kubernetes: Container logs, node logs, centralized logging solutions (Elasticsearch, Fluentd, Kibana - EFK stack; Loki, Promtail, Grafana - PLG stack).

  • Deploying and Configuring a Logging Stack (ví dụ: EFK) in Kubernetes.

Buổi chiều:

  • Distributed Tracing: Khái niệm, OpenTelemetry, Jaeger, Zipkin.

  • Instrumenting Applications for Tracing.

  • Deploying and Configuring a Tracing Backend (ví dụ: Jaeger) in Kubernetes.

  • Mini Project:

    1. Triển khai EFK stack trên cluster Kubernetes.

    2. Cấu hình Fluentd để thu thập logs từ các containers.

    3. Instrument một ứng dụng đơn giản với OpenTelemetry và triển khai Jaeger để xem traces.

Ngày 15: Kubernetes Operators

Buổi sáng:

  • Building Kubernetes Operators: Using Operator SDK hoặc Kubebuilder, defining Custom Resource Definitions (CRDs), writing Controller logic, reconciliation loops.

  • Testing Kubernetes Operators.

Buổi chiều:

  • Advanced Operator Patterns: Webhooks (Validating, Mutating), Finalizers.

  • Packaging and Deploying Operators with OLM (Operator Lifecycle Manager).

  • Managing Stateful Applications with Operators in Production.

  • Mini Project:

    1. Bắt đầu xây dựng một Operator đơn giản cho một ứng dụng stateless.

    2. Triển khai một Operator phức tạp từ Operator Hub (ví dụ: Prometheus Operator) và quan sát cách nó quản lý ứng dụng.

    3. Tìm hiểu về các best practices cho việc viết Operators production-ready.

Tuần 4: Kubernetes Production Readiness và Advanced Topics

Ngày 16: Kubernetes Resource Management và Autoscaling

Buổi sáng:

  • Resource Management: CPU Manager, Memory Manager, Topology Manager configuration và use cases.

  • Vertical Pod Autoscaler (VPA): Tự động điều chỉnh resource requests và limits cho Pods.

Buổi chiều:

  • Horizontal Pod Autoscaler (HPA): Custom metrics, external metrics, scaling policies.

  • Cluster Autoscaler: Tự động điều chỉnh kích thước cluster dựa trên nhu cầu tài nguyên.

  • Resource Quotas và Limit Ranges.

  • Mini Project:

    1. Triển khai HPA và VPA cho một ứng dụng.

    2. Cấu hình Cluster Autoscaler trên một cluster cloud (nếu có).

    3. Thiết lập Resource Quotas và Limit Ranges cho một Namespace.

Ngày 17: Kubernetes Multi-Tenancy và Governance

Buổi sáng:

  • Multi-Tenancy in Kubernetes:

    • Multi-Tenancy in Kubernetes: Namespace isolation, Resource Quotas, Network Policies, RBAC.

    • Virtual Clusters (vClusters) và Namespace as a Service.

      • Namespace isolation (Network Policies, Resource Quotas, RBAC).

      • Virtual Clusters (vClusters) và Namespace as a Service.

      • Multi-tenancy patterns và best practices.

Buổi chiều:

  • Kubernetes Governance:

    • Kubernetes Governance: Policy enforcement (OPA/Gatekeeper), Cost management, Compliance.

    • Auditing và Logging cho Multi-Tenant Clusters.

      • Policy enforcement (OPA/Gatekeeper): Ngôn ngữ Rego, các loại policy, tích hợp vào CI/CD.

      • Cost management: Theo dõi và phân bổ chi phí trong multi-tenant clusters, các công cụ quản lý chi phí.

      • Compliance: Các tiêu chuẩn và quy định (PCI DSS, HIPAA, GDPR) và cách Kubernetes hỗ trợ tuân thủ.

      • Auditing và Logging cho Multi-Tenant Clusters: Các consider về bảo mật và performance.

  • Mini Project:

    1. Thiết lập một môi trường Kubernetes multi-tenant

    2. Triển khai Open Policy Agent (OPA) và Gatekeeper trên cluster Kubernetes để thực thi các policy tùy chỉnh (ví dụ: chỉ cho phép các image từ một registry cụ thể).

    3. Tìm hiểu về một công cụ quản lý chi phí Kubernetes (ví dụ: Kubecost) và cách nó giúp theo dõi và phân bổ chi phí sử dụng tài nguyên.

    4. Thiết lập một quy trình auditing để theo dõi các hoạt động quan trọng trong một multi-tenant cluster.

Ngày 18: Kubernetes High Availability và Disaster Recovery

Buổi sáng:

  • Kubernetes Control Plane High Availability:

    • Multi-master architecture: etcd quorum, API Server load balancing.

    • Certificate management và rotation.

    • Backup và restore strategies cho etcd.

Buổi chiều:

  • Kubernetes Worker Node High Availability:

    • Node failure detection và replacement.

    • Pod disruption budgets (PDBs).

    • Cluster autoscaling.

    • Disaster Recovery cho Kubernetes:

      • Backup và restore toàn bộ cluster (ví dụ: Velero).

      • Các chiến lược DR khác (active-active, active-passive).

  • Mini Project:

    1. Mô phỏng một node failure trong cluster lab và quan sát cách Kubernetes tự động thay thế các Pods bị ảnh hưởng.

    2. Triển khai Velero để backup và restore một namespace cụ thể.

    3. Tìm hiểu về các consider khi thiết kế một chiến lược DR cho một ứng dụng stateful chạy trên Kubernetes.

Ngày 19: Kubernetes Performance Optimization

Buổi sáng:

  • Kubernetes Scheduling Performance:

    • Scheduler profiling và tuning.

    • Pod affinity, anti-affinity, node affinity, taints và tolerations.

    • Resource requests và limits chính xác.

    • Network performance tuning:

      • CNI plugin tuning.

      • kube-proxy tuning.

      • Service mesh overhead.

Buổi chiều:

  • Storage performance tuning:

    • CSI driver tuning.

    • Volume performance characteristics.

    • Application performance tuning:

    • Code optimization.

    • Container image optimization.

    • JVM tuning (nếu cần).

    • Profiling và benchmarking các components Kubernetes.

  • Mini Project:

    1. Thực hiện một benchmark đơn giản để so sánh hiệu suất của các CNI plugins khác nhau trong một workload cụ thể.

    2. Sử dụng profiling tools để xác định các bottlenecks trong một ứng dụng chạy trên Kubernetes.

    3. Tìm hiểu về các best practices để tối ưu hóa hiệu suất của các ứng dụng Java chạy trong containers trên Kubernetes.

Ngày 20: Kubernetes in the Cloud (AWS EKS, Azure AKS, GCP GKE)

Buổi sáng:

  • Kubernetes as a Service:

    • Tổng quan về EKS, AKS, GKE.

    • So sánh các dịch vụ Kubernetes được quản lý này về kiến trúc, tính năng, và pricing.

    • Best practices cho việc sử dụng Kubernetes trên cloud.

Buổi chiều:

  • Cloud Provider Integrations:

    • Load balancing.

    • Storage.

    • IAM.

    • Networking.

    • Quản lý và vận hành Kubernetes trên cloud:

      • Autoscaling.

      • Monitoring và logging.

      • Security.

      • Cost optimization.

  • Mini Project:

    1. Tìm hiểu về cách các cloud providers tích hợp Kubernetes với các dịch vụ load balancing của họ.

    2. So sánh các tùy chọn storage được cung cấp bởi các cloud providers cho Kubernetes Persistent Volumes.

    3. Tìm hiểu về các best practices để tối ưu hóa chi phí khi chạy Kubernetes trên cloud.

Ngày 21-30: Project và Thực hành

Trong 10 ngày cuối, bạn sẽ tập trung vào một hoặc hai dự án thực tế để củng cố kiến thức và kỹ năng đã học. Các dự án này nên đủ phức tạp để bạn có thể áp dụng nhiều khái niệm và công cụ khác nhau.

  • Gợi ý các dự án:

    • 1. Triển khai một ứng dụng Microservices hoàn chỉnh trên Kubernetes: * Thiết kế kiến trúc microservices.

      • Dockerize các services.

      • Triển khai trên Kubernetes với các Deployment, Services, Ingress.

      • Cấu hình networking và storage.

      • Triển khai Service Mesh (nếu có thời gian).

      • Thiết lập monitoring và logging.

      • Tự động hóa triển khai bằng CI/CD pipeline.

    • 2. Xây dựng và quản lý một ứng dụng Stateful trên Kubernetes:

      • Triển khai một database cluster (ví dụ: PostgreSQL, Cassandra) sử dụng StatefulSets và Persistent Volumes.

      • Cấu hình backup và restore.

      • Triển khai một Operator để quản lý ứng dụng.

      • Xử lý các vấn đề về data persistence và consistency.

    • 3. Xây dựng một nền tảng Kubernetes Multi-Tenant:

      • Cấu hình Namespace isolation.

      • Triển khai RBAC và Network Policies để đảm bảo an toàn.

      • Thiết lập Resource Quotas và Limit Ranges.

      • Triển khai OPA/Gatekeeper để thực thi các policy.

      • Thiết lập monitoring và logging phù hợp cho multi-tenancy.

Xem tiếp phần 2 tại: https://yentrinh.hashnode.dev/syllabus-tham-khao-cho-devops-learning-checklist-part-2

Phần 3: https://yentrinh.hashnode.dev/syllabus-tham-khao-cho-devops-learning-checklist-part-3

More from this blog

Learn DevOps

289 posts