Kubernetes Deployment là gì? Các chiến lược triển khai Kubernetes Deployment

1696
13-10-2023
Kubernetes Deployment là gì? Các chiến lược triển khai Kubernetes Deployment

Sử dụng Kubernetes Deployment để đánh giá phiên bản mới, tính năng mới của ứng dụng như thế nào. Hãy cùng Bizfly Cloud tìm hiểu về Kubernetes Deployment và những cách Kubernetes Deployment giúp đánh giá hiệu quả của các phiên bản mới.

Kubernetes Deployment là gì?

Kubernetes Deployment là một tài nguyên trong hệ thống Kubernetes, được sử dụng để quản lý việc khai ứng dụng trên các cụm Kubernetes. Sử dụng Kubernetes Deployment giúp việc tạo bản sao, triển khai các mã cập nhật hoặc quay lại về các phiên bản ban đầu dễ dàng. Kubernetes Deployment được tạo ra bằng kubectl, công cụ lệnh được tích hợp sẵn trên các hệ điều hành Linux, macOS và Windows.

Vì sao nên sử dụng Kubernetes Deployment?

Trung tâm điều khiển Kubernetes Deployment theo dõi sát sao tình trạng của các pod và node để có thể thực hiện kịp thời các thay đổi để đảm bảo tính liên tục của ứng dụng. Cũng nhờ thế, khi sử dụng Kubernetes để triển khai, mở rộng và phát triển ứng dụng, thời gian thực hiện sẽ ngắn đi, ít lỗ hơn, công việc được tự động hóa, không cần thực hiện các thao tác lặp đi lặp lại một cách thủ công.

Triển khai tự động hóa giúp cho việc khởi chạy các phiên bản của pod và đảm bảo các pod sẽ chạy được trên tất các các Kubernetes Cluster. Càng tự động hóa được nhiều, việc triển khai sẽ nhanh và ít xảy ra lỗi hơn.

>> Có thể bạn quan tâm: 9 Lợi ích chính của việc ứng dụng Kubernetes

Các chiến lược Kubernetes Deployment

Kubernetes Recreate Deployment

Kubernetes Recreate Deployment sẽ làm các pod dừng hoạt động và “tái tạo” chúng thành cái mới. Tuy nhiên chiến lược Kubernetes Deployment này chỉ phù hợp với những môi trường mà hoạt động của người dùng không tác động đến.

Do Kubernetes Recreate Deployment sẽ làm mới các pod và trạng thái của ứng dụng nên khi sử dụng ứng dụng, người dùng có thể gặp tình trạng lag, ứng dụng không hoạt động. Đây cùng là thời điểm các pod cũ ngừng hoạt động, các pod mới bắt đầu triển khai.

Kubernetes Deployment là gì? Các chiến lược triển khai Kubernetes Deployment - Ảnh 2.

Quy trình triển khai Kubernetes Recreate Deployment

Kubernetes Rolling Update Deployment

Kubernetes Rolling Update Deployment giúp việc chuyển đổi từ phiên bản cũ sang phiên bản mới nhanh, có trật tự hệ thống. Khi tung ra phiên bản mới với Replicaset mới, các bản sao của phiên bản cũ sẽ ngừng hoạt động từ từ đến khi có các bản sao của phiên bản mới. Lúc này không chỉ phiên bản cũ bị thay thế mà các bản sao của phiên bản cũ cũng bị thay thế. Nhược điểm lớn nhất của Kubernetes Rolling Update Deployment chính là mất thời gian để hoàn thành.

Kubernetes Blue/Green Deployment

Nếu như Kubernetes Rolling Update Deployment mất nhiều thời gian để chuyển đổi thì Kubernetes Blue/Green Deployment sẽ giúp công việc này diễn ra nhanh chóng.  “Blue” sẽ tượng trưng cho phiên bản hiện tại còn “Green” sẽ tượng trưng cho phiên bản mới.

