Mấy hôm nay tôi thấy anh em share nhau về repo k8sgames, tôi cũng thấy tò mò vào trải nghiệm thử thì thấy web game để luyện tập này khá hay và hữu ích. Nay cuối tuần có thời gian rảnh nên ngồi trải nghiệm qua, nhân tiện với tính hay ho của game này, tôi quyết định viết một bài chia sẻ lại cho anh em newbie.

K8s Games có gì và vì sao newbie nên thử?
Hiểu đơn giản, K8s Games là một game mô phỏng Kubernetes chạy ngay trên trình duyệt. Anh em mới không cần tốn công loay hoay setup minikube, kind hay k3d, mà chỉ cần mở game lên là có thể bắt đầu làm quen với Kubernetes theo cách trực quan và dễ tiếp cận hơn.
Thay vì YAML và terminal khô khan, K8s Games trực quan hóa các resource thành mô hình 3D. Anh em có thể kéo thả, quan sát cách các Pod, Service, Ingress… liên kết với nhau và thực hành xử lý các lỗi K8s thường gặp.
Điểm hay của K8s Games là nó giải quyết đúng vấn đề mà nhiều người mới học Kubernetes hay gặp: khó hình dung các thành phần trong cluster liên kết với nhau như thế nào.
Nói ngắn gọn:
K8s Games = Mô phỏng trực quan + Thực hành Kubectl + Xử lý sự cố
Dù không thay thế được cluster thật, đây vẫn là bước đệm tuyệt vời để anh em làm quen trước khi bắt tay làm các lab thực tế với kind, minikube hay k3d.
Cách bắt đầu chơi
Anh em có thể truy cập K8s Games để bắt đầu nhé.
À giới thiệu qua, game có 4 mode chơi với thứ tự như sau:
| Mode | Mô tả |
|---|---|
| Campaign | Mới học Kubernetes |
| Sandbox | Muốn tự build cluster |
| Challenges | Muốn luyện tình huống có giới hạn thời gian |
| Chaos Mode | Muốn luyện kiểu SRE, incident liên tục |
Nay tôi sẽ hướng dẫn anh em trải nghiệm qua 2 mode là Campaign và Challenge.
Như anh em biết, mode Campaign sẽ có 20 level qua 5 chapter, đi từ Pod, Deployment, Networking, Storage tới Production K8s. Thay vì trải nghiệm các bài cơ bản ban đầu thì tôi sẽ bắt đầu với bài 5: Self-Healing & Pod Eviction nhé.
Với bài L5 này, tôi sẽ đi theo hướng command line để anh em làm quen với kubectl.
Mô tả qua đề bài để anh em nắm rõ:
Khi Node thiếu tài nguyên như memory hoặc disk, kubelet có thể evict Pod, tức là đẩy Pod ra khỏi Node để tránh Node bị quá tải.
Nếu Deployment chỉ có 1 replica, Pod bị evict thì app có thể bị gián đoạn.
Nếu Deployment có từ 2 replicas trở lên, Pod còn lại vẫn chạy. ReplicaSet controller sẽ tự tạo Pod mới để bù lại Pod bị mất.
Việc cần làm trong bài: tạo 3 Deployment và scale mỗi Deployment lên ít nhất 2 replicas.
Đầu tiên anh em bắt đầu với / để nhập command line, tiếp theo anh em lần lượt tạo 3 deployment trước tiên:
kubectl create deployment web
kubectl create deployment api
kubectl create deployment worker
Anh em có thể kiểm tra lại các deployment vừa tạo bằng lệnh:
kubectl get deployment
Tiếp theo anh em scale mỗi deployment lên 2 replicas:
kubectl scale deployment web --replicas=2
kubectl scale deployment api --replicas=2
kubectl scale deployment worker --replicas=2

Như này anh em đã hoàn thành Level 5: Self-Healing & Pod Eviction rồi đó.

