Đi tới nội dung

DevOps / Platform Engineer

Xây hạ tầng, pipeline và nền tảng để team ship nhanh, chạy ổn định, an toàn

Lộ trình đi từ Linux, mạng và Git đến container, CI/CD, cloud, IaC, Kubernetes, observability, bảo mật chuỗi cung ứng và platform engineering, có thêm phần vận hành workload AI. Dành cho developer muốn hiểu sâu phần hạ tầng phía sau code của mình, hoặc người muốn chuyển hẳn sang vai trò DevOps, SRE hay Platform Engineer.

Bắt đầu từ chặng 01
chặng
10chặng
chủ đề
56chủ đề
tuần, học part-time
~42tuần, học part-time
  • Nền tảng
  • Cốt lõi
  • Nâng cao
  • LinuxLinux
  • DockerDocker
  • GitHubGitHub Actions
  • KubernetesKubernetes
  • TerraformOpenTofu/Terraform
  • AWS
  • OpenTelemetry
  • Argo CD

Góc nhìn của mình

Mình là Frontend Developer, không phải DevOps chuyên nghiệp. Những gì mình biết về mảng này đến từ việc tự dựng CI, viết Dockerfile và cấu hình deploy lên Vercel cho monorepo Bun + Turborepo của blog này, cộng với thời gian làm cùng các anh chị DevOps trong team khi debug pipeline hay sự cố môi trường. Mỗi lần ngồi cạnh họ mình lại thấy phần mình chạm tới chỉ là lớp ngoài cùng. Lộ trình này là con đường mình sẽ đi nếu bắt đầu vai trò DevOps / Platform Engineer từ hôm nay, tổng hợp từ tài liệu chính thức, những gì mình quan sát được và các thay đổi lớn của ngành tính đến cuối 2026.

Điều mình ước biết sớm hơn

  • Lúc mới tập viết pipeline mình hay copy YAML từ đâu đó cho chạy được là xong. Điều mình ước biết sớm hơn là hiểu Linux, process, network và DNS thì mới debug được khi pipeline hay container chết một cách khó hiểu.
  • Thứ gì làm bằng tay trên console cloud thì sớm muộn cũng bị quên hoặc lệch giữa các môi trường. Đưa mọi thứ vào code và review như code ứng dụng giúp mình đỡ sợ mỗi lần phải thay đổi.
  • Observability không phải là dựng dashboard cho đẹp. Câu hỏi đúng là người dùng đang gặp gì, và SLO giúp cả team trả lời câu đó bằng con số thay vì cảm giác.
  • Làm platform là làm sản phẩm cho developer khác. Nhìn từ phía developer, mình chỉ dùng thứ gì đơn giản hơn tự làm, nên golden path phải thật sự dễ đi chứ không chỉ là quy định.
Đã qua 0/10 chặng

