Danh sách bài viết trong series Học microservice cơ bản
- Bài 1: Microservices Là Gì?
- Bài 2: Chuẩn Bị Môi Trường Để Học Microservices
- Bài 3: Viết Microservice Đầu Tiên
- Bài 4: Microservices Và Monolith
- Bài 5: Giao Tiếp Giữa Microservices
- Bài 6: Giao Tiếp Nâng Cao Trong Microserivce với RabbitMQ
- Bài 7: Container Hóa Microservices Với Docker
- Bài 8: Quản Lý Nhiều Microservices Với Docker Compose
- Bài 9: Học microservices cơ bản với minikube
Bài 9: Kubernetes 101: Hiểu Và Cài Đặt Cụm Đầu Tiên
Ở bài trước, bạn đã học cách dùng Docker Compose để chạy nhiều microservices cùng lúc – một bước tiến lớn trong việc quản lý hệ thống. Hôm nay, chúng ta sẽ đi xa hơn một chút, làm quen với Kubernetes – một công cụ mạnh mẽ để triển khai và quản lý microservices ở quy mô lớn. Mình nhớ lúc mới học Kubernetes, mình cảm thấy hơi choáng vì có nhiều khái niệm mới. Nhưng sau khi làm thử, mình thấy nó không quá khó, và mình sẽ hướng dẫn bạn từng bước để cài đặt cụm Kubernetes đầu tiên trên máy của bạn. Mọi thứ sẽ được giải thích thật rõ ràng để bạn dễ theo dõi. Sẵn sàng chưa nào?
Kubernetes Là Gì? Hãy Nghĩ Về Việc Quản Lý Nhiều Quán Ăn
Trước tiên, mình muốn bạn hiểu Kubernetes là gì một cách đơn giản. Hãy quay lại ví dụ quán ăn mà chúng ta đã dùng trước đây. Giả sử bạn không chỉ có một quán ăn, mà có hàng chục quán ở nhiều nơi. Mỗi quán có nhiều nhân viên (microservices), và bạn cần đảm bảo tất cả quán hoạt động trơn tru: nếu một quán quá đông, bạn chuyển nhân viên từ quán khác sang; nếu một nhân viên nghỉ, bạn tìm người thay ngay. Kubernetes cũng giống như một “quản lý tổng” của các quán ăn: nó giúp bạn chạy, quản lý, và mở rộng nhiều microservices (container) trên nhiều máy (server) một cách tự động.
Nói kỹ thuật hơn, Kubernetes (thường gọi là K8s) là một hệ thống mã nguồn mở để tự động hóa việc triển khai, mở rộng, và quản lý các ứng dụng container (như Docker container). Kubernetes giúp bạn:
- Chạy nhiều container trên nhiều máy.
- Tự động mở rộng khi tải tăng (VD: thêm container khi người dùng tăng).
- Tự động khôi phục khi container lỗi (VD: khởi động lại container).
Bước 1: Cài Đặt Minikube – Cách Dễ Nhất Để Thử Kubernetes
Để làm quen với Kubernetes, chúng ta sẽ dùng Minikube – một công cụ giúp chạy Kubernetes trên máy local (một cụm Kubernetes nhỏ). Hãy cài Minikube trên Ubuntu.
- Cài đặt các công cụ cần thiết:
sudo apt update sudo apt install -y curl
- Tải Minikube:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube
- Kiểm tra xem Minikube đã cài thành công chưa:
minikube version
Nếu bạn thấy kết quả như
minikube version: v1.33.1
, Minikube đã sẵn sàng. - Minikube cần một driver để chạy (mình sẽ dùng Docker làm driver, vì bạn đã cài Docker ở bài 7). Khởi động Minikube:
minikube start --driver=docker
Nếu thành công, bạn sẽ thấy thông báo:
Done! kubectl is now configured to use "minikube" cluster
Điều này có nghĩa cụm Kubernetes của bạn đã chạy.
Bước 2: Cài Đặt kubectl – Công Cụ Để Làm Việc Với Kubernetes
kubectl là công cụ dòng lệnh để tương tác với Kubernetes. Hãy cài nó:
- Tải kubectl:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
- Cấp quyền thực thi và di chuyển vào thư mục hệ thống:
chmod +x kubectl sudo mv kubectl /usr/local/bin/
- Kiểm tra xem kubectl đã cài thành công chưa:
kubectl version --client
Nếu bạn thấy kết quả như
Client Version: v1.29.2
, kubectl đã sẵn sàng.
Bước 3: Triển Khai Menu Service Lên Kubernetes
Bây giờ, chúng ta sẽ triển khai Menu Service
(từ bài 5 và 7) lên Kubernetes. Đầu tiên, bạn cần đảm bảo image Docker của Menu Service
đã có sẵn (từ bài 7).
-
Kiểm tra image
menu-service
:docker images
Nếu không thấy, quay lại bài 7 để build (
docker build -t menu-service .
). -
Tạo file
menu-deployment.yaml
để định nghĩa cách triển khaiMenu Service
:touch menu-deployment.yaml
Mở file
menu-deployment.yaml
trong VS Code (code menu-deployment.yaml
) và dán nội dung sau:apiVersion: apps/v1 kind: Deployment metadata: name: menu-deployment spec: replicas: 1 selector: matchLabels: app: menu template: metadata: labels: app: menu spec: containers: - name: menu image: menu-service ports: - containerPort: 3001 --- apiVersion: v1 kind: Service metadata: name: menu-service spec: selector: app: menu ports: - port: 3001 targetPort: 3001 type: ClusterIP
Giải thích file:
Deployment
: Định nghĩa cách chạyMenu Service
(1 bản sao –replicas: 1
).Service
: Tạo một điểm truy cập để gọi API củaMenu Service
từ bên trong Kubernetes.
-
Triển khai
Menu Service
lên Kubernetes:kubectl apply -f menu-deployment.yaml
Nếu thành công, bạn sẽ thấy:
deployment.apps/menu-deployment created service/menu-service created
Bước 4: Kiểm Tra Menu Service Trên Kubernetes
Hãy kiểm tra xem Menu Service
có chạy đúng không:
- Kiểm tra các pod (container) đang chạy:
kubectl get pods
Bạn sẽ thấy một pod với tên bắt đầu bằng
menu-deployment-...
. - Kiểm tra service:
kubectl get services
Bạn sẽ thấy
menu-service
trong danh sách. - Để test API, bạn cần truy cập vào pod. Trước tiên, lấy tên pod:
kubectl get pods
Giả sử tên pod là
menu-deployment-xyz
, chạy lệnh:kubectl port-forward pod/menu-deployment-xyz 3001:3001
- Mở Postman, tạo request
GET
với URL:http://localhost:3001/menu
. Nhấn “Send”, bạn sẽ thấy:[ { "id": 1, "name": "Phở bò", "price": 50000 }, { "id": 2, "name": "Bún chả", "price": 40000 }, { "id": 3, "name": "Cơm tấm", "price": 35000 } ]
Nếu bạn thấy kết quả này, xin chúc mừng! Bạn đã triển khai
Menu Service
lên Kubernetes.
Nhật Ký Lần Đầu Với Kubernetes: Trải Nghiệm Của Mình
Lần đầu làm với Kubernetes, mình gặp vài khó khăn, và mình nghĩ bạn cũng có thể gặp. Dưới đây là một số vấn đề và cách xử lý:
- Minikube không khởi động: Kiểm tra xem Docker có chạy không (
docker ps
). Nếu không, khởi động lại:sudo systemctl start docker
. - Pod không chạy (CrashLoopBackOff): Xem log của pod:
kubectl logs pod/menu-deployment-xyz
. Có thể imagemenu-service
chưa đúng – build lại image và thử lại. - Không truy cập được API: Đảm bảo bạn đã chạy
kubectl port-forward
và dùng đúng cổng (3001).
Mình từng quên build image menu-service
, nên pod không chạy được. Sau khi kiểm tra log, mình mới nhận ra vấn đề.
Kết Thúc: Bạn Đã Triển Khai Được Microservice Lên Kubernetes
Hôm nay, bạn đã làm quen với Kubernetes và triển khai Menu Service
lên cụm Minikube – một bước quan trọng trong hành trình học microservices. Ở bài tiếp theo, chúng ta sẽ học cách triển khai toàn bộ hệ thống (bao gồm Order Service
và RabbitMQ) lên Kubernetes, và làm sao để truy cập chúng từ bên ngoài. Hẹn gặp bạn ở bài sau nhé!