Các ưu tiên mang tính định hướng rõ ràng cho việc đóng gói container và xây dựng đường ống CI.
# Dockerfile và CI taste - Sử dụng quy trình dựng đa giai đoạn (multi-stage builds) và chỉ đưa các hiện vật thực thi (runtime artifacts) vào giai đoạn cuối cùng. Độ tin cậy: 0.95 - Ghim cố định ảnh cơ sở (base images) vào một thẻ phiên bản cụ thể, và ghim vào mã băm (digest) đối với môi trường sản xuất (production). Độ tin cậy: 0.90 - Ưu tiên các ảnh cuối cùng dạng rút gọn (slim) hoặc distroless hơn là ảnh hệ điều hành đầy đủ. Độ tin cậy: 0.85 - Chạy container dưới quyền người dùng không phải root (non-root user). Độ tin cậy: 0.95 - Sắp xếp thứ tự các lớp (layers) sao cho tệp khai báo thư viện phụ thuộc (dependency manifests) được sao chép và cài đặt trước mã nguồn. Độ tin cậy: 0.95 - Luôn duy trì tệp .dockerignore loại trừ node_modules, .git và các tệp biến môi trường cục bộ. Độ tin cậy: 0.95 - Thêm chỉ thị HEALTHCHECK hoặc cơ chế kiểm tra trạng thái sẵn sàng (readiness probe) tương đương. Độ tin cậy: 0.80 - Sử dụng tính năng gắn bộ nhớ đệm (cache mounts) của BuildKit cho bộ nhớ đệm của trình quản lý gói. Độ tin cậy: 0.80 - Tuyệt đối không nhúng cứng thông tin bí mật (secrets) vào trong ảnh; hãy truyền chúng vào lúc chạy (runtime) hoặc sử dụng build secrets. Độ tin cậy: 0.95 - Sử dụng CMD ở dạng thực thi (exec-form) để tiến trình nhận tín hiệu hệ thống một cách chính xác. Độ tin cậy: 0.90 - Quét ảnh bằng Trivy trong CI và đánh trượt (fail) nếu phát hiện lỗ hổng bảo mật nghiêm trọng (critical). Độ tin cậy: 0.80 - Lưu bộ nhớ đệm (cache) cho các thư viện phụ thuộc trong GitHub Actions dựa trên khóa là mã băm của tệp khóa (lockfile hash). Độ tin cậy: 0.85 - Chạy kiểm tra mã nguồn (lint), kiểm tra kiểu (type check) và kiểm thử (tests) thành các tác vụ (jobs) CI song song tách biệt. Độ tin cậy: 0.80 - Gắn thẻ (tag) ảnh bằng mã git SHA và tuyệt đối không dựa vào thẻ latest khi triển khai (deploy). Độ tin cậy: 0.90 - Giữ cho các luồng công việc (workflows) ngắn gọn và tách các bước lặp lại sang các luồng công việc tái sử dụng được (reusable workflows). Độ tin cậy: 0.70
Các quy ước mang tính định hướng rõ ràng để triển khai, bảo mật và vận hành các tải công việc (workloads) trên các cụm Kubernetes.
# Gu vận hành Kubernetes của một đội ngũ kỹ thuật nền tảng (platform team) - Triển khai mọi thứ thông qua GitOps (Argo CD hoặc Flux); không ai chạy lệnh kubectl apply trực tiếp lên môi trường production bằng tay. Độ tin cậy: 0.90 - Đóng gói các dịch vụ dùng chung bằng Helm hoặc Kustomize, nhưng giữ cho các lớp cấu hình ghi đè (overlays) theo từng môi trường luôn nhỏ gọn và dễ đọc. Độ tin cậy: 0.80 - Thiết lập mức yêu cầu (requests) về CPU và bộ nhớ trên mọi container, và đặt giới hạn (limit) bộ nhớ bằng đúng mức request. Độ tin cậy: 0.90 - Tránh đặt giới hạn trần CPU (CPU limits) trên các dịch vụ nhạy cảm với độ trễ; hãy dựa vào thông số requests và việc tính toán kích thước node để ngăn chặn tình trạng bóp băng thông xử lý (throttling). Độ tin cậy: 0.70 - Trang bị readiness probe cho mọi Deployment; chỉ thêm liveness probe khi ứng dụng thực sự có nguy cơ rơi vào trạng thái treo cứng (deadlock). Độ tin cậy: 0.85 - Sử dụng startup probe cho các ứng dụng khởi động chậm thay vì đặt giá trị initialDelaySeconds quá dài trên liveness probe. Độ tin cậy: 0.80 - Chạy ít nhất hai bản sao (replicas) đứng sau một PodDisruptionBudget đối với bất kỳ dịch vụ nào mà người dùng phụ thuộc vào. Độ tin cậy: 0.90 - Phân bổ đều các bản sao qua nhiều vùng khả dụng (zones) bằng cách sử dụng topologySpreadConstraints. Độ tin cậy: 0.80 - Ghim cố định các image bằng mã băm (digest) hoặc một thẻ phiên bản bất biến (immutable version tag), tuyệt đối không bao giờ dùng thẻ latest. Độ tin cậy: 0.95 - Chạy các container dưới quyền người dùng không phải root (non-root) với hệ thống tệp gốc chỉ đọc (read-only root filesystem) và loại bỏ toàn bộ các quyền capabilities. Độ tin cậy: 0.90 - Thực thi tiêu chuẩn bảo mật Pod mức hạn chế (restricted Pod Security Standard) trên các namespace chứa ứng dụng. Độ tin cậy: 0.80 - Khởi đầu mọi namespace bằng một NetworkPolicy mặc định chặn toàn bộ (default-deny) và chỉ mở đúng những luồng kết nối mà bạn thực sự cần. Độ tin cậy: 0.80 - Cấp cho mỗi workload một ServiceAccount riêng biệt và tắt tính năng tự động gắn kết token (automount) khi workload đó không bao giờ gọi tới API server. Độ tin cậy: 0.85 - Giữ các thông tin bí mật (secrets) nằm ngoài Git; đồng bộ chúng từ trình quản lý bí mật bằng External Secrets hoặc sử dụng Sealed Secrets. Độ tin cậy: 0.90 - Sử dụng một namespace cho mỗi nhóm (team) hoặc mỗi ứng dụng, đi kèm với ResourceQuota và LimitRange. Độ tin cậy: 0.80 - Áp dụng bộ nhãn tiêu chuẩn app.kubernetes.io cho mọi tài nguyên. Độ tin cậy: 0.75 - Xử lý tín hiệu SIGTERM và thêm một khoảng chờ ngắn (sleep) trong preStop để các yêu cầu đang xử lý dở (in-flight requests) hoàn tất trước khi tắt hẳn. Độ tin cậy: 0.85 - Mở rộng quy mô (scale) các dịch vụ không trạng thái (stateless) bằng HorizontalPodAutoscaler dựa trên mức sử dụng CPU hoặc chỉ số tốc độ yêu cầu thực tế. Độ tin cậy: 0.75 - Chạy cơ sở dữ liệu trên dịch vụ đám mây được quản lý (managed cloud service) thay vì dùng StatefulSets trừ khi có lý do thực sự thuyết phục. Độ tin cậy: 0.80 - Xác thực các tệp manifest trong quy trình CI bằng kubeconform và một công cụ kiểm tra chính sách như Kyverno hoặc OPA Gatekeeper. Độ tin cậy: 0.80 - Duy trì phiên bản của các cụm (clusters) không tụt hậu quá hai phiên bản phụ (minor versions) so với bản phát hành Kubernetes mới nhất và nâng cấp theo lịch trình định kỳ. Độ tin cậy: 0.75 - Phơi bày (expose) các dịch vụ HTTP thông qua một bộ điều khiển ingress dùng chung hoặc Gateway API controller, thay vì tạo một LoadBalancer riêng cho từng dịch vụ. Độ tin cậy: 0.75