0
0
Lập trình
NM

Tạo Node Pool và Triển Khai Workloads Kubernetes trên GKE

Đăng vào 4 tháng trước

• 3 phút đọc

Hướng Dẫn Tạo Node Pool và Triển Khai Workloads Kubernetes với NodeSelector trên Google Kubernetes Engine (GKE)

Khi làm việc với Google Kubernetes Engine (GKE), việc kiểm soát nút mà các workloads của bạn chạy trên đó là rất quan trọng. Đây chính là lúc Node Pools và Node Selectors phát huy vai trò của mình.

Mục Tiêu Hướng Dẫn

Trong hướng dẫn này, chúng ta sẽ thực hiện ba bước chính:

  1. Tạo một Node Pool mới trong GKE
  2. Triển khai một Kubernetes Deployment sử dụng NodeSelector
  3. Kiểm tra vị trí của Pod và truy cập ứng dụng

🔹 Bước 1: Giới Thiệu

Chúng ta sẽ bắt đầu bằng việc tìm hiểu Node Pool và Node Selector, hai khái niệm quan trọng trong GKE. Node Pool cho phép bạn nhóm các nút với các cấu hình khác nhau bên trong một cluster GKE. Node Selector cho phép bạn chỉ định nút mà Pods của bạn sẽ chạy.

🔹 Bước 2: Tạo Node Pool trong GKE

Đầu tiên, hãy kiểm tra các node pools hiện có trong cluster của bạn:

bash Copy
# Liệt kê Node Pools
gcloud container node-pools list \
  --cluster "standard-public-cluster-1" \
  --location "us-central1"

Bây giờ, chúng ta sẽ tạo một Node Pool Linux với các máy ảo spot:

bash Copy
# Tạo Node Pool Linux
gcloud container node-pools create "linuxapps-nodepool" \
  --cluster "standard-public-cluster-1" \
  --machine-type "e2-small" \
  --disk-size "20" \
  --num-nodes "1" \
  --location "us-central1" \
  --spot

Xác nhận việc tạo thành công:

bash Copy
# Liệt kê lại Node Pools
gcloud container node-pools list \
  --cluster "standard-public-cluster-1" \
  --location "us-central1"

🔹 Bước 3: Xem Xét Cấu Hình Kubernetes Deployment với NodeSelector

Bây giờ, chúng ta sẽ tạo một Deployment mà buộc Pods chạy chỉ trên Node Pool mới của chúng ta.

📌 Tạo file: 01-kubernetes-deployment.yaml

yaml Copy
apiVersion: apps/v1
kind: Deployment 
metadata: 
  name: mylinuxapp-deployment
spec: 
  replicas: 3
  selector: 
    matchLabels: 
      app: mylinuxapp
  template:
    metadata: 
      name: mylinuxapp-pod
      labels:
        app: mylinuxapp 
    spec:
      # 👇 NodeSelector đảm bảo Pods chỉ chạy trong Node Pool của chúng ta
      nodeSelector:
        cloud.google.com/gke-nodepool: linuxapps-nodepool  
      containers: 
        - name: mylinuxapp-container
          image: ghcr.io/stacksimplify/kubenginx:1.0.0
          ports: 
            - containerPort: 80 

📌 Tạo một dịch vụ LoadBalancer: 02-kubernetes-loadbalancer-service.yaml

yaml Copy
apiVersion: v1
kind: Service 
metadata:
  name: mylinuxapp-lb-service
spec:
  type: LoadBalancer 
  selector:
    app: mylinuxapp
  ports: 
    - name: http
      port: 80   # Cổng Dịch Vụ
      targetPort: 80 # Cổng Container

🔹 Bước 4: Triển Khai và Kiểm Tra

Áp dụng các manifests:

bash Copy
# Triển khai Tài Nguyên Kubernetes
kubectl apply -f kube-manifests/01-kubernetes-deployment.yaml
kubectl apply -f kube-manifests/02-kubernetes-loadbalancer-service.yaml

Kiểm tra xem Pods có đang chạy trong Node Pool đúng không:

bash Copy
# Xác minh Pods và các nút của chúng
kubectl get pods -o wide

👉 Quan sát: Pods nên được lên lịch trên các nút thuộc về linuxapps-nodepool.

Bây giờ, hãy lấy địa chỉ IP bên ngoài của dịch vụ và thử nghiệm ứng dụng:

bash Copy
# Truy cập Ứng Dụng
kubectl get svc

Mở trong trình duyệt:

Copy
http://<EXTERNAL-IP>

🔹 Bước 5: Dọn Dẹp

Khi đã hoàn tất, hãy dọn dẹp tài nguyên.

bash Copy
# Xóa Tài Nguyên Kubernetes
kubectl delete -f kube-manifests/

Nếu bạn không cần Node Pool nữa:

bash Copy
# Xóa Node Pool (⚠️ giữ lại nếu cần cho demo tiếp theo như DaemonSets)
gcloud container node-pools delete "linuxapps-nodepool" \
  --cluster "standard-public-cluster-1" \
  --location "us-central1"

✅ Tóm Tắt

  • Node Pools cho phép bạn nhóm các nút với các cấu hình khác nhau trong một cluster GKE.
  • Node Selectors đảm bảo Pods chỉ được lên lịch trên các nút mà bạn muốn.
  • Kết hợp lại, chúng mang lại cho bạn khả năng kiểm soát tinh vi về vị trí workloads trong GKE.

🌟 Cảm ơn bạn đã đọc! Nếu bài viết này có giá trị, hãy cho tôi một like ❤️, theo dõi, hoặc chia sẻ để tôi có động lực tạo ra nhiều nội dung hơn.

— Latchu | Kỹ Sư DevOps & Cloud Cao Cấp
☁️ AWS | GCP | ☸️ Kubernetes | 🔐 Bảo Mật | ⚡ Tự Động Hóa
📌 Chia sẻ hướng dẫn thực hành, best practices và giải pháp đám mây thực tế.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào