Khai phá Kubernetes: Helm, Ingress, CI/CD và Tự động scale – Hướng dẫn toàn diện dành cho DevOps hiện đại Chuyên mục Devops 2025-06-17 0 Lượt xem 0 Lượt thích 0 Bình luận
Khai phá Kubernetes: Helm, Ingress, CI/CD và Tự động scale – Hướng dẫn toàn diện dành cho DevOps hiện đại
Kubernetes (K8s) không chỉ là công cụ orchestration mạnh mẽ nhất hiện nay, mà còn là nền tảng trung tâm của các hệ thống cloud-native. Trong bài viết này, chúng ta sẽ cùng nhau "đào sâu" các khái niệm quan trọng giúp bạn quản lý ứng dụng hiện đại: Helm, Ingress Controller, CI/CD với GitHub Actions và Tự động scale bằng HPA.
1. Helm – Trình quản lý gói (Package Manager) của Kubernetes
1.1 Vấn đề cần giải quyết
Triển khai một ứng dụng trên K8s có thể cần rất nhiều YAML: Deployment, Service, ConfigMap, Secret... Việc sao chép thủ công và chỉnh sửa từng file cho các môi trường khác nhau là không tối ưu.
1.2 Helm giải quyết thế nào?
Helm cho phép đóng gói toàn bộ cấu hình thành một Chart. Nó hỗ trợ:
-
Cài ứng dụng phức tạp chỉ với 1 lệnh (helm install)
-
Tái sử dụng cấu hình (Dev/Staging/Production)
-
Rollback, upgrade dễ dàng
1.3 Cấu trúc Helm Chart:
mychart/
├── Chart.yaml # Metadata
├── values.yaml # Biến cấu hình
└── templates/ # Các file YAML template hóa
Helm sử dụng Go template ({{ }}) để biến hóa các YAML theo cấu hình trong values.yaml
1.4 Lệnh phổ biến:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-redis bitnami/redis
helm upgrade my-redis bitnami/redis --set auth.password=secret123
helm uninstall my-redis
2. Ingress Controller – Cổng vào của ứng dụng HTTP
2.1 Vấn đề
Service kiểu NodePort/LoadBalancer chỉ phục vụ 1 app trên 1 port. Với nhiều service web, bạn cần một giải pháp reverse proxy thông minh hơn.
2.2 Ingress Controller là gì?
-
Là reverse proxy (Nginx, Traefik...) chạy trong K8s
-
Đọc tài nguyên Ingress để route HTTP request đến đúng Service theo host hoặc path
2.3 Ví dụ Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: myapp.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend
port:
number: 80
2.4 Lưu ý:
-
Cần cài Ingress Controller: minikube addons enable ingress
-
Sửa /etc/hosts: 127.0.0.1 myapp.local
3. CI/CD với GitHub Actions triển khai trực tiếp vào Kubernetes
3.1 Lợi ích
GitHub Actions tích hợp sẵn trong GitHub, cho phép tự động hóa các bước build/test/deploy. Với Kubernetes, bạn có thể:
-
Build Docker image từ code
-
Push image lên Docker Hub/ECR
-
Deploy image mới vào cluster bằng kubectl hoặc Helm
3.2 Pipeline mẫu:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build image
run: docker build -t myapp:${{ github.sha }} .
- name: Push image
run: docker push myapp:${{ github.sha }}
- name: Deploy to K8s
env:
KUBECONFIG: ${{ secrets.KUBECONFIG }}
run: |
kubectl set image deployment/myapp myapp=myapp:${{ github.sha }}
3.3 Bảo mật:
-
File kubeconfig phải được mã hóa và lưu vào GitHub Secrets
-
Có thể thay thế kubectl bằng helm upgrade nếu dùng Helm chart
4. HPA – Horizontal Pod Autoscaler
4.1 Vấn đề
App hoạt động tốt với 2 Pod, nhưng khi traffic tăng đột biến thì quá tải?
4.2 HPA là gì?
-
Là controller trong K8s giúp scale số Pod lên/xuống tự động dựa vào CPU, RAM hoặc custom metrics
-
Tăng hiệu suất và tiết kiệm tài nguyên
4.3 Cách hoạt động
-
Pod phải có resource request
-
Cài đặt metrics-server
-
Tạo HPA như sau:
kubectl autoscale deployment myapp --cpu-percent=60 --min=2 --max=10
4.4 Kiểm tra:
kubectl get hpa
Nếu CPU vượt 60%, hệ thống sẽ scale từ 2 lên 3, 4... tối đa là 10 Pod
5. Tổng kết: Kết hợp lại thành hệ thống hoàn chỉnh
Developer → Push Code → GitHub Actions (Build + Deploy)
→ Kubernetes Cluster
→ Helm Install hoặc kubectl apply
→ Ingress Controller route HTTP traffic
→ HPA tự động scale theo tải
Bằng cách kết hợp các công cụ này, bạn có thể xây dựng:
-
Quy trình triển khai hiện đại, tự động
-
Hệ thống tự phục hồi và tự scale
-
Dễ kiểm soát, dễ rollback, tiết kiệm chi phí
Bình luận (0)