5 Lỗi Phổ biến khi cài đặt Kubernetes và cách khắc phục

Kubernetes là nền tảng mạnh mẽ giúp quản lý và triển khai container trên quy mô lớn. Tuy nhiên, khi mới bắt đầu sử dụng hoặc trong quá trình vận hành thực tế, người dùng thường gặp phải nhiều lỗi khiến hệ thống không hoạt động như mong đợi. Dưới đây là 5 lỗi phổ biến nhất khi cài đặt Kubernetes và cách khắc phục hiệu quả.

5 Lỗi Phổ biến Khi cài đặt Kubernetes và cách khắc phục

CrashLoopBackOff

Mô tả:

Đây là một trong những lỗi thường gặp nhất khi triển khai ứng dụng trên Kubernetes. Pod khởi động nhưng liên tục bị crash và tự động khởi động lại nhiều lần, dẫn đến trạng thái

CrashLoopBackOff.

Nguyên nhân phổ biến bao gồm:

  • Lỗi trong ứng dụng (exception, lỗi logic).
  • Thiếu biến môi trường hoặc cấu hình sai.

Cách khắc phục:

  1. Sử dụng lệnh để kiểm tra logs lỗi.
kubectl logs <pod-name>
  • 2. Đảm bảo các biến môi trường và tham số cấu hình trong YAML đầy đủ và chính xác.
  • 3. Kiểm tra tình trạng các dịch vụ phụ trợ, đặc biệt là thời điểm khởi tạo.
  • 4. Sửa lỗi trong ứng dụng hoặc đảm bảo các dịch vụ phụ trợ (DB, API) hoạt động.

Lỗi khi cài đặt kubernetes

Pod không khởi chạy

Mô tả:
Khi triển khai một Pod mới nhưng nó không chuyển sang trạng thái Running, mà có thể bị kẹt ở trạng thái Pending, CrashLoopBackOff, hoặc ImagePullBackOff.

Nguyên nhân phổ biến:

  • Thiếu image hoặc image không tồn tại: Tên image sai, image không được đẩy lên registry hoặc registry không thể truy cập.
  • Sai cấu hình trong YAML: Cấu trúc tệp YAML sai, thiếu thông tin bắt buộc, hoặc khai báo sai định dạng.

Cách khắc phục:

  1. Kiểm tra trạng thái chi tiết của Pod. Sử dụng lệnh sau để xem chi tiết lỗi:
kubectl describe pod

Lệnh này giúp bạn kiểm tra sự kiện (events) gần đây và nguyên nhân tại sao Pod không khởi chạy, chẳng hạn như lỗi kéo image hoặc lỗi trong khởi tạo container.

  • 2. Đảm bảo rằng image được khai báo trong YAML tồn tại và đúng tên.
    • Nếu sử dụng image từ Docker Hub hoặc registry riêng, hãy kiểm tra:
    • Tên image có chính xác không (bao gồm cả tag như :latest, :v1.0)?
    • Registry có yêu cầu xác thực không? Nếu có, bạn cần tạo Secret để pull image.

Lệnh tham khảo:

kubectl get pod <pod-name> -o jsonpath="{.status.containerStatuses[*].state.waiting.reason}"

  • 3 Sửa lại file cấu hình YAML
  • Kiểm tra định dạng YAML bằng công cụ như YAML Lint.
  • Đảm bảo các trường như containers, image, name, ports, resources… được khai báo đúng thứ tự và thụt dòng chuẩn.

Ví dụ cấu hình đúng:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx:1.25
      ports:
        - containerPort: 80

Bài viết có liên quan 10 Cách bảo mật Kubernetes hiệu quả nhất để ngăn chặn tấn công

Service không truy cập được

Mô tả:
Trong quá trình triển khai ứng dụng, mặc dù Pod đã chạy ổn định nhưng người dùng không thể truy cập ứng dụng thông qua Service. Điều này thường khiến nhiều người nhầm lẫn rằng ứng dụng bị lỗi, trong khi vấn đề nằm ở cấu hình của Service hoặc sự kết nối giữa Service và Pod.

Nguyên nhân phổ biến:
Một số nguyên nhân thường gặp dẫn đến việc không thể truy cập được ứng dụng qua Service gồm:

  • Sai cấu hình port hoặc selector: Cổng khai báo trong Service không đúng với cổng mà container đang lắng nghe, hoặc selector không đúng khiến Service không tìm được Pod tương ứng để chuyển tiếp lưu lượng.
  • Pod chưa sẵn sàng hoặc chưa được gắn đúng label: Dù Pod đang chạy, nhưng nếu chưa sẵn sàng (not Ready) hoặc thiếu label tương ứng với selector trong Service thì Service cũng không thể định tuyến lưu lượng đến Pod đó.

Cách khắc phục:

  1. Kiểm tra trạng thái Service

Sử dụng các lệnh sau để xem chi tiết về Service và xác nhận có Endpoint nào được gán:

kubectl get svc kubectl describe svc <service-name>

Nếu trong phần mô tả không có Endpoints, tức là Service không tìm thấy Pod phù hợp để liên kết.

  • 2. Đảm bảo selector khớp với label của Pod

Kiểm tra lại phần selector trong cấu hình Service và so sánh với labels mà Pod đang sử dụng. Cần đảm bảo chúng hoàn toàn khớp nhau. Ví dụ:

selector:
app: my-app

Phải tương ứng với:

labels: app: my-app
  • 3. Kiểm tra cấu hình port mapping
    Đảm bảo rằng các trường port, targetPort trong Service và containerPort trong Pod được khai báo đúng. Một sai lệch nhỏ ở đây cũng có thể khiến Service không hoạt động như mong muốn. Ví dụ:
