K8s Escape Room: Cách học Kubernetes qua troubleshooting thực tế

Gần đây tôi tìm ra một game về Kubernetes phải nói là rất ưng, giúp anh em học kubernetes bằng cách nhảy vào troubleshooting lỗi. Cụ thể là ban đầu có các lỗi được khoanh tròn và khi fix được lỗi nào nó sẽ mất đi và chúng ta sẽ làm việc trực tiếp trên cụm kubernetes được cài đặt qua docker với chỉ một vài câu lệnh đơn giản. Thực sự rất recommend anh em chơi thử xem có fix hết được lỗi không nhé.

74405a34-eef0-4b6d-8358-469c91636dfa

Đầu tiên mọi người cần cài Docker trên server trước, tham khảo cách cài docker mới nhất tự động bằng script của bác Vũ Quốc nhé.

Rồi bây giờ chúng ta sẽ tiến hành vào làm luôn, đầu tiên là clone repository về

git clone https://github.com/steadforce/k8s-escape-room.git

Tiếp đến là di chuyển đến thư mục làm việc

cd k8s-escape-room

Đến đây tạo cái docker network để đảm bảo không lỗi khi khởi tạo

docker network create --driver=bridge \
  --subnet=10.172.242.0/24 \
  --ip-range=10.172.242.0/28 \
  --gateway=10.172.242.1 \
  kind

Tiến hành kiểm tra xem docker network đã được tạo chưa nhé

docker network ls | grep -w kind || true

Vì cài đặt chỉ với vài câu lệnh nhanh bằng bashscript nên tiến hành cấp quyền thực thi cho các file cần chạy

chmod +x workbench init.sh delete-cluster.sh remove-resources.sh

Tiến hành khởi chạy file workbench trước

./workbench

Kết quả

7a4f4cc0-f70d-4800-9f34-c66954a0e1ff

Tiếp đến chạy file init.sh trong shell hiện tại

 . init.sh

Kết quả bắt đầu khởi chạy

38782bac-14e9-4fdf-8eeb-02bc7805f6be

Kết quả sau khi khởi chạy thành công đã tạo các tài nguyên như deployment, configmap, secret, service, rbac

b3597412-3efc-48ef-bc48-f15e26b7a183

Bây giờ chúng ta tiến hành truy cập vào game trên trình duyệt với địa chỉ IP_SERVER sẽ thấy giao diện, đến đây sẽ tiến hành nhập username để bắt đầu

d8f39e00-7007-440e-87e5-deef663f5896

Vào màn hình chính bạn có thể thấy:

  • Highscores: là xếp hạng thời gian bạn hoàn thành các thử thách (fix lỗi) của game và phần solved chính là trạng thái các vấn đề cần giải quyết và mặc định đang là 4.
  • Phần khoanh đỏ: là vấn đề cần phải giải quyết, bạn chỉ cần hover vào sẽ thấy chỉ dẫn và xử lý xong thì dấu đỏ sẽ biến mất và trạng thái phần solved sẽ chuyển từ ❌️ sang ✅️.
    d81fbba4-f72b-430f-97e2-934e00078402

Vì sau khi khởi chạy thành công, hiện tại chúng ta đang trong môi trường của container bạn sẽ thấy ví dụ namhoai@b3cd3ef7b889:~/k8s-escape-room$ (tức là đã có thể sử dụng trực tiếp kubectl), tiến hành chạy lệnh kiểm tra

kubectl get pods -A

Kết quả

4b471cbf-4de7-403d-9c4f-6a0870b44a22

Bạn có thể thấy là các pod như orb-deployment-7f9d77998f-fmpfbphotoframe-deployment-76bf44684b-frsjntome-deployment-5f6c54d6cc-857rr trạng thái hiện tại chưa hoạt động đúng là running như các tài nguyên khác. Đó chính là vấn đề chúng ta cần giải quyết.

Bây giờ, tôi và mọi người sẽ tiến hành đi giải một usecase, thú vị phết đấy. Đầu tiên vào giải quyết vấn đề của cuốn sách được khoanh đỏ nhé.

Tôi sẽ tiến hành chạy lệnh xem chi tiết vấn đề đang sảy ra ở đâu (phần này mọi người chú ý là mỗi pod nó sẽ sinh ra các tên pod khác nhau nhé chỉ chú ý tiền tố tư orb-deployment, photoframe-deployment, tome-deployment) vì có thể có các bạn mới nên tôi phải lưu ý chi tiết.

Tiến hành chạy lệnh kiểm tra thử pod tome-deployment

kubectl -n default describe pod tome-deployment-5f6c54d6cc-857rr

Kết quả

87d904dd-b57a-4ac0-96a6-97556a1fd2c5

Rõ ràng vấn đề ở đây có thể thấy được là Error: couldn't find key ancientKey in Secret default/tome-secret tức là kubernetes đã tìm thấy secret nhưng bên trong Secret Key ancientKey có vấn đề.

Tiếp tục chúng ta tiến hành chạy kiểm tra thử

kubectl -n default get secret tome-secret -o jsonpath='{.data.ancientKey}'

Và kết quả rỗng tức là Secret Key ancientKey chưa tồn tại trong .data nên container fail khi start, tức là .data.ancientKey = null

Hiểu vấn đề rồi thì giải quyết thôi, tôi tiến hành chạy lệnh để cập nhật key ancientKey trong Secret tome-secret (namespace default) với giá trị là ancient-key.

kubectl -n default patch secret tome-secret \
  -p '{"data":{"ancientKey":"'$(echo -n "ancient-key" | base64)'"} }'

Rồi bây giờ chúng ta sẽ tiến hành xóa pod để cho deployment tạo lại (vì update Secret pod sẽ không tự động tạo lại chắc anh em cũng biết rồi)

kubectl -n default delete pod -l app=tome

Và tiến hành kiểm tra lại xem pod lên chưa

kubectl -n default get pods -l app=tome -w

Kết quả rõ ràng đã lênh thành công

NAME                               READY   STATUS    RESTARTS   AGE
tome-deployment-5f6c54d6cc-dpxdv   1/1     Running   0          1s

Và ra bên ngoài kiểm tra sẽ thấy ngay chỗ cuốn sách được hết khoanh đỏ đã mở ra (do chúng ta đã fix đúng phần secret) và phần solved đã khắc phục được 1/4 vấn đề

26169167-33f2-486c-af71-d220cc1aabb3

Đến đây, mọi người tiếp tục fix để học và thêm phần kích thích nhé, tôi giải hết thì không ổn còn nếu anh em có nhu cầu có thể còm men tôi sẽ giải nốt và update :)))

Kết luận

Trước có thấy bác Vũ Quốc chia sẻ các bài viết Dockerlings hay Vimmaster để việc học các công nghệ thêm gia vị không chỉ là đọc docs, hỏi AI,… cái quan trọng là cảm giác thử thách cũng sẽ thú vị hơn.

Nên mọi người có thể tham gia State of DevOps VietNam 2026 của DevOps VietNam để góp ý, để các sếp biết được đúng nhu cầu của anh em giúp các diễn giả (tôi cũng có một chút chia sẻ) hiểu nhu cầu mọi người hơn và cái rất quan trọng là để cộng đồng DevOps Việt Nam chúng ta phát triển không thua kém gì trên thế giới.

Thông tin nổi bật

Sự kiện phát trực tiếp​

Event Thumbnail

Báo cáo quan trọng

Article Thumbnail
Article Thumbnail

Sự kiện đang hiện hành

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

Tiêu điểm chuyên gia