Giao diện
⚔️ Challenge: Find the Bug (Module 2)
Chào mừng bạn đến với vòng phỏng vấn kỹ thuật tại HPN. Tôi là Lead Interviewer. Dưới đây là một file Deployment YAML mà Junior DevOps vừa gửi cho tôi để review trước khi deploy lên Production.
Nhiệm vụ của bạn: Tìm ra 3 LỖI CHÍ TỬ trong file này.
- Một lỗi khiến Deployment không thể hoạt động (Crash/Hệ thống từ chối).
- Một lỗi là thảm họa bảo mật/vận hành.
- Một lỗi gây rủi ro về độ ổn định (Stability).
💀 The Broken YAML
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: payment-service
spec:
replicas: 3
selector:
matchLabels:
app: payment-service # 👈 Nhìn kỹ chỗ này
template:
metadata:
labels:
app: payment-svc # 👈 ...và chỗ này
spec:
containers:
- name: payment
image: my-registry/payment-api:latest # 👈 Cái này ổn không?
ports:
- containerPort: 8080
# (Dev note: Em quên cấu hình resources, để sau nhé)🕵️♂️ Solution (Đáp án)
Bấm để xem phân tích của Senior Engineer
1. ❌ Fatal Error: Label Mismatch (Lỗi Chết Người)
Vị trí: spec.selector.matchLabels (payment-service) KHÁC VỚI template.metadata.labels (payment-svc).
Hậu quả: Deployment sẽ không bao giờ tìm thấy Pod mà nó vừa tạo ra.
- Deployment tạo ReplicaSet -> ReplicaSet tạo Pod với label
payment-svc. - Nhưng ReplicaSet lại được dặn dò là "Chỉ quản lý thằng nào tên
payment-service". - Kết quả: ReplicaSet thấy chưa có Pod nào đúng tên -> Tạo tiếp -> Tạo tiếp -> Infinite Loop (Vòng lặp vô tận) -> Cluster bị spam hàng nghìn Pod "mồ côi".
2. ❌ Production Risk: Using :latest Tag
Vị trí: image: ...:latest.
Hậu quả:
- Không biết phiên bản nào đang chạy: Hôm nay
latestlà v1, mai nó là v2 (có bug). - Không Rollback được: Cả bản cũ và mới đều tên là
latest. K8s sẽ bối rối. - Caching: Node có thể cache image cũ và không chịu pull image mới về.
👉 Fix: Luôn dùng version cụ thể (VD: :v1.2.0).
3. ❌ Stability Risk: Missing Requests/Limits
Vị trí: Thiếu block resources.
Hậu quả:
- Pod này được xếp hạng Best Effort (Hạng bét).
- Khi Node bị thiếu RAM, Pod này sẽ là kẻ đầu tiên bị bắn bỏ (Evicted/OOMKilled).
- Ngoài ra, nếu code bị lag, nó có thể ăn hết 100% CPU của Node, làm treo các Service khác (Noisy Neighbor).
👉 Fix: BẮT BUỘC định nghĩa requests và limits cho Memory và CPU. 👉 Fix: BẮT BUỘC định nghĩa requests và limits cho Memory và CPU.
👉 Next Module: Service Discovery & CoreDNS Magic