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.

  1. Cài đặt các công cụ cần thiết:
    sudo apt update
    sudo apt install -y curl
  2. Tải Minikube:
    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    sudo install minikube-linux-amd64 /usr/local/bin/minikube
  3. 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.

  4. 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ó:

  1. Tải kubectl:
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
  2. 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/
  3. 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).

  1. 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 .).

  2. Tạo file menu-deployment.yaml để định nghĩa cách triển khai Menu 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ạy Menu Service (1 bản sao – replicas: 1).
    • Service: Tạo một điểm truy cập để gọi API của Menu Service từ bên trong Kubernetes.
  3. 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:

  1. 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-....

  2. Kiểm tra service:
    kubectl get services

    Bạn sẽ thấy menu-service trong danh sách.

  3. Để 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
  4. 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ể image menu-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é!

Điều hướng chuỗi bài viết<< Bài 8: Quản Lý Nhiều Microservices Với Docker Compose
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