Vấn đề với kubectl Mà Ít Ai Nhắc Đến
Nếu bạn dành phần lớn thời gian trong ngày làm việc với Kubernetes cluster, chắc chắn bạn đã nếm trải nỗi đau này. Bạn muốn kiểm tra tại sao một pod cứ restart liên tục, nên chạy kubectl get pods -n staging, tìm được kẻ gây rối, rồi chạy kubectl describe pod my-app-7d9f8b-xkj2p -n staging, tiếp theo kubectl logs my-app-7d9f8b-xkj2p -n staging --previous, rồi có thể exec vào container để mò mẫm. Đó là bốn lệnh chỉ để chẩn đoán một vấn đề — và bạn phải gõ tên pod dài 30 ký tự mỗi lần.
Tôi gặp phải vấn đề này trong những tháng đầu làm việc với production cluster. K9s đã giải quyết nó. Tôi dùng nó hàng ngày từ đó đến nay, và đây là thứ đầu tiên tôi cài trên bất kỳ máy mới nào khi cần làm việc với Kubernetes.
K9s Thực Sự Là Gì
K9s là giao diện người dùng dựa trên terminal cho Kubernetes. Nó hoạt động trên nền kubeconfig hiện có của bạn và cung cấp cái nhìn tương tác, cập nhật liên tục về cluster — không cần trình duyệt web, không cần backend phụ, không cần server để bảo trì. Hãy nghĩ về nó như kubectl được tích hợp sẵn dashboard trực tiếp và phím tắt bàn phím.
Một vài điểm phân biệt nó với các dashboard dựa trên GUI:
- Chỉ là một file nhị phân đơn giản — không cần Helm chart, không cần deployment, không cần database
- Hoạt động với bất kỳ kubeconfig hợp lệ nào (cluster local, EKS, GKE, AKS — đều như nhau)
- Đọc trực tiếp từ Kubernetes API, mọi thứ bạn thấy đều là real-time
- Hiểu RBAC — chỉ hiển thị những gì user kubeconfig của bạn có quyền truy cập
- Hoàn toàn điều khiển bằng bàn phím, nghĩa là khi bạn học thuộc phím tắt, bạn làm việc nhanh hơn bất kỳ GUI nào
K9s không thay thế kubectl cho scripting hay CI/CD pipeline. Đây là người bạn đồng hành debug tương tác khi bạn đang ở trong terminal và cần tìm hiểu vấn đề ngay lập tức.
Cài đặt
K9s được phân phối dưới dạng file nhị phân đơn giản và có thể cài qua hầu hết các package manager:
# macOS
brew install derailed/k9s/k9s
# Linux (tải file nhị phân phiên bản mới nhất)
curl -Lo k9s.tar.gz https://github.com/derailed/k9s/releases/latest/download/k9s_Linux_amd64.tar.gz
tar -xzf k9s.tar.gz
sudo mv k9s /usr/local/bin/
# Windows (Chocolatey)
choco install k9s
# Hoặc dùng go install
go install github.com/derailed/k9s@latest
Kiểm tra xem đã hoạt động chưa:
k9s version
Với kubeconfig hợp lệ đã có, khởi động K9s chỉ cần:
k9s
Để chỉ định context hoặc namespace cụ thể ngay từ đầu:
# Kết nối tới một kubeconfig context cụ thể
k9s --context production-cluster
# Bắt đầu trong một namespace cụ thể
k9s -n kube-system
Khái Niệm Cơ Bản: Điều Hướng Giao Diện K9s
Giao diện K9s có ba khu vực chính: phần header hiển thị cluster và namespace hiện tại, danh sách tài nguyên ở giữa, và thanh trợ giúp ở dưới cùng hiển thị các phím có sẵn.
Command Bar
Nhấn : (dấu hai chấm) để mở command bar — đây là cách bạn chuyển đổi giữa các loại tài nguyên. Gõ bất kỳ tên tài nguyên Kubernetes nào và nhấn Enter:
:pods # Xem tất cả pods
:deployments # Xem deployments
:services # Xem services
:nodes # Xem các node trong cluster
:namespaces # Chuyển đổi namespaces
:configmaps # Xem configmaps
:secrets # Xem secrets (giá trị bị ẩn mặc định)
:ingresses # Xem ingress resources
:events # Sự kiện cluster — rất hữu ích để debug
Alias viết tắt cũng hoạt động, giống như trong kubectl: :po, :deploy, :svc, :ns.
Phím Tắt Cần Thiết
Đây là những phím khiến K9s đáng học. Sau vài giờ sử dụng, chúng trở thành phản xạ:
/— Lọc danh sách tài nguyên hiện tại theo tên (gõ để tìm kiếm, Escape để xóa)Enter— Đi sâu vào tài nguyên (pod → containers → logs)l— Xem logs của pod đang chọns— Mở shell (exec) vào container đang chọnd— Describe tài nguyên đang chọn (tương đươngkubectl describe)e— Chỉnh sửa YAML của tài nguyên trực tiếpctrl+d— Xóa tài nguyên đang chọn (có hộp thoại xác nhận)ctrl+k— Kill/xóa cưỡng bức tài nguyêny— Xem toàn bộ YAML của tài nguyênnhoặc0–9— Chuyển namespace (0 = tất cả namespaces)?— Mở màn hình trợ giúp đầy đủctrl+choặcq— Thoát
Chuyển Đổi Namespace
Nhấn 0 để xem tài nguyên trên tất cả namespaces, hoặc mở :namespaces, điều hướng đến namespace bạn muốn và nhấn Enter để chuyển sang. K9s ghi nhớ namespace cuối cùng theo từng context.
Thực Hành: Workflow Debug Thực Tế
Chẩn Đoán CrashLoopBackOff
Đây là tình huống bạn sẽ gặp thường xuyên nhất. Mở K9s, điều hướng đến :pods, và dùng / để lọc theo tên app. Bạn sẽ thấy STATUS hiển thị CrashLoopBackOff và số RESTARTS đang tăng. Chọn pod đó và:
- Nhấn
lđể xem logs hiện tại ngay lập tức - Trong màn hình log, nhấn
pđể chuyển sang logs container trước đó (instance đã crash) - Nhấn
wđể wrap các dòng dài nếu cần - Nhấn
fđể follow (tail) logs theo thời gian thực - Nhấn
Escapeđể quay lại, rồidđể describe pod và kiểm tra Events ở phía dưới
Toàn bộ quá trình điều tra chỉ mất khoảng 20 giây trong K9s. So với năm lệnh kubectl riêng biệt với tên pod 30 ký tự phải dán vào từng lệnh.
Giám Sát Mức Sử Dụng Tài Nguyên Node
Chuyển đến :nodes và bạn sẽ thấy cột CPU% và MEM% với màu sắc phân loại — xanh lá là bình thường, vàng là cảnh báo, đỏ là nguy hiểm. Chọn bất kỳ node nào và nhấn Enter để xem tất cả pod đang chạy trên đó. Hữu ích để phát hiện các pod ngốn tài nguyên khi bạn đang troubleshoot áp lực tài nguyên trên một máy cụ thể.
Port Forwarding Không Cần kubectl
Chọn pod hoặc service bạn muốn forward và nhấn shift+f. K9s mở hộp thoại để thiết lập cổng local và remote, rồi bắt đầu forward. Các port-forward đang hoạt động được theo dõi trong :pf. Tiện lợi khi bạn cần truy cập một service nội bộ từ laptop mà không cần chỉnh sửa bất kỳ quy tắc mạng nào.
Theo Dõi Events Theo Thời Gian Thực
Màn hình :events là một trong những tính năng ít được dùng nhất trong K9s. Lọc bằng / theo namespace hoặc tên app. Events phản ánh chính xác những gì Kubernetes đang làm đằng sau hậu trường — lỗi kéo image, quyết định scheduling, lỗi readiness probe. Tôi thường mở màn hình này trong cửa sổ terminal thứ hai mỗi khi deploy thứ gì đó mới. Nó phát hiện vấn đề ngay lập tức mà không thì phải dùng nhiều lệnh kubectl describe mới tìm ra.
Quản Lý Deployment
Tại :deployments, chọn bất kỳ deployment nào và:
- Nhấn
sđể scale (K9s hỏi số replica) - Nhấn
rđể restart deployment (rolling restart) - Nhấn
eđể chỉnh sửa YAML của deployment trực tiếp — thay đổi image tags, env vars, resource limits ngay lập tức - Nhấn Enter để đi sâu vào ReplicaSets, rồi vào các pod riêng lẻ
Dùng Màn Hình Pulses
Gõ :pulses để xem tổng quan toàn cluster hiển thị số lượng và trạng thái tài nguyên trên các loại tài nguyên chính. Một màn hình cho bạn biết liệu có điều gì đó đang sai trên diện rộng trước khi bạn đi vào chi tiết.
Tùy Chỉnh Đáng Biết
K9s lưu cấu hình tại ~/.config/k9s/config.yaml trên Linux và Mac, hoặc %APPDATA%\k9s\config.yaml trên Windows. Namespace mặc định, giao diện màu sắc và hành vi UI đều có thể cấu hình ở đó.
Để thay đổi giao diện màu sắc:
# Liệt kê các skin có sẵn
ls ~/.config/k9s/skins/
# Hoặc tải skin cộng đồng từ GitHub repo của K9s
# Rồi thiết lập trong config.yaml:
# ui:
# skin: monokai
Các team có thể cấu hình cột hiển thị tùy chỉnh theo từng loại tài nguyên bằng ~/.config/k9s/views.yaml. Điều này cho phép bạn ghim các trường quan trọng với setup của mình — QoS class của pod, priority class, hay bất cứ thứ gì mà đội trực on-call của bạn thực sự theo dõi — bên cạnh các cột tiêu chuẩn.
Tổng Kết
K9s loại bỏ sự ma sát giữa bạn và cluster của mình. Thay vì phải gõ lệnh kubectl từ trí nhớ hay sao chép tên pod, bạn điều hướng bằng thị giác — context luôn hiển thị trên màn hình, chỉ một phím để truy cập logs hay shell.
Bắt đầu với những gì bạn đã làm trong kubectl: kiểm tra trạng thái pod, đọc logs, describe tài nguyên. Sau một tuần, các phím tắt sẽ ngấm vào máu. Sau một tháng, quay lại dùng kubectl thuần túy để debug tương tác giống như điều hướng thư mục mà không có tab completion.
Đang quản lý nhiều cluster? K9s kết hợp hoàn hảo với kubectx. Chuyển context, khởi động lại K9s, và mọi thứ lập tức phản ánh target mới. Không cần cài đặt gì trên cluster. Chỉ cần đặt file nhị phân vào PATH là xong.