Lưu lượng truy cập ban đầu sẽ được điều hướng về phiên bản “Blue”. Còn phiên bản “Green” sẽ được chạy song song với phiên bản “Blue” đến khi phiên bản “Green’ sẵn sàng sử dụng. Lúc này định tuyến lưu lượng sẽ được chuyển sang phiên bản “Green”. Nếu có vấn đề phát sinh, thì hoàn toàn có thể chuyển về phiên bản “Blue” - phiên bản cũ.

Kubernetes Blue/Green Deployment giúp giải quyết nhanh chóng các vấn đề khi cập nhật phiên bản nhưng tài nguyên sử dụng sẽ nhân đôi do chạy song song hai phiên bản đến khi chắc chắn phiên bản mới không có lỗi xảy ra.

Kubernetes Deployment là gì? Các chiến lược triển khai Kubernetes Deployment - Ảnh 3.

Kubernetes Blue/Green Deployment cho chạy đồng thời phiên bản mới - cũ

Kubernetes Canary Deployment

Kubernetes Canary Deployment sẽ chỉ thực hiện trên một nhóm nhỏ người dùng. Nhóm này sẽ được trải nghiệm phiên bản ứng dụng mới. Mục đích chính là kiểm tra các tính năng đã hoàn thiện chưa, xong quá trình sử dụng có xảy ra lỗi, vấn đề gì không. Sau khi chắc chắn phiên bản mới có thể sử dụng thì sẽ thay thế hoàn toàn phiên bản cũ.

Đây là một chiến lược khá hữu ích vì có thể dễ dàng hủy bỏ, không ảnh hưởng đến nhiều người dùng. Kubernetes Canary Deployment giúp đánh giá chính xác mức độ tác động của code mới đến hoạt động của ứng dụng mà không gây ra rủi ro quá lớn.

Ramped Slow Rollout

Ramped Slow Rollout sẽ cập nhật dần dần các pods bằng cách tạo bản sao mới và xóa bản sao cũ như vậy có thể kiểm soát được số bản sao mỗi lần tung ra và có thể chắc chắn mỗi pod đều khả dụng.

Ưu điểm của Ramped Slow Rollout chính là việc có thể kiểm soát được tốc độ tạo bản sao mới nhằm giảm rủi ro trong quá trình cập nhật.

Kubernetes Deployment là gì? Các chiến lược triển khai Kubernetes Deployment - Ảnh 4.

Ramped Slow Rollout tạo bản sao mới, xóa dần phiên bản cũ

Best-Effort Controlled Rollout

Ramped Slow Rollout cần thời gian để triển khai, đặc biệt là ở quy mô lớn vì thế để giảm thời gian triển khai xuống hãy sử dụng chiến lược thay thế Best-Effort Controlled Rollout. Chiến lược này giúp triển khai nhanh hơn nhưng đồng thời rủi ro cũng cao hơn vì sẽ có khoảng downtime nhất định giữa các pod.

Shadow Deployment

Chiến lược Shadow Deployment có thể hiểu như sau: Phiên bản mới sẽ được nhận lưu lượng truy cập thực tế cùng với bản hiện tại nhưng không gây tác động gì đến người dùng. Shadow Deployment cho phép kiểm tra cách phiên bản mới hoạt động dưới tải và dữ liệu thực.

Trong Kubernetes, Shadow Deployment cần có định tuyến lưu lượng cao thông qua các lưới dịch vụ như Istio hoặc Linkerd:

  • Cho chạy đồng thời hai phiên bản.
  • Định hình lưới dịch vụ để tạo ra 2 bản sao của lưu lượng truy cập đến, một bản sao được gửi tới phiên bản mới, một bản sao được gửi tới phiên bản hiện tại.
  • Giám sát hiệu quả, phát hiện lỗi và đảm bảo phiên bản mới hoạt động tốt.
  • Kết quả hoạt động của phiên bản mới không bị trả lại người dùng nên trải nghiệm sử dụng ứng dụng sẽ không bị ảnh hưởng.

A/B Testing

A/B Testing sẽ triển khai chạy đồng thời hai hoặc nhiều phiên bản của một tính năng cho một nhóm nhỏ người dùng để xác định xem phiên bản nào hoạt động tốt hơn, ít lỗi hơn, trải nghiệm mượt mà hơn.

