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:
- Tạo một Node Pool mới trong GKE
- Triển khai một Kubernetes Deployment sử dụng NodeSelector
- 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
# 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
# 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
# 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
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
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
# 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
# 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
# Truy cập Ứng Dụng
kubectl get svc
Mở trong trình duyệt:
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
# 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
# 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ế.