Nền tảng01–03

  1. 01Chặng 01, 5 tuầnLinux, shell và mạng căn bảnTự tin thao tác trên server Linux, viết shell script an toàn và giải thích được một request đi từ DNS, TLS đến load balancer như thế nào.
    Mình từng nghĩ phần này hơi khô và muốn nhảy thẳng vào Kubernetes. Nhưng hầu hết lỗi khó chịu nhất trong container hay CI đều quy về permission, process, DNS hoặc certificate, nên nền này đáng bỏ thời gian.

    Kiến thức cần nắm

    Process, file system và permission
    Hiểu process, signal (SIGTERM, SIGKILL), file descriptor, user/group, chmod/chown và capability. Biết cách xem tài nguyên bằng ps, top, ss, lsof, df, du và đọc log hệ thống qua journalctl. Đây chính là những thứ container dùng lại qua namespace và cgroup.
    systemd và quản lý service
    Viết unit file, hiểu restart policy, dependency giữa các unit và cách systemd giới hạn tài nguyên bằng cgroup. Biết đọc trạng thái với systemctl status và debug service không lên bằng journalctl -u.
    Shell scripting an toàn
    Dùng set -euo pipefail, quote biến đúng cách, trap để dọn dẹp và kiểm tra script bằng ShellCheck. Biết lúc nào nên dừng Bash và chuyển sang Python hay Go khi logic bắt đầu phức tạp.
    DNS và HTTP
    Hiểu record A, AAAA, CNAME, TXT, MX, TTL và quá trình resolve, dùng dig để debug. Nắm HTTP/1.1, HTTP/2, HTTP/3 khác nhau ở đâu, cùng các header liên quan đến cache, proxy và CORS.
    TLS và certificate
    Hiểu TLS handshake, chuỗi certificate, SNI, mTLS và vòng đời certificate với ACME (Let's Encrypt). Dùng openssl s_client để kiểm tra certificate hết hạn hay sai chain, lỗi rất hay gặp khi deploy.
    Load balancing và reverse proxy
    Phân biệt load balancer tầng 4 và tầng 7, thuật toán round robin, least connections, health check và connection draining. Thực hành với Nginx, HAProxy hoặc Caddy để thấy timeout, keep-alive và header X-Forwarded-* ảnh hưởng thế nào.

    Nên làm

    • Dùng SSH key thay cho password và tắt đăng nhập root trực tiếp trên mọi server.
    • Chạy ShellCheck cho mọi script trước khi đưa vào repo hay pipeline.
    • Khi debug mạng, đi từng tầng: DNS, kết nối TCP, TLS rồi mới đến HTTP.
    • Ghi lại các lệnh debug hay dùng thành runbook ngắn cho chính mình.

    Dễ sai

    • Chạy mọi thứ bằng root hoặc chmod 777 cho nhanh rồi quên sửa lại.
    • Đổi DNS mà không để ý TTL, rồi ngạc nhiên vì một số người dùng vẫn vào server cũ.
    • Viết script dài hàng trăm dòng Bash không có xử lý lỗi, chạy giữa chừng thì hỏng mà không ai biết.

    Project chốt chặng: Tự dựng web server trên một VPS

    Thuê một VPS nhỏ, cấu hình user không phải root, SSH key, firewall và chạy một app qua Caddy hoặc Nginx với HTTPS từ Let's Encrypt. Đạt yêu cầu khi domain trỏ đúng, certificate tự gia hạn, app chạy bằng systemd và tự khởi động lại khi crash.

    Kiểm tra nhanh

    Đã trả lời 0/4 · đúng 0

    Trả lời đúng ít nhất 3/4 câu để đánh dấu đã qua chặng này.

    1. Câu 1/4Cơ bảnKhi deploy, orchestrator gửi SIGTERM rồi 30 giây sau gửi SIGKILL. Vì sao app nên xử lý SIGTERM?
    2. Câu 2/4Cơ bảnMột script chạy curl -sf "$URL" | jq .version > version.txt và vẫn chạy tiếp dù curl lỗi. Điều gì khiến lỗi đó dừng script?
    3. Câu 3/4Cơ bảnBạn đã trỏ A record sang server mới, nhưng vài người dùng vẫn vào server cũ suốt nhiều giờ. Vì sao?
    4. Câu 4/4Cơ bảnNgay sau một lần deploy, người dùng báo không truy cập được site. Thứ tự debug hiệu quả nhất là gì?
  2. 02Chặng 02, 2 tuầnGit workflow và trunk-based developmentLàm việc với Git ở mức nâng cao và hiểu vì sao trunk-based development là nền tảng của CI/CD.
    Hồi đầu mình quen dùng branch feature sống cả tuần, đến lúc merge thì conflict khắp nơi. Từ khi chia nhỏ PR và merge sớm, việc release nhẹ nhàng hơn hẳn.

    Kiến thức cần nắm

    Mô hình dữ liệu của Git
    Hiểu commit, tree, blob, ref và HEAD để không còn sợ rebase, reset hay reflog. Biết khi nào dùng merge, khi nào rebase và cách khôi phục commit đã mất bằng reflog.
    Trunk-based development
    Mọi người merge vào main thường xuyên qua branch ngắn ngày, main luôn ở trạng thái deploy được. So sánh với GitFlow và hiểu vì sao các team có tần suất deploy cao thường chọn trunk-based.
    Feature flag
    Tách deploy khỏi release bằng feature flag để merge code chưa hoàn thiện mà không ảnh hưởng người dùng. Tìm hiểu OpenFeature như chuẩn API trung lập và luôn có kế hoạch xoá flag cũ.
    Branch protection và code review
    Cấu hình rulesets hoặc branch protection, bắt buộc status check, CODEOWNERS và signed commit. Dùng merge queue khi repo có nhiều người merge cùng lúc để main không bị vỡ.
    Conventional Commits và versioning
    Viết commit message theo Conventional Commits để tự động sinh changelog và tăng version theo SemVer với các công cụ như release-please hoặc Changesets trong monorepo.

    Nên làm

    • Giữ PR nhỏ, tập trung vào một thay đổi và merge trong vòng một đến hai ngày.
    • Bắt buộc CI xanh trước khi merge vào main.
    • Dùng feature flag cho tính năng dở dang thay vì giữ branch dài.
    • Không commit secret, kể cả trong branch tạm, vì lịch sử Git rất khó xoá sạch.

    Dễ sai

    • Force push lên branch dùng chung và làm mất commit của đồng đội.
    • Để feature flag tồn tại mãi, biến code thành mê cung if/else.

    Project chốt chặng: Thiết lập quy trình trunk-based cho một repo

    Cấu hình một repo với ruleset bảo vệ main, CODEOWNERS, status check bắt buộc và tự động sinh changelog từ Conventional Commits. Đạt yêu cầu khi không thể push thẳng lên main và mỗi lần merge tạo được release note đúng.

    Tài liệu

    • Git
    • Trunk-based
    • Feature flags

    Kiểm tra nhanh

    Đã trả lời 0/4 · đúng 0

    Trả lời đúng ít nhất 3/4 câu để đánh dấu đã qua chặng này.

    1. Câu 1/4Cơ bảnSau khi chạy git reset --hard HEAD~3 bạn nhận ra vẫn cần các commit đó. Làm sao lấy lại?
    2. Câu 2/4Cơ bảnVì sao team deploy nhiều lần mỗi ngày thường chọn trunk-based development thay vì GitFlow?
    3. Câu 3/4Cơ bảnMột tính năng cần ba tuần để làm, nhưng team muốn merge vào main mỗi ngày. Cách nào hợp với trunk-based development?
    4. Câu 4/4Cơ bảnHai PR đều pass CI khi chạy riêng, nhưng main bị vỡ khi cả hai được merge. Điều gì ngăn chuyện này?
  3. 03Chặng 03, 3 tuầnContainer với DockerĐóng gói ứng dụng thành image nhỏ, build nhanh, an toàn và có SBOM đi kèm.
    Dockerfile đầu tiên mình viết cho app Next.js nặng gần cả GB vì copy nguyên node_modules. Hiểu multi-stage build và layer cache là bước nhảy lớn nhất của mình ở phần này.

    Kiến thức cần nắm

    Container hoạt động thế nào
    Container là process được cô lập bằng namespace và giới hạn bằng cgroup, không phải máy ảo. Hiểu chuẩn OCI cho image và runtime giúp bạn thấy Docker, containerd, Podman chỉ là các cách khác nhau để chạy cùng một thứ.
    Multi-stage build và layer cache
    Tách stage build và stage runtime, sắp xếp lệnh để layer ít thay đổi nằm trên, dùng .dockerignore và cache mount của BuildKit. Kết quả là image nhỏ hơn và build lại nhanh hơn rất nhiều.
    Base image và bảo mật image
    Chọn base image tối giản như distroless, Alpine, Chainguard hoặc Docker Hardened Images (đã miễn phí và mã nguồn mở từ cuối 2025). Chạy bằng user không phải root, pin image theo digest và quét lỗ hổng bằng Trivy hoặc Grype.
    SBOM
    Sinh SBOM (định dạng SPDX hoặc CycloneDX) bằng Syft hoặc tuỳ chọn --sbom của docker buildx để biết image chứa những gì. SBOM là đầu vào cho việc quét lỗ hổng và ngày càng được yêu cầu trong các quy định về chuỗi cung ứng.
    Docker Compose cho môi trường local
    Dùng Compose để dựng app cùng database, cache và queue chỉ bằng một lệnh. Thêm healthcheck, depends_on với condition và volume để dữ liệu không mất khi restart.
    Build đa nền tảng
    Dùng docker buildx để build image cho cả linux/amd64 và linux/arm64, quan trọng khi máy dev là Apple Silicon còn server là x86 hoặc khi chạy trên instance ARM để tiết kiệm chi phí.

    Nên làm

    • Luôn dùng multi-stage build và chỉ copy artifact cần thiết vào image cuối.
    • Chạy container bằng user không phải root và bật read-only filesystem khi có thể.
    • Pin base image theo digest và để Renovate hoặc Dependabot cập nhật.
    • Không bao giờ đưa secret vào image qua ARG hay ENV, dùng BuildKit secret mount.

    Dễ sai

    • Dùng tag latest khiến môi trường khác nhau chạy những image khác nhau.
    • Coi việc quét lỗ hổng là xong việc mà không có quy trình xử lý các CVE tìm được.
    • Bỏ quên xử lý SIGTERM nên container bị kill cứng mỗi lần deploy.

    Project chốt chặng: Container hoá một app full-stack

    Viết Dockerfile multi-stage cho một app web và API, dựng thêm PostgreSQL bằng Compose. Đạt yêu cầu khi image runtime chạy non-root, nhỏ hơn đáng kể so với bản đầu tiên, có SBOM và không còn lỗ hổng mức critical theo Trivy.

    • DockerDocker
    • OCI
    • SBOM

    Kiểm tra nhanh

    Đã trả lời 0/4 · đúng 0

    Trả lời đúng ít nhất 3/4 câu để đánh dấu đã qua chặng này.

    1. Câu 1/4Cơ bảnVề mặt kỹ thuật, một container đang chạy là gì?
    2. Câu 2/4Cơ bảnVới một image Node, mỗi lần đổi code là cài lại toàn bộ dependency. Dockerfile copy cả repo rồi mới chạy npm ci. Cách sửa là gì?
    3. Câu 3/4Cơ bảnMột bản build Docker cần token npm riêng. Cách nào giữ token không lọt vào image và history của nó?
    4. Câu 4/4Cơ bảnVì sao deploy image theo tag latest là rủi ro?

Cốt lõi04–08

  1. 04Chặng 04, 4 tuầnCI/CD với GitHub ActionsXây pipeline build, test, đóng gói và deploy nhanh, có cache, an toàn và hỗ trợ blue-green hoặc canary.
    Đây là phần mình chạm nhiều nhất khi dựng CI cho monorepo của blog. Bài học lớn nhất là pipeline cũng là code production: chậm, flaky hay thiếu an toàn thì cả team chịu.

    Kiến thức cần nắm

    Workflow, job và runner
    Hiểu trigger, job chạy song song, needs, matrix, concurrency group và reusable workflow để tránh lặp YAML. Biết khi nào cần self-hosted runner hoặc runner tự scale trên Kubernetes bằng Actions Runner Controller.
    Cache và tăng tốc pipeline
    Dùng actions/cache hoặc cache có sẵn của setup action, cache layer Docker qua BuildKit, và remote cache của Turborepo hay Nx để chỉ build lại phần thay đổi. Đo thời gian từng bước trước khi tối ưu.
    Artifact và registry
    Phân biệt artifact tạm giữa các job với artifact release lâu dài. Đẩy image lên registry như GHCR hoặc ECR với tag là commit SHA, build một lần và promote cùng một image qua các môi trường.
    Bảo mật pipeline
    Dùng OIDC để lấy credential cloud ngắn hạn thay vì lưu access key, đặt permissions tối thiểu cho GITHUB_TOKEN và pin action theo commit SHA. Vụ tj-actions/changed-files bị chiếm quyền năm 2025 là ví dụ rõ về rủi ro khi dùng tag có thể bị ghi đè.
    Chiến lược deploy
    So sánh rolling update, blue-green và canary, cùng cách rollback của từng kiểu. Với Kubernetes có Argo Rollouts hoặc Flagger để chạy canary dựa trên metric, tự dừng khi tỉ lệ lỗi tăng.
    Environment và approval
    Dùng GitHub environments để tách secret theo môi trường, đặt required reviewer cho production và deployment protection rule. Ghi nhận thông tin deploy để đo được các chỉ số DORA như deployment frequency và change failure rate.

    Nên làm

    • Build artifact một lần và promote cùng artifact đó qua staging lên production.
    • Đặt permissions mặc định là read và chỉ mở quyền cần thiết cho từng job.
    • Dùng OIDC thay cho long-lived cloud key trong secrets.
    • Giữ pipeline của PR dưới khoảng mười phút để không ai muốn bỏ qua nó.

    Dễ sai

    • Chạy workflow pull_request_target với code từ fork, mở đường cho secret bị lộ.
    • Rebuild image riêng cho từng môi trường nên thứ được test không phải thứ được deploy.
    • Test flaky bị retry cho qua thay vì sửa, lâu dần không ai tin pipeline nữa.

    Project chốt chặng: Pipeline hoàn chỉnh cho monorepo

    Xây workflow chạy lint, test, build có cache cho một monorepo, build image tag theo SHA và deploy lên staging tự động, lên production cần approval. Đạt yêu cầu khi pipeline dùng OIDC, action được pin theo SHA, lần chạy thứ hai nhanh hơn rõ rệt nhờ cache và có cách rollback trong một bước.

    Kiểm tra nhanh

    Đã trả lời 0/4 · đúng 0

    Trả lời đúng ít nhất 3/4 câu để đánh dấu đã qua chặng này.

    1. Câu 1/4Trung cấpVì sao nên build image một lần rồi promote đúng image đó từ staging lên production?
    2. Câu 2/4Trung cấpMột workflow GitHub Actions deploy lên AWS bằng access key lưu trong repository secrets. Cải tiến được khuyến nghị là gì?
    3. Câu 3/4Trung cấpVì sao nên pin action bên thứ ba theo full commit SHA thay vì tag như @v4?
    4. Câu 4/4Trung cấpMột workflow kích hoạt bằng pull_request_target checkout code PR từ fork rồi chạy npm test. Rủi ro là gì?
  2. 05Chặng 05, 5 tuầnCloud căn bản trên AWSThiết kế được một hệ thống cơ bản trên một cloud lớn với IAM chặt chẽ, mạng hợp lý, dùng managed service và kiểm soát chi phí.
    Mình chọn AWS làm ví dụ vì phổ biến nhất, nhưng khái niệm chuyển sang GCP hay Azure khá dễ. Điều mình thấy các anh chị DevOps quan tâm nhất không phải biết nhiều service, mà là IAM, network và hoá đơn cuối tháng.

    Kiến thức cần nắm

    IAM và least privilege
    Hiểu user, role, policy, trust policy và cách đánh giá quyền khi có nhiều policy chồng nhau. Ưu tiên role với credential ngắn hạn, IAM Identity Center cho người dùng và EKS Pod Identity hoặc IRSA cho workload.
    Tổ chức account
    Dùng AWS Organizations với nhiều account tách theo môi trường hoặc team, áp guardrail bằng Service Control Policy. Một account cho mọi thứ khiến blast radius và việc phân bổ chi phí đều khó.
    VPC và mạng
    Thiết kế subnet public và private qua nhiều Availability Zone, hiểu route table, NAT gateway, security group, VPC endpoint và PrivateLink. NAT gateway và data transfer giữa AZ là khoản chi phí hay bị bỏ qua.
    Compute và managed service
    So sánh EC2, ECS Fargate, Lambda và EKS theo mức kiểm soát và chi phí vận hành. Ưu tiên managed service như RDS, ElastiCache, SQS, S3 để team tập trung vào sản phẩm thay vì vá database.
    FinOps và chi phí
    Gắn tag bắt buộc để phân bổ chi phí, đặt budget và cảnh báo, dùng Savings Plans, Spot và instance ARM (Graviton) cho workload phù hợp. FinOps Framework giúp biến chi phí thành trách nhiệm chung của engineering chứ không chỉ của finance.

    Nên làm

    • Bật MFA, tắt access key của root account và không dùng root cho việc hằng ngày.
    • Đặt database và service nội bộ trong private subnet, chỉ mở qua load balancer.
    • Gắn tag owner, environment, cost-center cho mọi resource ngay từ đầu.
    • Đặt budget alert trước khi tạo resource đầu tiên.

    Dễ sai

    • Gán AdministratorAccess cho mọi thứ vì không có thời gian viết policy đúng.
    • Để lại resource thử nghiệm chạy quên tắt, cuối tháng nhận hoá đơn bất ngờ.
    • Đặt mọi thứ vào một Availability Zone rồi gọi đó là production.

    Project chốt chặng: Deploy app lên AWS đúng chuẩn

    Dựng VPC hai AZ, chạy container app trên ECS Fargate sau Application Load Balancer, database trên RDS trong private subnet và secret trong Secrets Manager. Đạt yêu cầu khi app chỉ truy cập được qua HTTPS, không có credential tĩnh, mọi resource có tag và có budget alert hoạt động.

    Kiểm tra nhanh

    Đã trả lời 0/4 · đúng 0

    Trả lời đúng ít nhất 3/4 câu để đánh dấu đã qua chặng này.

    1. Câu 1/4Trung cấpMột Lambda function chỉ đọc object từ một S3 bucket. Thiết lập IAM nào tuân theo least privilege?
    2. Câu 2/4Trung cấpVì sao đặt database RDS trong private subnet phía sau tầng ứng dụng?
    3. Câu 3/4Trung cấpHóa đơn cho thấy phí NAT gateway cao do các instance trong private subnet tải file lớn từ S3 cùng region. Cách sửa nào đúng?
    4. Câu 4/4Trung cấpVì sao chạy production trong một Availability Zone duy nhất là vấn đề?
  3. 06Chặng 06, 4 tuầnInfrastructure as CodeQuản lý toàn bộ hạ tầng bằng code có review, có test, có policy và có pipeline riêng.
    Lần đầu xem một đồng nghiệp chạy plan và đọc diff hạ tầng như đọc diff code, mình mới hiểu vì sao họ không bao giờ sửa tay trên console.

    Kiến thức cần nắm

    Terraform và OpenTofu
    Nắm provider, resource, data source, variable, output và vòng đời plan/apply. OpenTofu là bản fork mã nguồn mở dưới Linux Foundation sau khi Terraform đổi sang giấy phép BSL, cú pháp gần như giống nhau và có thêm tính năng như mã hoá state.
    State và môi trường
    Lưu state ở remote backend có locking như S3, tách state theo môi trường và theo vùng ảnh hưởng để một lần apply không động vào mọi thứ. Biết dùng import, moved block và phát hiện drift.
    Module và cấu trúc repo
    Viết module nhỏ, có version, input rõ ràng và tái sử dụng được. Dùng Terragrunt hoặc cấu trúc thư mục theo môi trường để tránh copy-paste khi số môi trường tăng.
    Pulumi và IaC bằng ngôn ngữ lập trình
    Pulumi cho phép viết hạ tầng bằng TypeScript, Python hay Go, hợp với team đã quen code và muốn dùng vòng lặp, kiểu dữ liệu, test thông thường. Đánh đổi là dễ viết logic quá phức tạp khó review.
    Policy as code và kiểm tra
    Chặn cấu hình sai trước khi apply bằng OPA/Conftest, Checkov hoặc Trivy config scan, ví dụ S3 bucket public hay security group mở 0.0.0.0/0. Chạy plan trong PR để reviewer thấy chính xác thứ sẽ thay đổi.

    Nên làm

    • Mọi thay đổi hạ tầng đi qua PR, có plan đính kèm và được review.
    • Pin version của provider và module, cập nhật có chủ đích.
    • Chia state nhỏ theo service và môi trường để giảm blast radius.
    • Chạy kiểm tra drift định kỳ và xử lý ngay khi phát hiện.

    Dễ sai

    • Lưu state local hoặc commit file state chứa secret lên Git.
    • Sửa tay trên console rồi lần apply sau ghi đè mất thay đổi.
    • Một module khổng lồ nhận hàng chục biến để làm mọi thứ.

    Project chốt chặng: Viết lại hạ tầng stage 05 bằng code

    Chuyển toàn bộ hạ tầng AWS ở stage trước sang OpenTofu hoặc Terraform với remote state, module tái sử dụng và hai môi trường staging, production. Đạt yêu cầu khi PR tự hiển thị plan, policy check chặn được một cấu hình sai cố ý và có thể dựng lại môi trường từ đầu chỉ bằng pipeline.

    Kiểm tra nhanh

    Đã trả lời 0/4 · đúng 0

    Trả lời đúng ít nhất 3/4 câu để đánh dấu đã qua chặng này.

    1. Câu 1/4Trung cấpVì sao lưu Terraform state trong remote backend có locking?
    2. Câu 2/4Trung cấpAi đó đổi một EC2 instance do Terraform quản lý từ t3.small sang t3.large trên console. Lần terraform apply tiếp theo sẽ ra sao?
    3. Câu 3/4Trung cấpVì sao nên chia Terraform state theo service và môi trường thay vì một state cho tất cả?
    4. Câu 4/4Trung cấpBạn muốn chặn pull request tạo ra S3 bucket đọc công khai. Bước kiểm tra nên chạy ở đâu?
  4. 07Chặng 07, 6 tuầnKubernetes và GitOpsVận hành ứng dụng trên Kubernetes với cấu hình đóng gói bằng Helm hoặc Kustomize, tự scale và deploy theo mô hình GitOps.
    Kubernetes là phần mình thấy dễ học sai thứ tự nhất. Hiểu Pod, Deployment, Service và cách controller đưa trạng thái thực về trạng thái mong muốn trước, rồi mới đến Helm, service mesh hay operator.

    Kiến thức cần nắm

    Object cốt lõi
    Nắm Pod, Deployment, StatefulSet, Job, Service, ConfigMap, Secret, Namespace và mô hình reconcile của controller. Hiểu probe (liveness, readiness, startup), resource request/limit và PodDisruptionBudget để app chịu được rolling update và node bị drain.
    Networking và Gateway API
    Hiểu Service, DNS nội bộ, NetworkPolicy và CNI như Cilium. Gateway API là hướng chuẩn thay cho Ingress, đặc biệt khi Ingress-NGINX đã ngừng phát triển từ tháng 3/2026, công cụ ingress2gateway hỗ trợ chuyển đổi.
    Helm và Kustomize
    Helm đóng gói ứng dụng thành chart có template và values, hợp khi phân phối cho nhiều người dùng. Kustomize dùng overlay không template, hợp để vá cấu hình theo môi trường; nhiều team dùng cả hai cùng lúc.
    Autoscaling
    Dùng HPA theo CPU, memory hoặc custom metric, KEDA để scale theo sự kiện như độ dài queue, và Karpenter hoặc Cluster Autoscaler để scale node. Request đặt sai sẽ làm mọi cơ chế autoscaling hoạt động sai theo.
    GitOps với Argo CD hoặc Flux
    Git là nguồn sự thật, agent trong cluster liên tục đồng bộ và báo drift. Tách repo cấu hình khỏi repo code, để CI chỉ cập nhật image tag còn việc apply do Argo CD hoặc Flux đảm nhận.
    Bảo mật và multi-tenancy
    Áp RBAC tối thiểu, Pod Security Standards ở mức restricted và policy engine như Kyverno hoặc ValidatingAdmissionPolicy dùng CEL để chặn cấu hình nguy hiểm. Dùng External Secrets Operator để lấy secret từ secret manager thay vì commit Secret vào Git.

    Nên làm

    • Đặt request và limit cho mọi container dựa trên số đo thực tế.
    • Cấu hình readiness probe và graceful shutdown để rolling update không rơi request.
    • Không dùng kubectl apply tay lên production khi đã có GitOps.
    • Dùng managed Kubernetes (EKS, GKE, AKS) trừ khi có lý do rất rõ để tự vận hành control plane.

    Dễ sai

    • Đưa mọi thứ lên Kubernetes trong khi một ECS service hay serverless function là đủ.
    • Dùng liveness probe kiểm tra cả database, khiến cả cluster restart dây chuyền khi DB chậm.
    • Commit Secret dạng base64 vào Git và nghĩ rằng như vậy là đã mã hoá.

    Project chốt chặng: Cluster GitOps cho app nhiều service

    Dựng một cluster (kind cho local hoặc managed cluster), deploy app gồm frontend, API và worker bằng Helm hoặc Kustomize, quản lý bởi Argo CD. Đạt yêu cầu khi đổi image tag trong Git là app tự cập nhật, HPA hoặc KEDA scale được theo tải giả lập, có NetworkPolicy và secret lấy từ secret manager.

    • KubernetesKubernetes
    • Helm
    • Argo CD
    • GitOps

    Kiểm tra nhanh

    Đã trả lời 0/4 · đúng 0

    Trả lời đúng ít nhất 3/4 câu để đánh dấu đã qua chặng này.

    1. Câu 1/4Trung cấpVì sao liveness probe không nên kiểm database?
    2. Câu 2/4Trung cấpMột HPA đặt mục tiêu 70% CPU nhưng pod không bao giờ scale dù tải nặng. Container không khai báo CPU request. Vì sao?
    3. Câu 3/4Trung cấpKhi Argo CD quản lý cluster, CI nên phát hành phiên bản ứng dụng mới thế nào?
    4. Câu 4/4Trung cấpVì sao commit manifest Kubernetes Secret lên Git là không an toàn, dù giá trị trông như đã bị xáo trộn?
  5. 08Chặng 08, 5 tuầnObservability, SLO và on-callĐo được hệ thống qua metric, log, trace theo chuẩn OpenTelemetry, đặt SLO có error budget và xử lý sự cố có quy trình.
    Phía frontend mình quen nhìn lỗi qua console và Sentry. Làm cùng team DevOps mình mới thấy giá trị của trace xuyên suốt nhiều service và của việc thống nhất trước thế nào là hệ thống đang khoẻ.

    Kiến thức cần nắm

    OpenTelemetry
    Dùng OpenTelemetry SDK và auto-instrumentation để thu trace, metric, log theo một chuẩn trung lập, gửi qua OpenTelemetry Collector rồi mới tới backend. Collector cho phép lọc, sampling và đổi backend mà không sửa code; signal Profiles đang ở giai đoạn alpha nên chưa nên dựa vào cho production.
    Metric với Prometheus và Grafana
    Hiểu counter, gauge, histogram, label cardinality và viết PromQL cho các chỉ số RED (rate, errors, duration) và USE. Dùng Grafana để dựng dashboard và Alertmanager để định tuyến cảnh báo.
    Log và trace
    Log có cấu trúc dạng JSON, có trace_id để nối với trace. Hiểu context propagation qua W3C Trace Context, head sampling so với tail sampling, cùng các backend như Loki, Tempo hoặc Jaeger.
    SLI, SLO và error budget
    Chọn SLI phản ánh trải nghiệm người dùng như tỉ lệ request thành công hay latency p99, đặt SLO thực tế và dùng error budget để cân bằng giữa ship tính năng và ổn định. Cảnh báo theo burn rate nhiều cửa sổ thay vì theo ngưỡng CPU.
    Incident response và on-call
    Phân vai incident commander, người liên lạc và người xử lý, có mức độ nghiêm trọng rõ ràng và kênh trao đổi riêng. Mỗi cảnh báo gửi tới người on-call phải cần hành động và có runbook đi kèm.
    Postmortem không đổ lỗi
    Viết postmortem tập trung vào hệ thống và quy trình thay vì cá nhân, có timeline, nguyên nhân góp phần và action item có người chịu trách nhiệm. Theo dõi action item tới khi đóng, nếu không postmortem chỉ là tài liệu để đó.

    Nên làm

    • Alert theo triệu chứng người dùng thấy, không theo mọi chỉ số nội bộ.
    • Gắn trace_id vào log và response header để đi từ lỗi tới trace nhanh chóng.
    • Kiểm soát cardinality của label, không đưa user ID hay URL đầy đủ vào metric.
    • Viết runbook cho mọi alert trước khi bật nó cho on-call.

    Dễ sai

    • Quá nhiều alert vô nghĩa dẫn tới alert fatigue và bỏ lỡ sự cố thật.
    • Đặt SLO 100% hoặc nhiều số 9 mà không có lý do kinh doanh.
    • Thu thập mọi thứ không sampling rồi bất ngờ vì chi phí observability.

    Project chốt chặng: Observability cho cluster ở stage 07

    Instrument app bằng OpenTelemetry, dựng Collector, Prometheus, Grafana và một backend trace. Đặt hai SLO kèm alert theo burn rate, sau đó tự gây một sự cố, xử lý theo quy trình và viết postmortem. Đạt yêu cầu khi đi được từ alert tới trace và log liên quan trong vài cú click.

    Kiểm tra nhanh

    Đã trả lời 0/4 · đúng 0

    Trả lời đúng ít nhất 3/4 câu để đánh dấu đã qua chặng này.

    1. Câu 1/4Trung cấpVì sao nên cảnh báo theo burn rate của error budget trên nhiều cửa sổ thời gian thay vì ngưỡng CPU?
    2. Câu 2/4Trung cấpMột developer thêm label user_id vào counter http_requests_total. Điều gì xảy ra?
    3. Câu 3/4Trung cấpMột cảnh báo cho thấy lỗi 500 tăng vọt. Cách nhanh nhất để đi từ một dòng log lỗi tới lời gọi downstream bị chậm là gì?
    4. Câu 4/4Trung cấpĐiều gì làm một postmortem thực sự cải thiện độ tin cậy?

Nâng cao09–10

  1. 09Chặng 09, 3 tuầnDevSecOps và bảo mật chuỗi cung ứngChứng minh được artifact chạy trên production được build từ đâu, bởi pipeline nào, và quản lý secret không để lộ.
    Các vụ tấn công chuỗi cung ứng mấy năm gần đây cho thấy dependency và pipeline cũng là bề mặt tấn công. Đây là phần mình nghĩ developer nào cũng nên biết, không riêng DevOps.

    Kiến thức cần nắm

    SLSA
    SLSA là framework mô tả các mức đảm bảo cho quá trình build, từ có provenance tới build trên nền tảng được bảo vệ và khó giả mạo. Dùng nó như checklist để nâng dần mức an toàn của pipeline thay vì cố đạt mức cao nhất ngay.
    Ký và xác thực với Sigstore
    Dùng cosign ký image theo kiểu keyless qua OIDC, chữ ký được ghi vào transparency log Rekor. GitHub artifact attestations dùng Sigstore để sinh provenance, sau đó bạn có thể xác thực bằng gh attestation verify hoặc policy trong cluster.
    Admission policy khi deploy
    Chặn image chưa ký hoặc không có provenance ngay tại cluster bằng Kyverno hoặc Sigstore policy-controller. Đây là bước biến chữ ký từ thứ để trưng bày thành thứ thực sự bảo vệ production.
    Quản lý secret
    Dùng secret manager như AWS Secrets Manager, HashiCorp Vault hoặc OpenBao, ưu tiên credential động, ngắn hạn và xoay vòng tự động. Quét secret trong repo bằng GitHub secret scanning hoặc Gitleaks và có quy trình thu hồi khi bị lộ.
    Bảo mật dependency và repo
    Dùng Renovate hoặc Dependabot để cập nhật đều đặn, SCA để phát hiện lỗ hổng, và OpenSSF Scorecard để đánh giá độ tin cậy của dự án mã nguồn mở bạn phụ thuộc. Kết hợp SAST trong PR nhưng điều chỉnh để không tạo quá nhiều cảnh báo giả.

    Nên làm

    • Ký mọi image release và xác thực chữ ký trước khi cho chạy trên production.
    • Sinh SBOM và provenance trong pipeline, lưu cùng artifact.
    • Dùng credential ngắn hạn qua OIDC hoặc secret động thay vì key tĩnh.
    • Xếp hạng lỗ hổng theo khả năng khai thác thực tế (EPSS, KEV) thay vì chỉ theo điểm CVSS.

    Dễ sai

    • Bật hàng loạt công cụ quét rồi để hàng nghìn cảnh báo không ai xử lý.
    • Ký image nhưng không bao giờ xác thực chữ ký ở bất kỳ đâu.
    • Xoá secret bị lộ khỏi Git mà quên thu hồi và đổi secret đó.

    Project chốt chặng: Pipeline có provenance và chính sách chặn

    Mở rộng pipeline ở stage 04 để sinh SBOM, ký image bằng cosign và tạo build provenance, đồng thời cấu hình cluster chỉ nhận image đã ký từ đúng repo. Đạt yêu cầu khi một image tự build ngoài pipeline bị cluster từ chối và repo đạt điểm OpenSSF Scorecard cao hơn lúc bắt đầu.

    Kiểm tra nhanh

    Đã trả lời 0/4 · đúng 0

    Trả lời đúng ít nhất 3/4 câu để đánh dấu đã qua chặng này.

    1. Câu 1/4Nâng caoTeam ký mọi image bằng cosign, nhưng trong cluster không có gì verify chữ ký. Việc này bảo vệ production được bao nhiêu?
    2. Câu 2/4Nâng caoMột AWS access key đã bị commit và push. Bạn đã xóa nó ở commit kế tiếp. Bạn còn phải làm gì?
    3. Câu 3/4Nâng caoMột lần scan tìm ra 2.000 CVE trên các image. Bạn nên ưu tiên xử lý thế nào?
    4. Câu 4/4Nâng caoĐâu là cách hợp lý để áp dụng SLSA cho các build pipeline?
  2. 10Chặng 10, 5 tuầnPlatform engineering và workload AIXây nền tảng nội bộ với golden path cho developer và vận hành được workload AI/LLM cùng các công cụ AIOps một cách có kiểm soát.
    Là người dùng của platform, mình thấy rõ khác biệt giữa một template tạo service chạy được ngay và một trang wiki dài mười bước. Với AI, mình chỉ mới tích hợp LLM ở tầng ứng dụng, nên phần hạ tầng này là thứ mình đang học cùng mọi người.

    Kiến thức cần nắm

    Internal developer platform
    Platform là tập hợp công cụ và API tự phục vụ giúp developer tạo service, môi trường, database mà không cần mở ticket. Coi platform như sản phẩm: có người dùng, roadmap, đo mức sử dụng và mức hài lòng, tham khảo mô hình trưởng thành của CNCF.
    Backstage và developer portal
    Backstage cung cấp software catalog, software template để scaffold service theo chuẩn và TechDocs. New Frontend System đã trở thành mặc định cho app mới, nên học theo hướng này nếu bắt đầu từ bây giờ; ngoài ra có Port hay Cortex nếu không muốn tự vận hành.
    Golden path và abstraction
    Golden path là con đường đã được trải sẵn: template có CI/CD, observability, bảo mật mặc định. Dùng Crossplane hoặc các controller tương tự để đưa hạ tầng vào API kiểu Kubernetes, và đo hiệu quả bằng DORA metrics cùng thời gian onboarding.
    Hạ tầng cho LLM và GPU
    Dynamic Resource Allocation (DRA) đã GA, cho phép khai báo và chia sẻ GPU linh hoạt hơn device plugin cũ. Phục vụ model bằng vLLM hoặc KServe, định tuyến theo KV cache và tải với Gateway API Inference Extension hoặc llm-d, scale theo độ dài queue thay vì CPU.
    Observability và chi phí cho AI
    Dùng GenAI semantic conventions của OpenTelemetry để theo dõi token, latency, model và lỗi của từng lời gọi LLM. Gắn chi phí token và GPU vào từng team hoặc tính năng, vì đây đang là khoản chi tăng nhanh nhất trong nhiều tổ chức.
    AIOps và agent vận hành
    Dùng LLM để tóm tắt alert, gợi ý nguyên nhân từ log và trace, hoặc viết nháp postmortem; công cụ cho agent truy cập hệ thống thường đi qua MCP server. Giữ con người duyệt mọi hành động thay đổi, cấp quyền read-only mặc định và ghi log đầy đủ những gì agent đã làm.

    Nên làm

    • Phỏng vấn developer và đo pain point trước khi xây bất kỳ thành phần platform nào.
    • Làm golden path tuỳ chọn nhưng đủ tốt để mọi người tự muốn dùng.
    • Bắt đầu với một thinnest viable platform rồi mở rộng theo nhu cầu thật.
    • Giới hạn quyền của AI agent theo least privilege và yêu cầu phê duyệt cho thao tác ghi.

    Dễ sai

    • Dựng Backstage đầy plugin nhưng catalog không ai cập nhật nên nhanh chóng lỗi thời.
    • Để GPU đắt tiền chạy không tải vì không có autoscaling hay chia sẻ tài nguyên.
    • Cho AI agent quyền ghi trên production mà không có audit log hay cơ chế rollback.

    Project chốt chặng: Golden path tạo service có sẵn AI gateway

    Dựng Backstage với một software template tạo service mới kèm repo, pipeline, manifest GitOps và dashboard observability. Thêm một service gọi LLM qua gateway có theo dõi token bằng OpenTelemetry. Đạt yêu cầu khi một developer tạo được service chạy trên staging trong dưới một giờ mà không cần hỏi ai.

    Kiểm tra nhanh

    Đã trả lời 0/4 · đúng 0

    Trả lời đúng ít nhất 3/4 câu để đánh dấu đã qua chặng này.

    1. Câu 1/4Nâng caoVì sao nên vận hành internal developer platform như một sản phẩm?
    2. Câu 2/4Nâng caoBạn ra mắt một service template có sẵn CI/CD và observability. Làm sao để các team dùng nó?
    3. Câu 3/4Nâng caoMột deployment vLLM autoscale theo CPU, nhưng latency tăng vọt khi GPU đã bão hòa mà CPU vẫn thấp. Tín hiệu nào nên dùng để scale?
    4. Câu 4/4Nâng caoMột agent AIOps truy cập hạ tầng qua các MCP server. Thiết lập mặc định an toàn là gì?

Những gì đang quan trọng lúc này và hướng đi trong vài năm tới.

Hiện tại

  • Kubernetes là nền tảng mặc định cho AI inference

    DRA đã GA, các driver GPU và TPU được đóng góp cho cộng đồng và các dự án như llm-d đưa định tuyến theo KV cache vào hệ sinh thái CNCF. DevOps ngày càng phải hiểu GPU scheduling và đặc thù của model serving.

  • Gateway API thay thế Ingress

    Ingress-NGINX đã ngừng phát triển từ tháng 3/2026 nên nhiều team đang chuyển sang Gateway API với các implementation như Envoy Gateway, Cilium hay NGINX Gateway Fabric. Đây là việc migration thực tế mà người mới có thể gặp ngay.

  • Bảo mật chuỗi cung ứng thành yêu cầu cơ bản

    SBOM, ký image, provenance và pin action theo SHA không còn là điểm cộng mà là kỳ vọng mặc định. Hardened base image miễn phí và artifact attestations có sẵn trên GitHub khiến rào cản để bắt đầu thấp hơn nhiều.

  • Platform engineering trưởng thành

    Các tổ chức chuyển từ dựng portal sang đo kết quả: thời gian onboarding, DORA metrics, mức hài lòng của developer. Platform được quản lý như sản phẩm với product manager riêng.

Sắp tới

  • Agent tham gia vận hành

    AI agent sẽ xử lý phần lặp lại như phân loại alert, điều tra ban đầu và mở PR sửa cấu hình. Chuẩn bị bằng cách làm tốt runbook, observability và phân quyền, vì agent chỉ tốt bằng dữ liệu và guardrail bạn cho nó.

  • Platform phục vụ cả người và agent

    Golden path và API tự phục vụ sẽ được gọi bởi coding agent nhiều không kém developer. Thiết kế API rõ ràng, có policy as code và audit log là cách để nền tảng của bạn an toàn khi số lượng thay đổi tự động tăng mạnh.

  • OpenTelemetry ở mọi tầng

    Profiles đang trên đường ổn định và GenAI conventions phổ biến dần, OpenTelemetry sẽ là lớp chung cho mọi tín hiệu kể cả từ LLM. Học sâu Collector và semantic conventions sẽ có giá trị lâu dài hơn học một vendor cụ thể.

  • FinOps cho GPU và token

    Chi phí AI sẽ buộc team hạ tầng phải đo và tối ưu ở mức từng request, từng model. Kỹ năng kết hợp observability với dữ liệu chi phí sẽ là điểm khác biệt lớn của DevOps trong vài năm tới.

Đi hết roadmap, bạn sẽ

  • Bạn có thể debug sự cố từ tầng Linux, DNS, TLS đến ứng dụng một cách có hệ thống.
  • Bạn có thể xây pipeline CI/CD có cache, bảo mật bằng OIDC và hỗ trợ canary hoặc blue-green.
  • Bạn có thể dựng hạ tầng cloud hoàn toàn bằng OpenTofu hoặc Terraform với policy as code.
  • Bạn có thể vận hành ứng dụng trên Kubernetes theo GitOps với autoscaling và bảo mật cơ bản.
  • Bạn có thể đặt SLO, xây observability bằng OpenTelemetry và dẫn dắt một incident đến postmortem.
  • Bạn có thể ký, xác thực artifact và chứng minh nguồn gốc của mọi thứ chạy trên production.
  • Bạn có thể thiết kế golden path và đưa workload AI lên nền tảng với chi phí và quyền hạn được kiểm soát.

Bài viết liên quan

Tất cả bài viết

Feature flag ở frontend: phân loại, đánh giá, rollout và dọn dẹp

Feature flag giúp tách deploy khỏi release, nhưng dùng sai thì thành nợ kỹ thuật và giao diện nhấp nháy. Bài này đi qua bốn loại flag, đánh giá flag ở server hay client, định nghĩa flag có kiểu bằng TypeScript, rollout dần, A/B test và quy trình dọn flag.

Hệ thống & kiến trúc8 phút

Câu hỏi phỏng vấn DevOps / Platform Engineer

Xem cả 26 câu

Các role khác

Roadmap

Frontend Engineer

Role chính của mình

Xây giao diện web nhanh, dễ tiếp cận và bền vững khi sản phẩm lẫn team cùng lớn lên

10 chặng, 51 chủ đề, ~34 tuần

Thiết kế, xây dựng và vận hành API, dữ liệu và service phía sau mỗi sản phẩm

10 chặng, 52 chủ đề, ~37 tuần

Xây app iOS và Android mượt, chạy được khi mất mạng và phát hành an toàn

10 chặng, 50 chủ đề, ~34 tuần

Tìm rủi ro trước người dùng và biến chất lượng thành thứ cả team đo được

10 chặng, 50 chủ đề, ~36 tuần

Xây sản phẩm trên nền LLM: từ gọi API, RAG, agent đến eval và vận hành production

10 chặng, 58 chủ đề, ~31 tuần