Kubernetes (K8S) là một nền tảng mã nguồn mở để tự động hóa việc triển khai, mở rộng và quản lý các container. Đây là một công cụ mạnh mẽ và phổ biến để triển khai ứng dụng container hóa trên quy mô lớn.
Dưới đây là kiến thức đầy đủ về Kubernetes, từ cơ bản đến nâng cao:
1. Tổng quan về Kubernetes
Kubernetes là gì?
- Kubernetes giúp quản lý các container (như Docker) bằng cách nhóm chúng thành các đơn vị logic gọi là Pods.
- Kubernetes cung cấp:
- Tự động scaling (mở rộng/thu hẹp).
- Tự động khởi động lại container khi gặp lỗi.
- Cân bằng tải (Load Balancing).
- Quản lý cấu hình và bí mật (ConfigMap và Secret).
2. Các thành phần chính của Kubernetes
Kiến trúc tổng thể
Kubernetes có kiến trúc Client-Server:
-
Control Plane (Máy chủ điều khiển):
- API Server: Giao tiếp giữa người dùng và Kubernetes.
- Scheduler: Quyết định nơi chạy các Pods.
- Controller Manager: Xử lý các hoạt động như scaling, kiểm tra trạng thái.
- etcd: Lưu trữ trạng thái cluster dưới dạng key-value.
-
Node (Máy chủ làm việc):
- Kubelet: Chịu trách nhiệm khởi động và giám sát container trên node.
- Kube Proxy: Quản lý mạng và chuyển tiếp yêu cầu tới container.
- Container Runtime: Công cụ chạy container (như Docker, containerd).
Các khái niệm cơ bản
-
Pod:
- Đơn vị nhỏ nhất trong Kubernetes, chứa một hoặc nhiều container.
- Các container trong Pod chia sẻ tài nguyên mạng và lưu trữ.
-
Node:
- Máy chủ vật lý hoặc máy ảo chạy các Pods.
-
Namespace:
- Chia tách tài nguyên thành các không gian độc lập.
-
Deployment:
- Quản lý việc triển khai ứng dụng, bao gồm scaling và rolling updates.
-
Service:
- Cách để expose Pods ra bên ngoài (ClusterIP, NodePort, LoadBalancer, ExternalName).
-
ConfigMap và Secret:
- ConfigMap: Lưu trữ cấu hình không bí mật.
- Secret: Lưu trữ dữ liệu nhạy cảm (như mật khẩu, API keys).
3. Các tính năng quan trọng của Kubernetes
Quản lý Container
- Tự động tạo và khởi động lại container khi gặp lỗi.
- Thay thế container lỗi hoặc không đáp ứng.
Scaling (Mở rộng quy mô)
- Horizontal Pod Autoscaler (HPA): Tự động thêm/bớt số lượng Pods dựa trên tải.
- Vertical Pod Autoscaler (VPA): Điều chỉnh tài nguyên của Pods (CPU, RAM).
Cân bằng tải (Load Balancing)
- Kubernetes tự động phân phối lưu lượng mạng đến các Pods.
Storage (Lưu trữ)
- Hỗ trợ lưu trữ dữ liệu tạm thời và lâu dài:
- PersistentVolume (PV).
- PersistentVolumeClaim (PVC).
- StorageClass.
Networking
- Kubernetes hỗ trợ:
- Service Discovery: Pods tự động tìm thấy nhau.
- Ingress: Quản lý truy cập từ bên ngoài vào cluster.
- Network Policies: Điều chỉnh luồng mạng giữa các Pods.
4. Cách triển khai ứng dụng với Kubernetes
Quy trình triển khai
- Tạo file cấu hình YAML để định nghĩa các tài nguyên (Deployment, Service, ConfigMap...).
- Áp dụng file cấu hình:
kubectl apply -f <file.yaml>
- Kiểm tra trạng thái:
kubectl get pods kubectl get svc
5. Hệ sinh thái Kubernetes
Công cụ hỗ trợ
- Helm: Quản lý ứng dụng Kubernetes dưới dạng biểu đồ (charts).
- Prometheus + Grafana: Giám sát và hiển thị dữ liệu cluster.
- Istio/Linkerd: Quản lý mạng dịch vụ (Service Mesh).
- Kustomize: Tùy chỉnh file YAML mà không cần thay đổi trực tiếp.
Dịch vụ Cloud hỗ trợ Kubernetes
- Amazon EKS (AWS).
- Google Kubernetes Engine (GKE).
- Azure Kubernetes Service (AKS).
6. Bảo mật trong Kubernetes
Quản lý quyền truy cập
- RBAC (Role-Based Access Control): Phân quyền dựa trên vai trò.
- Pod Security Standards (PSS): Quy tắc bảo mật Pods.
Quản lý bí mật
- Sử dụng Secret để lưu trữ và quản lý dữ liệu nhạy cảm.
Cách ly tài nguyên
- Sử dụng Namespace để cô lập các tài nguyên giữa các nhóm.
7. Cách cài đặt Kubernetes
Minikube (Dành cho phát triển và thử nghiệm)
- Triển khai Kubernetes trên máy cá nhân.
minikube start
Kubeadm
- Triển khai Kubernetes trên server:
kubeadm init
Dịch vụ Cloud
- Sử dụng các nền tảng như EKS, GKE, hoặc AKS để triển khai cluster dễ dàng.
8. Các lệnh kubectl quan trọng
Làm việc với Pods
- Liệt kê Pods:
kubectl get pods
- Xem log của Pod:
kubectl logs <pod_name>
Làm việc với Deployments
- Triển khai Deployment:
kubectl apply -f deployment.yaml
- Xóa Deployment:
kubectl delete deployment <deployment_name>
Kiểm tra tài nguyên
- Liệt kê tất cả tài nguyên:
kubectl get all
- Xem thông tin chi tiết:
kubectl describe <resource> <name>
9. Nâng cao
CICD với Kubernetes
- Sử dụng các công cụ như Jenkins, GitLab CI/CD, hoặc ArgoCD để tự động triển khai ứng dụng lên Kubernetes.
Service Mesh
- Triển khai Istio hoặc Linkerd để:
- Quản lý lưu lượng giữa các dịch vụ.
- Thực hiện canary deployment hoặc blue/green deployment.