Hướng Dẫn Sử Dụng LoadBalancer Service trong Google Kubernetes Engine (GKE)
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách triển khai một Pod đơn giản trong Google Kubernetes Engine (GKE) và mở rộng nó ra bên ngoài bằng cách sử dụng LoadBalancer Service — tất cả đều theo cách khai báo (sử dụng tệp YAML).
Mục Lục
- Hiểu Về Các Đối Tượng Cấp Cao Trong YAML Kubernetes
- Tạo Định Nghĩa Pod Đơn Giản
- Tạo LoadBalancer Service
- Dọn Dẹp Tài Nguyên
- Tóm Tắt Và Các Thực Hành Tốt Nhất
- Câu Hỏi Thường Gặp
Bước 01: Hiểu Về Các Đối Tượng Cấp Cao Trong YAML Kubernetes
Mỗi tài nguyên Kubernetes được định nghĩa trong một tệp YAML. Các đối tượng cấp cao bạn sẽ thấy trong hầu hết các tệp YAML là:
yaml
apiVersion: # Xác định phiên bản API sẽ sử dụng (ví dụ: v1, apps/v1)
kind: # Loại tài nguyên Kubernetes (Pod, Service, Deployment, v.v.)
metadata: # Thông tin về tài nguyên (tên, nhãn, không gian tên)
spec: # Trạng thái mong muốn (chi tiết cấu hình)
👉 Hãy nghĩ về nó như sau:
- apiVersion → nhóm API nào sẽ được sử dụng.
- kind → tài nguyên bạn muốn.
- metadata → cách Kubernetes xác định tài nguyên này.
- spec → cách tài nguyên này nên hoạt động.
Bước 02: Tạo Định Nghĩa Pod Đơn Giản
Hãy tạo một Pod chạy ứng dụng dựa trên Nginx đơn giản.
📂 Tạo một thư mục cho các tệp manifest:
bash
mkdir kube-manifests
cd kube-manifests
📄 Tệp: 01-pod-definition.yaml
yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp
image: stacksimplify/kubenginx:1.0.0
ports:
- containerPort: 80
👉 Điểm chính:
- Chúng ta gán nhãn cho Pod với
app: myapp. - Container chạy trên cổng 80.
✅ Áp dụng nó:
bash
kubectl apply -f 01-pod-definition.yaml
kubectl get pods
Bước 03: Tạo LoadBalancer Service
Bây giờ chúng ta đã có một Pod, hãy mở rộng nó bằng cách sử dụng LoadBalancer Service.
Service này sẽ cung cấp một bộ cân bằng tải bên ngoài của GCP và chuyển tiếp lưu lượng đến Pod của chúng ta.
📄 Tệp: 02-pod-LoadBalancer-service.yaml
yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-pod-loadbalancer-service
spec:
type: LoadBalancer
selector:
app: myapp # khớp với nhãn Pod của chúng ta
ports:
- name: http
port: 80 # Cổng Service (điểm truy cập bên ngoài)
targetPort: 80 # Cổng Container bên trong Pod
👉 Luồng lưu lượng:
[Người dùng Internet] → [GCP LoadBalancer] → [Cổng Service K8s 80] → [Cổng Container Pod 80]
✅ Áp dụng nó:
bash
kubectl apply -f 02-pod-LoadBalancer-service.yaml
kubectl get svc
🔎 Tìm kiếm một địa chỉ IP bên ngoài được gán cho Service của bạn.
✅ Kiểm tra nó:
bash
curl http://<Load-Balancer-External-IP>
Bạn sẽ thấy trang phản hồi của Nginx 🎉
Bước 04: Dọn Dẹp Tài Nguyên
Khi hoàn tất, hãy xóa tài nguyên:
bash
kubectl delete -f 01-pod-definition.yaml
kubectl delete -f 02-pod-LoadBalancer-service.yaml
Tóm Tắt Và Các Thực Hành Tốt Nhất
- Pods là đơn vị triển khai nhỏ nhất trong Kubernetes.
- Services cung cấp một điểm truy cập ổn định để truy cập Pods.
- LoadBalancer Service trong GKE tạo ra một bộ cân bằng tải GCP và mở rộng ứng dụng của bạn ra Internet.
Các Thực Hành Tốt Nhất
- Đặt tên rõ ràng cho tài nguyên: Sử dụng các quy tắc đặt tên nhất quán giúp dễ quản lý tài nguyên.
- Giám sát và Logging: Sử dụng các công cụ như Prometheus và Grafana để theo dõi hiệu năng Pod và Service của bạn.
- Sử dụng lệnh
kubectl getđể kiểm tra trạng thái của Pods và Services thường xuyên.
Cạm Bẫy Thường Gặp
- Thiếu nhãn cho Pods: Nếu không gán nhãn đúng cho Pod, Service sẽ không thể tìm thấy Pod.
- Cấu hình sai cổng: Đảm bảo rằng
targetPorttrong Service khớp vớicontainerPorttrong Pod.
Mẹo Hiệu Suất
- Sử dụng các vùng miền khác nhau: Nếu ứng dụng của bạn cần hiệu suất cao, hãy xem xét triển khai Pods trên nhiều vùng miền khác nhau.
- Tối ưu hóa hình ảnh container: Sử dụng hình ảnh nhỏ gọn để giảm thời gian khởi động.
Câu Hỏi Thường Gặp
- LoadBalancer Service có tốn phí không?
- Có, Google Cloud sẽ tính phí cho việc sử dụng LoadBalancer Service.
- Tôi có thể sử dụng loại Service nào khác không?
- Có, bạn có thể sử dụng ClusterIP hoặc NodePort tùy thuộc vào yêu cầu của bạn.
🌟 Cảm ơn bạn đã đọc! Nếu bài viết này mang lại giá trị, hãy để lại một like ❤️, theo dõi hoặc chia sẻ để khuyến khích tôi tiếp tục tạo ra nhiều nội dung hơn.
— Latchu | Kỹ Sư DevOps & Cloud Cấp Cao
☁️ AWS | GCP | ☸️ Kubernetes | 🔐 Bảo Mật | ⚡ Tự Động Hóa
📌 Chia sẻ hướng dẫn thực hành, các thực hành tốt nhất & giải pháp đám mây thực tế.