Tổng hợp các lỗi kubernetes thường gặp

Anh em dùng Kubernetes chắc là thấy rất hữu ích vì nhiều ưu điểm của nó, nhưng mà những lúc báo lỗi thì cũng vất không kém.

Như Pod bị CrashLoopBackOff liên tục, rồi tự dưng mất kết nối mạng, hay rõ ràng đã cấp quyền RBAC rồi mà vẫn báo access denied. Mấy chuyện này gần như là cơm bữa với anh em làm DevOps =)))

845f8275-8748-4e32-8a1d-be7ac552db90

Sau một thời gian sử dụng K8s, mình có tổng hợp lại (cũng có tham khảo từ những nguồn khác nữa) khoảng 50 lỗi khá phổ biến mà các team hay dính phải. Trong này mình sẽ ghi rõ nguyên nhân và vài kinh nghiệm để anh em nào chưa biết.

Hi vọng nó sẽ giúp m.n tiết kiệm thời gian debug khi gặp phải, nếu hữu ích anh em có thể markdown lại khi nào cần thì thấy ngay nguyên nhân nhé.

1. Các issue về Pod và Container

  • CrashLoopBackOff: Lỗi kinh điển. Pod cứ restart liên tục, thường là do lỗi code trong app hoặc config sai khiến nó không thể khởi động thành công.
  • ImagePullBackOff: Kubernetes không thể pull image về, các bác nên check lại tên/tag, quyền truy cập registry, hoặc xem image có tồn tại không.
  • ErrImagePull: Lỗi xảy ra ngay khi K8s cố gắng pull image, nguyên nhân tương tự như ImagePullBackOff.
  • OOMKilled: Pod bị kill vì xài lố memory limit đã khai báo. Check ngay xem có memory leak không, hoặc liệu limit có đang bị set quá thấp.
  • ContainerCreating: Pod bị pending ở trạng thái này do các vấn đề về volume, network, hoặc pull image.
  • Completed Pods: Job đã chạy xong nhưng Pod không tự xóa, để nhiều sẽ làm rối cluster.
  • Terminating Pods: Pod kẹt ở trạng thái đang xóa, thường do bị một finalizer nào đó chặn hoặc do storage/network bên dưới không phản hồi.
  • PodEviction: Pod bị evict khỏi node, nguyên nhân chính là do node đó đang thiếu resource (CPU, memory, disk).

2. Các issue về Deployment và ReplicaSet

  • ReplicaSet Misalignment: Số replica thực tế không khớp với config, thường là do thiếu tài nguyên để tạo thêm Pod mới.
  • Failed Scheduling: Scheduler không tìm được node nào phù hợp cho Pod, thường là do node cạn tài nguyên hoặc Pod không khớp với các rule taints/affinity.
  • Rolling Update Issues: Service bị downtime khi update, hay gặp khi liveness/readiness probe cấu hình sai hoặc thiếu maxUnavailable/maxSurge.
  • HPA Issues: HPA không scale được do thiếu metrics (CPU/Memory chưa được expose) hoặc set resource requests/limits không đúng.

3. Các issue về Networking

  • DNS Resolution Failures: Pod không phân giải được tên service. Việc đầu tiên cần làm là kiểm tra lại CoreDNS.
  • Connection Refused: Lỗi kết nối, khả năng cao là do Network Policy đang chặn hoặc port trong service và pod không khớp nhau.
  • Service Not Reachable: Không gọi được Service, các bác nên check lại selector của service xem có đúng với label của pod không.
  • NetworkPolicy Blocking Traffic: Rule NetworkPolicy quá chặt, vô tình chặn luôn cả traffic hợp lệ.
  • Kube-proxy Issues: Khi mọi thứ khác đều đúng mà network vẫn lỗi thì có thể nằm ở kube-proxy trên các node.

4. Các issue về Storage

  • VolumeMount Failure: Pod không mount được volume, thường do lỗi quyền truy cập, sai đường dẫn, hoặc PV/PVC chưa ở trạng thái Bound.
  • PVC Pending: PVC cứ kẹt ở trạng thái Pending vì không tìm được PV nào phù hợp (khác StorageClass, size quá nhỏ) hoặc storage pool đã hết dung lượng.
  • Data Loss: Dữ liệu bị mất khi Pod reschedule, hay gặp khi cấu hình sai Reclaim Policy của PV hoặc dùng sai loại Volume cho ứng dụng stateful.

5. Các issue về Control Plane

  • API Server Unreachable: API Server không phản hồi, thường do quá tải, lỗi network, hoặc certificate hết hạn hoặc sai.
  • etcd Performance Degradation: Cluster etcd bị chậm hoặc lỗi, kéo theo toàn bộ cluster hoạt động ì ạch vì đây là “bộ não” của K8s.
  • Controller Manager Issues: Controller Manager lỗi khiến các resource (Deployment, Service…) không được tạo/update theo config mong muốn.
  • Scheduler Failures: Scheduler bị lỗi, làm cho các Pod mới không được gán lên node nào và cứ kẹt mãi ở trạng thái Pending.

6. Các issue về Authentication và Authorization

  • RBAC Denied Errors: Bị denied truy cập, 99% là do Role/ClusterRoleRoleBinding/ClusterRoleBinding bị thiếu hoặc cấu hình sai quyền.
  • Service Account Issues: Workload không gọi được API Server, thường do quên gán ServiceAccount cho Pod hoặc ServiceAccount đó không có đủ quyền.
  • Webhook Authentication Errors: Lỗi xác thực qua webhook, thường do K8s không kết nối được tới service webhook hoặc service đó trả về lỗi.