Cách triển khai chiến lược A/B Testing như sau:

  • Triển khai các phiên bản của tính năng song song với nhau.
  • Sử dụng Kubernetes hoặc bộ điều khiển phân chia lưu lượng truy cập cho các phiên bản.
  • Theo dõi hiệu suất, trải nghiệm của người dùng khi sử dụng các phiên bản tính năng.
  • Sau khi đã có được số liệu chính xác sẽ có thể quyết định được phiên bản hoạt động phù hợp nhất, từ đó loại bỏ những phiên bản cho kết quả kém hơn.
Kubernetes Deployment là gì? Các chiến lược triển khai Kubernetes Deployment - Ảnh 5.

A/B testing cho hoạt động đồng thời không chỉ hai mà nhiều phiên bản

>> Xem thêm: Khám phá 5 dự án Kubernetes cho người mới bắt đầu

Ứng dụng của Kubernetes Deployment

Muốn quản lý và mở rộng các ứng dụng chạy trên Kubernetes Cluster hay đơn giản hóa quá trình tích hợp  API mở rộng của Kubernetes vào CI/CD thì nên sử dụng Kubernetes Deployment.

Dưới đây là một số ứng dụng thực tế của Kubernetes Deployment:

  • Hoạt động trên các máy chủ web phi trạng thái. Việc triển khi cần tạo một lượng nhất định bản sao của các pod và Kubernetes sẽ duy trì giữ nguyên số lượng pod đó khi triển khai.
  • Những ứng dụng cập nhật lưu trữ liên tục, ví dụ như Database Instance thường sử dụng StatefulSet và gắn vào ổ đĩa để dữ liệu được toàn vẹn, không bị mất đi.
  • Tự động cân bằng số lượng bản sao pod khi khối lượng công việc tăng lên, cần nhiều bản sao pod hoặc nhu cầu giảm, cần sử dụng ít bản sao pod hơn.

Cách tạo Kubernetes Deployment

Tương tự các tài nguyên khác của Kubernetes, Kubernetes Deployment sẽ được thực hiện bằng kubectl trên các tệp YAML hoặc JSON.

Ví dụ: YAML cho triển khai Nginx với 4 bản sao như sau:

apiVersion: apps/v1; kind: Deployment metadata: name: web-deployment spec: selector: matchLabels: app: nginx replicas: 4 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.17.0 ports:- containerPort: 80

Ở ví dụ trên, ta có thể thấy được rằng sẽ có 4 bản sao pod được tạo ra và được dán nhãn (app: nginx) để selector có thể tìm thấy. Container sử dụng hình ảnh ở container phiên bản 1.17.0 và quá trình triển hai sẽ mở 80 cổng cho các pod sử dụng. Nếu muốn xác định các biến môi trường của container thì sẽ sử dụng trường “env” hoặc “envFrom” trong tệp cấu hình.

Cập nhật Kubernetes Deployment

Khi thay đổi thông số pod template trong quá trình triển khai, Kubernetes Deployment sẽ tự động cập nhật lại cho phù hợp với thông số. Việc thay đổi thông số của pod template sẽ giúp cho các pod không tiếp nhận thêm bất kỳ yêu cầu công việc nào, để từ đó thu nhỏ lại và dừng hoàn toàn. Lúc này mẫu pod template mới sẽ được sử dụng để tạo pod mới.

Cách khôi phục Kubernetes Deployment

Khi quá trình triển khai lỗi, không ổn định, không mang lại hiệu quả thì hoàn toàn có thể khôi phục các bản Kubernetes Deployment bằng cách sử dụng kubectl và gõ dòng lệnh sau:

Kubectl rollout undo [deployment_name] Adding the argument–to-revision=will roll back to that specific version of the deployment

Nhìn chung, Kubernetes Deployment sẽ giúp đưa ra phản hồi chính xác về hiệu quả, chất lượng của các phiên bản mới để từ đó có thể quyết định có nên sử dụng phiên bản mới không và cần cải tiến phiên bản mới như thế nào để phù hợp hơn.

>> Tìm hiểu thêm: 5 best practice giúp đơn giản hóa việc quản lý Kubernetes

SHARE