Tiếp theo tôi giới thiệu anh em hướng tiếp cận kéo thả. Tôi sẽ đi vào bài L9 – Services & Service Discovery.
Mô tả đề bài:
Khi Pod restart, IP của Pod có thể thay đổi. Service tạo ra một địa chỉ gồm ClusterIP và DNS name để các Pod khác gọi tới mà không cần biết IP Pod thật
Service chọn Pod bằng label selector. label selector. Nếu selector không khớp label của Pod, Service sẽ không có endpoint.
NodePort mở port trên tất cả các Node, dải 30000-32767, để expose Service ra ngoài cluster.
Việc cần làm trong bài: tạo 2 Service, một Service nối tới backend bằng selector app=backend, và một Service kiểu NodePort để expose ra ngoài.

Đầu tiên kéo thả để tạo service cho frontend và backend, trong đó backend dùng selector app=backend.

Tiếp tục với việc tạo Service NodePort cho frontend, anh em click chuột phải vào frontend-svc để chỉnh sửa lại type là NodePort.


Thế là xong rồi nhé.

Qua 2 bài chơi vừa rồi, anh em đã thấy được 2 cách tiếp cận khác nhau. Tuy nhiên, tôi vẫn muốn anh em newbie làm quen với command line trước để tập thành thạo và hiểu rõ câu lệnh, trước khi chuyển sang mode kéo thả.
Challenge mode
Với mode này, tôi sẽ trải nghiệm phân quyền trong Kubernetes thông qua bài RBAC Fortress.
Bài này yêu cầu tạo đúng RBAC theo nguyên tắc least privilege, tức là chỉ cấp đúng quyền cần dùng, không cấp quyền quá rộng kiểu *.
Việc cần làm: tạo 2 ServiceAccounts, 2 Roles, 2 RoleBindings và không có wildcard permissions.
Bước 1: Tạo 2 ServiceAccounts
kubectl create serviceaccount app-sa
kubectl create serviceaccount worker-sa
Kiểm tra:
kubectl get serviceaccounts
Bước 2: Tạo 2 Roles không dùng wildcard
kubectl create role app-role --verb=get,list,watch --resource=pods,services
kubectl create role worker-role --verb=get,list,watch --resource=pods,jobs
Kiểm tra:
kubectl get roles
kubectl describe role app-role
kubectl describe role worker-role
Đảm bảo không được có quyền kiểu này là ok:
verbs: *
resources: *
Bước 3: Tạo 2 RoleBinding để gắn Role vào ServiceAccount
kubectl create rolebinding app-binding --role=app-role --serviceaccount=default:app-sa
kubectl create rolebinding worker-binding --role=worker-role --serviceaccount=default:worker-sa


Đánh giá
Sau khi trải nghiệm nhanh, cá nhân tôi thấy K8s Games khá đáng thử cho anh em mới học K8s.
Điểm tốt
- Trực quan, dễ hình dung các resource trong cluster liên kết với nhau.
- Không cần setup môi trường, mở trình duyệt là chơi được.
- Có cả kéo thả và command line để làm quen với
kubectl. - Bài tập bám sát các tình huống thường gặp như Pod eviction, Service selector, rollback, RBAC, Secret, NetworkPolicy.
- Lộ trình chia level rõ ràng, đi từ cơ bản tới production.
Điểm chưa tốt
- Chưa có phần chỉnh sửa file
yaml, vẫn phải phụ thuộc nhiều vào câu lệnh. - UI chỉnh resource còn giới hạn, nhiều chỗ chỉ sửa được label và replicas.
- Một số bài khó làm thuần command line vì cần chỉnh sâu trong
spec.
Kết luận
Nhìn chung, K8s Games là một điểm bắt đầu khá phù hợp cho anh em newbie muốn tiếp cận Kubernetes theo cách nhẹ nhàng hơn. Thay vì học ngay bằng lý thuyết khô khan hoặc phải dựng môi trường lab từ đầu, game giúp mình làm quen dần với các khái niệm, cách vận hành và một số tình huống thường gặp trong Kubernetes thông qua mô phỏng trực quan.



