Giả sử bây giờ mình muốn triển khai nhiều ứng dụng, hoặc là mình cần cập nhật một phiên bản mới. Tuy nhiên, khi cập nhật mình không muốn cập nhật hết cùng một lúc vì nó sẽ ảnh hưởng đến user. Và đôi khi trong quá trình cập nhật, mình gặp phải một số lỗi không mong muốn thì mình sẽ muốn khôi phục lại, hoặc là mình sẽ cập nhật nhưng mà mình lại không muốn nó khả dụng luôn, những vấn đề này nó sẽ liên quan đến Deployment K8s. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về Kubernetes Deployment là gì, cách hoạt động và triển khai.
Xem thêm:
Containerd là gì ? So sánh Docker và Containerd
Container runtime là gì ? 2 loại phổ biến
1. Kubernetes Deployment là gì?
Kubernetes Deployment là một resource trong Kubernetes đóng vai trò quan trọng trong việc quản lý và cập nhật một version mới của ứng dụng. Deployment cho phép nâng cấp các phiên bản một cách liền mạch, mang lại khả năng linh hoạt và kiểm soát tuyệt đối trong quá trình phát triển và triển khai ứng dụng.
2. Lợi ích của Deployment
- Nâng cấp liền mạch: Deployment cung cấp hai cách triển khai chính: Recreate và RollingUpdate. Cả hai đều được thực hiện tự động, giúp quá trình nâng cấp trở nên đơn giản và hiệu quả.
- Hoàn tác thay đổi: Lịch sử các phiên bản được lưu trữ, bạn có thể dễ dàng hoàn tác các thay đổi bằng cách rollback về phiên bản trước đó.
- Tạm dừng và tiếp tục: Bạn có thể tạm dừng quá trình triển khai và tiếp tục khi cần thiết.
- Quản lý Pod: Deployment quản lý các Pod trong k8s. Tự động thay thế các Pod bị lỗi bằng các Pod mới, đảm bảo ứng dụng luôn sẵn sàng.
3. Cách hoạt động
Deployment hoạt động dựa trên các template ( file định nghĩa về cấu hình và thiết lập của Pod). Khi template thay đổi, Deployment sẽ tự động tạo các Pod mới với cấu hình cập nhật và thay thế các Pod cũ.
Như trong hình ở dưới, Deployment sẽ tạo ra các ReplicaSet để quản lý các Pod.
ReplicaSet sẽ tạo và quản lý các Pod dựa trên template được định nghĩa trong Deployment.
Các Pod sẽ chạy các container.
deployments.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-1 spec: replicas: 2 selector: matchLabels: name: busybox-pod template: metadata: labels: name: busybox-pod spec: containers: - name: busybox-container image: busybox888 command: - sh - "-c" - echo Hello Kubernetes! && sleep 3600
4. Các thao tác với Kubernetes Deployments
– How many Deployments exist on the system?
controlplane ~ ➜ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE frontend-deployment 0/4 4 0 6s
– Create a new Deployment with the below attributes using your own deployment definition file.
Name: httpd-frontend
;
Replicas: 3
;
Image: httpd:2.4-alpine
--- apiVersion: apps/v1 kind: Deployment metadata: name: httpd-frontend spec: replicas: 3 selector: matchLabels: name: httpd-frontend template: metadata: labels: name: httpd-frontend spec: containers: - name: httpd-frontend image: httpd:2.4-alpine
5. Các cách deployment
Recreate: Xoá bỏ tất cả các phiên bản cũ trước, khi triển khai phiên bản mới. Gây gián đoạn dịch vụ trong quá trình chuyển đổi.
Rolling Update: Cập nhật từng phiên bản một, đảm bảo dịch vụ luôn hoạt động.
Recreate: Các sự kiện sẽ cho thấy replica set cũ bị thu nhỏ xuống 0 trước, sau đó replica set mới được mở rộng lên 5.
Rolling Update: Các sự kiện sẽ cho thấy replica set cũ và mới được thu nhỏ và mở rộng từng phần một cách đồng thời.
6. Rollout
Ngoài ra, Khi tạo Deployment, một Rollout mới được kích hoạt. Mỗi Rollout tạo ra một phiên bản mới của Deployment, được gọi là Revision.Mỗi lần cập nhật ứng dụng, một Rollout mới sẽ được tạo ra, tạo thành một Revision mới.
Lợi ích: Giúp theo dõi các thay đổi trong Deployment và cho phép Rollback về phiên bản trước.
7. Rollback
Khái niệm: Quay lại phiên bản trước của Deployment từ đó tạo ra số lượng Pod cần thiết để đáp ứng số lượng
Kết quả: Các pod trong replica set mới sẽ bị xoá, các pod trong replica set cũ sẽ được khởi động lại.
Khi nâng cấp ứng dụng, Deployment sẽ tạo ra một replica set mới, triển khai Pod mới và đồng thời loại bỏ các pod trong replica set cũ.
Cảm ơn các bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.
Bài viết liên quan: