1. Giới Thiệu
Kubernetes là nền tảng mã nguồn mở mạnh mẽ giúp tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng containerized. Trong quá trình học tập và phát triển ứng dụng trên Kubernetes, việc hiểu rõ về Deployments và cách sử dụng kubectl để quản lý chúng là rất quan trọng. Bài hướng dẫn này sẽ chỉ dẫn bạn cách triển khai ứng dụng đầu tiên trên Kubernetes bằng kubectl, từ việc tạo Deployment, triển khai Service, đến việc quản lý và giám sát ứng dụng.
2. Mục Tiêu
- Hiểu về các đối tượng Deployments trong Kubernetes.
- Triển khai một ứng dụng mẫu trên Kubernetes sử dụng kubectl.
- Xem và quản lý Deployment và Pod.
- Triển khai Service để truy cập ứng dụng từ bên ngoài cluster.
- Xem logs của ứng dụng để kiểm tra hoạt động.
- Mở rộng và cập nhật Deployment để quản lý phiên bản ứng dụng.
3. Trước Khi Bắt Đầu
Trước khi bắt đầu, hãy đảm bảo rằng bạn đã thực hiện các bước sau:
- Cài Đặt kubectl: Bạn cần cài đặt kubectl để quản lý Kubernetes cluster. Xem Install kubectl để biết hướng dẫn cài đặt chi tiết.
- Thiết Lập Cluster Kubernetes: Bạn cần có một Kubernetes cluster đang chạy. Bạn có thể sử dụng Minikube, một cluster trên đám mây như Google Kubernetes Engine (GKE), hoặc bất kỳ giải pháp nào khác phù hợp với nhu cầu của bạn.
- Kết Nối kubectl với Cluster: Đảm bảo rằng kubectl đã được cấu hình để kết nối với cluster Kubernetes mà bạn muốn quản lý. Kiểm tra bằng lệnh:
kubectl config current-context
Nếu chưa kết nối, hãy tham khảo Connecting kubectl to a Cluster để biết cách cấu hình.
4. Sử Dụng kubectl Để Tạo Deployment
4.1. Hiểu Về Deployments
Deployment là một đối tượng trong Kubernetes giúp bạn quản lý việc triển khai và cập nhật các Pods một cách dễ dàng. Deployment đảm bảo rằng số lượng Pods bạn mong muốn luôn chạy và tự động khởi động lại Pods nếu chúng gặp sự cố.
Lợi Ích của Deployments:
- Quản Lý Phiên Bản: Dễ dàng cập nhật ứng dụng mà không gây gián đoạn dịch vụ.
- Tự Động Khôi Phục: Tự động khởi động lại Pods khi gặp sự cố.
- Mở Rộng và Thu Nhỏ: Dễ dàng thay đổi số lượng Pods dựa trên nhu cầu sử dụng tài nguyên.
4.2. Tạo Deployment Đầu Tiên
Để triển khai ứng dụng đầu tiên, bạn sẽ tạo một Deployment sử dụng kubectl. Trong ví dụ này, chúng ta sẽ sử dụng một container image đơn giản dựa trên NGINX để phục vụ các yêu cầu HTTP.
Bước 1: Tạo Deployment
kubectl create deployment hello-nginx --image=nginx
Lệnh này sẽ tạo một Deployment có tên hello-nginx với một Pod chạy container nginx.
Bước 2: Kiểm Tra Deployment
kubectl get deployments
Kết quả sẽ hiển thị thông tin về Deployment đã tạo:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-nginx 1/1 1 1 2m
4.3. Kiểm Tra Deployment và Pod
Xem Deployment:
kubectl describe deployment hello-nginx
Lệnh này cung cấp thông tin chi tiết về Deployment, bao gồm các chiến lược cập nhật, số lượng Pods, và trạng thái hiện tại.
Xem Pod:
kubectl get pods
Kết quả sẽ hiển thị các Pods được tạo bởi Deployment:
NAME READY STATUS RESTARTS AGE
hello-nginx-5f76cf6ccf-br9b5 1/1 Running 0 2m
4.4. Triển Khai Service để Truy Cập Ứng Dụng
Để truy cập ứng dụng NGINX từ bên ngoài cluster, bạn cần tạo một Service. Service giúp định tuyến lưu lượng mạng đến các Pods phù hợp.
Bước 1: Triển Khai Service
kubectl expose deployment hello-nginx --type=LoadBalancer --port=80
--type=LoadBalancer
: Expose Service ra ngoài cluster.--port=80
: Cổng mà Service sẽ lắng nghe.
Bước 2: Xem Service đã tạo
kubectl get services
Kết quả sẽ hiển thị thông tin về Service:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-nginx LoadBalancer 10.96.144.78 <pending> 80:30369/TCP 2m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m
Bước 3: Truy Cập Ứng Dụng Trên các nhà cung cấp đám mây hỗ trợ load balancer, một địa chỉ IP bên ngoài sẽ được cấp để truy cập Service. Trên Minikube, bạn có thể sử dụng lệnh sau để truy cập ứng dụng:
minikube service hello-nginx
Lệnh này sẽ mở trình duyệt và hiển thị ứng dụng NGINX đang chạy.
4.5. Xem Logs của Ứng Dụng
Để kiểm tra hoạt động của ứng dụng, bạn có thể xem logs của Pod.
Bước 1: Lấy tên Pod
kubectl get pods
Ví dụ:
NAME READY STATUS RESTARTS AGE
hello-nginx-5f76cf6ccf-br9b5 1/1 Running 0 2m
Bước 2: Xem Logs
kubectl logs hello-nginx-5f76cf6ccf-br9b5
Kết quả sẽ hiển thị các logs từ container NGINX:
127.0.0.1 - - [11/Sep/2024:09:19:26 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0"
Lưu Ý:
- Thay thế
hello-nginx-5f76cf6ccf-br9b5
bằng tên Pod thực tế của bạn.
4.6. Mở Rộng và Cân Bằng Deployment
Bước 1: Mở Rộng Deployment Bạn có thể tăng số lượng replicas để ứng dụng có thể xử lý nhiều yêu cầu hơn.
kubectl scale deployment hello-nginx --replicas=3
Bước 2: Kiểm Tra Deployment và Pods Sau Khi Mở Rộng
kubectl get deployments
kubectl get pods
Kết quả sẽ hiển thị số lượng Pods đã tăng lên:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-nginx 3/3 3 3 5m
4.7. Cập Nhật Deployment
Khi có phiên bản mới của ứng dụng, bạn có thể cập nhật Deployment để triển khai phiên bản mới mà không gây gián đoạn dịch vụ.
Bước 1: Cập Nhật Deployment với Image Mới
kubectl set image deployment/hello-nginx nginx=nginx:1.19.0
Bước 2: Kiểm Tra Trạng Thái Cập Nhật
kubectl rollout status deployment/hello-nginx
Kết quả sẽ thông báo rằng việc cập nhật đã hoàn thành thành công:
deployment "hello-nginx" successfully rolled out
Bước 3: Kiểm Tra Pods Đã Cập Nhật
kubectl get pods
Kết quả sẽ hiển thị các Pods mới với phiên bản image đã cập nhật.
5. Dọn Dẹp
Sau khi hoàn thành việc triển khai và thử nghiệm, bạn có thể dọn dẹp các tài nguyên đã tạo để giải phóng tài nguyên cluster.
Bước 1: Xóa Service và Deployment
kubectl delete service hello-nginx
kubectl delete deployment hello-nginx
Bước 2: Kiểm Tra Tài Nguyên Đã Xóa
kubectl get deployments
kubectl get services
Kết quả sẽ không còn hiển thị các tài nguyên đã xóa.
6. Kết Luận
Việc triển khai ứng dụng trên Kubernetes sử dụng kubectl là một bước quan trọng để quản lý và vận hành các ứng dụng containerized hiệu quả. Bằng cách hiểu rõ về Deployments, cách tạo và quản lý chúng, bạn có thể dễ dàng triển khai, mở rộng và cập nhật ứng dụng một cách linh hoạt và an toàn.
Những Điểm Chính:
- Deployments: Quản lý việc triển khai và cập nhật Pods một cách dễ dàng.
- kubectl: Công cụ mạnh mẽ để quản lý Kubernetes cluster và các đối tượng bên trong.
- Service: Expose ứng dụng để truy cập từ bên ngoài cluster.
- Scaling và Rolling Updates: Đảm bảo ứng dụng có thể mở rộng và cập nhật mà không gây gián đoạn.
7. Tiếp Theo
- Triển khai ứng dụng đầu tiên trên Kubernetes với Minikube: Hướng dẫn chi tiết cách triển khai và quản lý ứng dụng sử dụng Minikube.
- Tìm hiểu thêm về các đối tượng Deployment: Khám phá sâu hơn về các chiến lược cập nhật và rollback trong Deployments.
- Tìm hiểu thêm về các đối tượng Service: Hiểu rõ cách thức Service giúp kết nối và truy cập các ứng dụng trong cluster.
- Sử dụng Helm để quản lý các ứng dụng Kubernetes: Tìm hiểu cách sử dụng Helm charts để dễ dàng triển khai và quản lý các ứng dụng phức tạp.
8. Tài Nguyên Tham Khảo
- Kubernetes Documentation – Deployments
- Kubernetes Documentation – kubectl
- Kubernetes Documentation – Services
- Kubernetes Documentation – Scaling Applications
- Minikube Documentation
- Helm Documentation
- The Kubernetes Book
- Kubernetes Up & Running
- Prometheus Documentation
- Grafana Documentation
- Open Policy Agent (OPA)
4 Comments