ports:
- port: 80
targetPort: 8080

Trong đó targetPort phải đúng với containerPort trong cấu hình container.

Bài viết liên quan: Managed Kubernetes: Bước đi mới cho điều phối container

Lỗi khi cài đặt K8S

Volume không mount được

Mô tả:

Khi khởi chạy Pod, bạn nhận được thông báo lỗi liên quan đến việc không thể gắn kết volume. Pod có thể bị kẹt ở trạng thái Pending, hoặc khởi động nhưng container bị lỗi và không thể truy cập vào dữ liệu lưu trữ. Đây là lỗi phổ biến khi làm việc với PersistentVolume (PV) và PersistentVolumeClaim (PVC) trong Kubernetes.

Nguyên nhân phổ biến:

  • PVC chưa được bind: Khi PVC không được liên kết (bind) với một PersistentVolume, Pod không thể sử dụng volume đó.
  • StorageClass không tồn tại hoặc sai cấu hình: Nếu PVC khai báo một StorageClass không đúng hoặc không tồn tại trong cụm Kubernetes, quá trình tạo volume sẽ thất bại, dẫn đến lỗi mount.

Cách khắc phục:

  1. Kiểm tra PVC

Sử dụng lệnh sau để kiểm tra trạng thái PVC:

kubectl get storageclass

Nếu trạng thái là Pending, nghĩa là PVC chưa được bind với bất kỳ PersistentVolume nào. Bạn cần kiểm tra xem có PV nào phù hợp (về dung lượng, accessMode, StorageClass…) để phục vụ PVC hay không.

  • 2. Đảm bảo StorageClass tồn tại và đúng định dạng

Kiểm tra StorageClass được khai báo trong PVC có tồn tại trong cụm hay không:

kubectl get storageclass

Nếu tên StorageClass không nằm trong danh sách, bạn cần chỉnh sửa lại YAML hoặc tạo mới StorageClass tương ứng. Đồng thời, kiểm tra xem StorageClass có cấu hình đúng backend (VD: hostPath, NFS, CSI plugin…) và hỗ trợ dynamic provisioning hay không.

  • 3. Kiểm tra quyền truy cập vào volume

Đối với một số backend lưu trữ như NFS, hostPath, hoặc các ổ đĩa cloud (EBS, GCE PD…), bạn cần đảm bảo Kubernetes có đủ quyền truy cập hoặc mount volume vào node.

Với hostPath: đường dẫn cần tồn tại trên node và có quyền truy cập.

Với cloud volume: cần đúng quyền IAM hoặc cấu hình mạng để truy cập thiết bị lưu trữ.

Node không ở trạng thái Ready

Mô tả:Một Node trong cụm Kubernetes chuyển sang trạng thái NotReady, khiến hệ thống không thể lên lịch (schedule) Pod lên Node đó. Nếu Node này đang chạy nhiều Pod quan trọng, các Pod đó có thể bị gián đoạn hoặc bị reschedule sang Node khác, ảnh hưởng đến tính ổn định của toàn bộ hệ thống.

Nguyên nhân phổ biến:

  • Thiếu tài nguyên (CPU, RAM): Khi tài nguyên hệ thống cạn kiệt, kubelet không thể duy trì kết nối ổn định với control plane, dẫn đến trạng thái NotReady.
  • Lỗi trong kubelet hoặc network: kubelet có thể bị crash, cấu hình sai, hoặc không thể kết nối với API server do lỗi mạng (mất kết nối, DNS lỗi, firewall chặn cổng…).

Cách khắc phục:

  1. Kiểm tra trạng thái Node

Sử dụng lệnh sau để xem toàn bộ danh sách Node và trạng thái của từng Node:

kubectl get nodes

Nếu một Node hiện NotReady, hãy ghi lại tên Node đó để kiểm tra sâu hơn.

  • 2. Kiểm tra logs của kubelet

Trên chính Node gặp lỗi, dùng lệnh sau để xem log dịch vụ kubelet:

journalctl -u kubelet

hoặc

sudo systemctl status kubelet

Từ đó, bạn có thể xác định nguyên nhân cụ thể như lỗi xác thực, mất kết nối API server, lỗi cấu hình…

  • 3. Đảm bảo network ổn định và Node có đủ tài nguyên

Kiểm tra kết nối giữa Node và control plane (ping, telnet đến API server).

Đảm bảo port như 6443 (API server) không bị firewall chặn.

Kiểm tra dung lượng ổ đĩa (df -h), RAM và CPU (top hoặc htop) để xác định có bị đầy hoặc quá tải không.

Trong một số trường hợp, chỉ cần khởi động lại kubelet hoặc cả Node:

sudo systemctl restart kubelet

Kết luận

Triển khai Kubernetes không chỉ là chuyện “chạy được pod”, mà còn là việc đảm bảo hệ thống hoạt động ổn định, dễ quan sát và dễ khắc phục khi có sự cố. Việc hiểu nguyên nhân cốt lõi của các lỗi phổ biến sẽ giúp bạn xử lý nhanh và tránh lặp lại sai lầm. Hãy luôn kiểm tra log, tận dụng công cụ như kubectl describe, get events, và theo dõi trạng thái các thành phần trong cụm để có cái nhìn tổng thể. Nếu doanh nghiệp cần tư vấn triển khai K8S hiệu quả, hãy liên hệ với Sunteco theo số hotline  (+84) 78 678 3868, hoặc ĐĂNG KÝ DÙNG THỬ K8S MIỄN PHÍ.

Tags: .

Bạn cần chuyên gia tư vấn giải pháp Cloud phù hợp?

Vui lòng để lại thông tin, chúng tôi sẽ liên hệ với bạn trong thời gian sớm nhất!