7. Các issue về Node

  • Node Not Ready: Node mất kết nối với control plane, thường do kubelet bị treo, node bị quá tải (disk/memory pressure), hoặc lỗi network.
  • DiskPressure hoặc MemoryPressure: Node bị quá tải disk hoặc memory, dẫn đến việc K8s tự động evict một số Pod đang chạy để giải phóng resource và giữ node ổn định.
  • Uncordoned Nodes: Node vẫn bị cordon sau khi maintain, làm cho scheduler bỏ qua nó và không gán Pod mới lên.
  • Kubelet Failures: Kubelet bị crash, sẽ rơi vào trạng thái NotReady và không quản lý được các Pod trên đó nữa.

8. Các issue về Ingress và Load Balancer

  • Ingress Not Routing: Traffic không vào được service, thường do thiếu Ingress Controller trong cluster hoặc rule trong Ingress bị cấu hình sai.
  • SSL/TLS Errors: Lỗi certificate khi truy cập HTTPS, thường do certificate trong Secret bị thiếu, hết hạn hoặc không được mount đúng cách.
  • LoadBalancer Not Created: Service type LoadBalancer không tạo ra được IP public, hay gặp do lỗi cấu hình phía cloud provider hoặc hết quota.
  • Backend Service Unhealthy: Pod backend không qua được health check, Ingress sẽ tự động coi như backend đó “unhealthy”, tạm thời không gửi traffic.

9. Các issue về Configuration

  • Environment Variables Missing: Pod crash vì do thiếu hoặc sai biến môi trường, check lại env trong file manifest.
  • Secret and ConfigMap Issues: App lỗi vì không đọc được config, thường doSecret/ConfigMap chưa được tạo hoặc chưa được mount đúng cách vào Pod.
  • Improper Resource Requests and Limits: Khai báo requests/limits không hợp lý, gây ra việc Pod bị OOMKilled (limit quá thấp) hoặc không được schedule (request quá cao).

10. Các issue về Logging và Monitoring

  • Log Aggregation Issues: Không thấy log trên hệ thống tập trung (Fluentd, Loki…), thường do agent thu thập log trên node bị lỗi hoặc sai config.
  • Metrics Missing: Không thấy metrics của Pod/Node, thường do metrics-server chưa được cài hoặc Prometheus không cào được target.
  • Application Debugging Issues: Thiếu log của application do cấu hình logging không đầy đủ.

11. Các issue về Nâng cấp và Bảo trì Cluster

  • Version Skew: Các thành phần của K8s (apiserver, kubelet,…) chạy lệch phiên bản với nhau sau khi nâng cấp, có thể gây ra lỗi không tương thích.
  • Downtime During Upgrade: Cấu hình workload sai gây downtime trong quá trình nâng cấp control plane hoặc node.
  • Custom CRD Breakages: CRD tự định nghĩa bị lỗi sau khi nâng cấp K8s, do các phiên bản API cũ không còn được hỗ trợ.

12. Các issue về Scaling và Performance

  • Node Resource Exhaustion: Các node trong cluster đồng loạt thiếu resources, dấu hiệu cho thấy cluster cần được scale up.
  • Cluster Autoscaler Failures: Cluster không tự động thêm node mới, thường do config sai phía cloud provider hoặc là bị max size.
  • Throttling in API Server: Lượng request quá lớn gây ra nghẽn ở API Server, làm chậm các hoạt động trong cluster.

13. Debug và Challenge Quan sát hệ thống

  • Lack of Metrics or Logs: Không có đủ thông tin giám sát khiến việc debug chẳng khác gì “thầy bói xem voi”.
  • Event Overwrites: Event của K8s bị overwrite rất nhanh, khiến các bác có thể bỏ lỡ thông tin quan trọng về nguyên nhân lỗi.
  • Misinterpreting Liveness/Readiness Probes: Cấu hình probe sai khiến Pod bị restart oan, trong khi thực tế ứng dụng vẫn đang khởi động hoặc xử lý tác vụ nặng.

Vài tips cá nhân

  • Luôn set Resource Requests và Limits: Cái này là bắt buộc. Nó giúp K8s điều phối tài nguyên tốt hơn và tránh việc một pod ăn sập cả node.
  • Audit cấu hình định kỳ: Thỉnh thoảng nên rà soát lại RBAC, Network Policies. Rất nhiều lỗi bảo mật và kết nối đến từ đây.
  • Xây dựng hệ thống monitoring và logging: Không có hai thứ này thì lúc debug chẳng khác gì mò kim đáy bể.
  • Lên plan upgrade kỹ càng: Luôn test kỹ ở môi trường staging trước khi đụng đến production.
  • Test workload kỹ lưỡng trước khi deploy: Đảm bảo config đã đúng và các probe liveness/readiness hoạt động như mong muốn, tránh các vụ restart “oan”.

Trên đây là một vài lỗi mình tổng hợp lại từ kinh nghiệm thực tế và một vài nguồn tham khảo. Ngần kia issue nghĩ mà làm demo từng issue cho anh em chắc cũng… đấy :))) Nhưng mà như trên thì anh em cũng đã biết nguyên nhân rồi phần nào đó dễ điều tra hơn.

Thông tin nổi bật

Báo cáo quan trọng

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận