Serverless – Tương lai của Container

SERVERLESS – TƯƠNG LAI CỦA CONTAINER

Để gia tăng sự ổn định và hiệu quả chi phí, có hai sự thay đổi lớn những năm gần đây. Đầu tiên là việc dịch chuyển từ cơ sở hạ tầng tại chỗ sang đám mây. Sự thay đổi này cho phép doanh nghiệp giảm chi phí đáng kể trong khi scaling. Đồng thời, thêm tính linh hoạt để sử dụng nhiều loại máy ảo. Chúng ta sẽ khám phá nền tảng Spotinst. Xem cách Spotinst giải quyết những thách thức này với Serverless Container.

Sự thay đổi thứ hai gần đây là điểm pivot chính cho các container và giải pháp không có máy chủ. Kubernetes đang đảm nhiệm và trở thành chuẩn mực cho việc điều phối container. Kết hợp ở hai sự thay đổi này mang đến cho các tổ chức một câu hỏi độc đáo. Làm thế nào để tối đa hóa thời gian hoạt động của ứng dụng. Trong khi duy trì cơ sở hạ tầng, với chi phí hiệu quả ở cả hai tầng?

Tạo ra độ sẵn sàng cao bằng cách cung cấp nhiều hơn là điều dễ dàng thực hiện. Tuy nhiên cũng rất tốn kém. Một số thách thức xuất hiện khi xây dựng cơ sở hạ tầng tối ưu hóa, hiệu quả về chi phí và khả dụng cao trên AWS:

  • Giá cả
  • Instance sizing
  • Sử dụng container

Spotinst là Đối tác cao cấp AWS Partner Network chuyên về container. Spotinst giúp các công ty tự động hóa quản lý cơ sở hạ tầng đám mây và tiết kiệm chi phí điện toán AWS. Bằng cách tận dụng Amazon EC2 Spot Instances một cách dễ dàng.

Thách thức

Để sử dụng đám mây hiệu quả, cần có cơ sở hạ tầng linh hoạt bằng cách scaling. Thực hiện dựa trên các yêu cầu tài nguyên như CPU ​​hoặc sử dụng bộ nhớ. Trong khi mở rộng quy mô ứng dụng, Kubernetes không quản lý được cơ sở hạ tầng bên dưới. Giống như hầu hết các bộ điều phối container được thiết kế với một trung tâm dữ liệu vật lý. Giả định rằng công suất luôn có sẵn khi các ứng dụng mở rộng quy mô.

Hãy cùng xem xét kỹ hơn những thách thức khi xây dựng cơ sở hạ tầng tối ưu hóa trên AWS

 

Giá cả

Có ba mô hình định giá khả dụng trên AWS: on-demand, reserved và spot. Chúng ta cần quyết định mô hình nào hoạt động tốt nhất cho mọi phần workload. Kubernetes làm tốt khả năng phục hồi và xử lý sự gián đoạn hoặc thay thế máy chủ. Với mức chiết khấu 70% so với giá on-demand.

Điều quan trọng là duy trì workload lien tục cũng như dự đoán chi phí. RI của Amazon EC2 đảm bảo công suất cơ bản có hiệu quả về chi phí.

 

Instance Sizing

Thách thức thứ hai và cũng là phức tạp nhất là chọn instance sizing phù hợp. Có nên gắn liền với một loại instance? Nên mix các family hay kích thước instance? Nên làm gì khi một pod GPU xuất hiện để thực hiện công việc nhanh chóng một vài lần một ngày?

Theo truyền thống, câu trả lời cho các câu hỏi này là “nó thay đổi theo tình huống”. Các cluster phát triển và nhiều dev đưa các container mới và khác nhau vào Kubernetes. Dẫn đến câu trả lời liên tục thay đổi cho các câu hỏi ở trên. Hơn nữa, cần tìm ra cách đảm bảo tiếp tục scaling và giải quyết các thay đổi trong ứng dụng. Để minh họa, một số container yêu cầu 0,2vCPU và 200 MB bộ nhớ. Những container khác yêu cầu 8vCPU và 16GB bộ nhớ trở lên.

Do đó, việc thiết lập chính sách scaling tự động phù hợp dựa trên ngưỡng CPU.

 

Sử dụng serverless container

Thách thức thứ ba và ít được giải quyết nhất là việc sử dụng container. Điều này liên quan đến việc liên tục điều chỉnh các giới hạn và nguồn lực của các container. Thực hiện  dựa trên mức tiêu thụ và sử dụng của chúng. Ngay cả sau khi giải quyết hai vấn đề đầu tiên thành công, làm thế nào để biết container có bị phân bổ quá mức?

Có một pod 3.8vCPU và 7.5 GB trên instance c5.xlarge là điều tuyệt vời. Vì instance allocate gần 100%, nhưng nếu pod đó chỉ sử dụng một nửa thì sao?  Nghĩa là một nửa tài nguyên cá thể bị lãng phí và có thể được sử dụng bởi các container khác.

Giải quyết thành công cho tất cả các vấn đề này giúp cắt giảm chi phí và thời gian của dev. Bằng cách có cơ sở hạ tầng và các serverless container tự tối ưu hóa trong thời gian thực.

 

SPOTINST

Spotinst đã xây dựng một nền tảng tự động hóa DevOps giúp khách hàng tiết kiệm thời gian và tiền bạc.

Cốt lõi của nền tảng Spotinst là một cơ chế lập lịch cơ sở hạ tầng tinh vi dựa trên dữ liệu. Cho phép chạy khối lượng công việc mức độ thực tế trên các Spot instance. Trong khi sử dụng nhiều loại và size instance. Spotinst cung cấp SLA cấp doanh nghiệp trên các spot instance. Trong khi vẫn đảm bảo sử dụng đầy đủ các RI.

Spotinst đã xây dựng Ocean – một dịch vụ giám sát và điều chỉnh tự động điều khiển theo nhóm Kubernetes. Ocean tự động giải quyết theo thời gian thực. Đồng thời tạo ra trải nghiệm serverless trong môi trường AWS mà không truy cập vào dữ liệu. Ngoài ra, Ocean giúp bạn đặt đúng size các pod trong cluster để sử dụng tài nguyên tối ưu. Spotinst giải quyết các thách thức về giá và kích thước instance. Bằng cách tự động mở rộng serverless container. Dựa trên size instance linh hoạt và vòng đời.

Có ba thành phần chính ở đây. Quy mô cơ sở hạ tầng, mô phỏng sắp xếp lại pod và cluster headroom.

 

Scaling cơ sở hạ tầng

Spotinst Ocean cho phép khách hàng chạy on-demand, Spot và Reserved trong một cluster. Instance phù hợp được cung cấp khi cần, trong khi đảm bảo tài việc lãng phí tài nguyên là thấp nhất.

Bất cứ khi nào Kubernetes Horizontal Pod Autoscaler (HPA) mở rộng hoặc triển khai, Ocean sẽ đọc các yêu cầu chung. Bao gồm các:

  • Đặt trước CPU
  • Đặt trước bộ nhớ
  • Yêu cầu GPU
  • Những hạn chế của ENI
  • Nhãn pod, taints và toleration
  • Nhãn tùy chỉnh (bộ chọn instance, yêu cầu on-demand)
  • Yêu cầu volume liên tục

Sau khi tổng hợp các yêu cầu này, Ocean tính toán cơ sở hạ tầng hiệu quả nhất cho yêu cầu. Đây có thể là bất cứ nơi nào từ một t2.small đơn lẻ đến sự kết hợp của một số M5.2xlarge, C5.18xlarge, P3.xlarge, R4.large.

Sử dụng các instance family và size giúp đạt defragmented cao với cluster phân bổ cao khi phát triển và tăng quy mô.

 

Mô phỏng sắp xếp lại Pod

Cơ sở hạ tầng năng động này đảm bảo phân bổ nguồn lực tối đa khi mở rộng và phát triển cluster.

Để đảm bảo việc phân bổ được duy trì khi Kubernetes scale down cluster khi nhu cầu ứng dụng giảm, Ocean chạy mô phỏng sắp xếp lại pod sau mỗi 60 giây để tìm hiểu xem cluster có thể được phân thêm hay không.

Bằng cách xem xét tất cả các yêu cầu, Ocean kiểm tra các node có thể dùng được. Chúng có thể làm các pod cạn kiệt và node bị xóa khỏi cluster mà không có bất kỳ nhóm nào chuyển sang trạng thái đang chờ xử lý và được lên lịch tới các node hiện có khác trong cluster.

 

pod-allocate-renova-cloud
Mô phỏng sắp xếp Pod

 

Trong hình mô phỏng sắp xếp lại pod khi thu nhỏ các nút có thể sử dụng. Xem xét các pod và instance cũng như các hạn chế khác. Ở đây, có thể giảm kích thước cụm khoảng 10%. So với tỷ lệ trước, CPU và bộ nhớ sau scale.

 

Trụ sở cluster

Scaling cơ sở hạ tầng khi cần có thể đạt được sự phân bổ node tối đa. Nhưng cũng có thể làm chậm khả năng phản hồi của ứng dụng. Độ sẵn sàng cao rất quan trọng. Nhưng việc chờ đợi các node mới tăng lên mỗi khi cần dung lượng dẫn đến các vấn đề hiệu suất. Đây là nơi cluster headroom đi vào.

Headroom là một khối lượng các đơn vị công việc có sẵn trong các kích cỡ của các triển khai phổ biến nhất có sẵn. Cho phép Kubernetes lập tức lên lịch các nhóm mới. Headroom được Ocean tự động định cấu hình dựa trên kích thước của từng triển khai trong cluster và thay đổi linh hoạt theo thời gian.

Trong thực tế, headroom có hiệu quả nghĩa là hơn 90 phần trăm các sự kiện mở rộng trong Kubernetes ngay lập tức được lên lịch trên cluster vào khả năng của headroom, kết hợp với một lời kêu gọi cho một sự kiện mở rộng quy mô để chuẩn bị cho lần scale Kubernetes tiếp theo.

Trong trường hợp triển khai bất thường xảy ra đòi hỏi nhiều hơn khoảng không có sẵn, bộ chia tỷ lệ tự động cụm xử lý các sự kiện chia tỷ lệ với một sự kiện tỷ lệ duy nhất gồm các loại và kích cỡ khác nhau để đáp ứng toàn bộ yêu cầu tài nguyên triển khai. Điều này giúp Ocean đạt được phân bổ tài nguyên 90 phần trăm trong cụm trong khi vẫn phản ứng nhanh hơn chính sách mở rộng bước truyền thống.

 

Giám sát việc sử dụng CPU và bộ nhớ

Khi các nhóm được đặt trong các instance, cơ chế Ocean Pod Right-Sizing sẽ bắt đầu theo dõi các pod cho việc sử dụng CPU và bộ nhớ. Sau khi tổng hợp đủ dữ liệu, Ocean bắt đầu đưa ra các khuyến nghị về cách đặt đúng kích cỡ của nhóm.

Ví dụ: nếu một nhóm được phân bổ với 4GB bộ nhớ và trong vài ngày, mức sử dụng của nó là từ 2 GB đến 3,4 GB, với mức trung bình là 2,9 GB, Ocean Right-Sizing sẽ khuyên bạn nên định cỡ cho nhóm ở mức ~ 3,4 GB, điều này sẽ giúp bin back và chống phân mảnh cluster.

Picture2

Trong Hình 2, bạn có thể thấy kiến ​​trúc triển khai của Ocean + Amazon Elastic Kubernetes Service (Amazon EKS) nơi EKS quản lý ngăn điều khiển Kubernetes và  các work node Ocean. Kiến trúc và bảo mật Amazon EKS giữ nguyên vị trí và Ocean quấn quanh các work node để tự động sắp xếp chúng.

Picture3

Trong Hình 3, bạn thấy Ocean chung với các work node kết nối với một trong các bộ điều phối serverless container được hỗ trợ. Ở bên trái, có thể thấy sự đa dạng của các control planes quản lý serverless container. Ở bên phải, Ocean quấn quanh các worker node.

 

Hướng dẫn thực hiện

Sử dụng Spotinst Ocean cho việc triển khai Kubernetes hiện tại rất đơn giản. Thực hiện chỉ trong vài phút bằng Amazon Cloud Formation, Terraform, Ansible, RESTful API hoặc Spotinst UI. Ocean phối hợp trong môi trường AWS và tận dụng các tổ hợp cluster hiện có. Bao gồm đám mây riêng ảo (VPC), mạng con, vai trò AWS Identity và Access Management (IAM), Ngoài ra còn hình ảnh, nhóm bảo mật, hồ sơ cá nhân, cặp khóa, dữ liệu người dùng và các tag.

Tóm lại, Ocean sẽ tìm nạp tất cả các cấu hình hiện có từ cluster. Và xây dựng cấu hình cho các work node mà nó sẽ spin up. Sau đó, triển khai Spotinst Kubernetes Cluster Controller vào cluster để Ocean có thể lấy số liệu Kubernetes báo cáo cho nó. Ocean sẽ xử lý tất cả việc cung cấp cơ sở hạ tầng cho bạn trong tương lai. Nên để các developer hoàn toàn tự do để triển khai bất cứ điều gì họ chọn.

Hãy xem qua thiết lập dưới đây để có thể thấy nó đơn giản như thế nào.

  • Đầu tiên, bên phía trái của Ocean > Cloud Clusters. Sau đó chọn Create Cluster 

Picture5

Trên màn hình tiếp theo, chọn tham gia một cụm hiện có hoặc tạo một cụm mới.

Picture6

Trong thanh tab General, chọn tên cluster, vùng miền và Auto Scaling Group. Để nhập các cấu hình worker node.

Picture7Trong trang Configuration, xác minh tất cả các cấu hình được nhập và chọn Next

Picture10

Để cài đặt bộ điều khiển, tạo mã thông báo trong Bước 1 của trình hướng dẫn. Chạy tập lệnh được cung cấp trong Bước 2. Đợi hai phút và kiểm tra kết nối. Một mũi tên màu xanh lá cây sẽ xuất hiện.

 

Picture11

Ở trang cuối cùng, có thể thấy cấu hình JSON của cluster. Lấy 1 bảng Terraform cùng chỗ với tất cả cấu hình của cluster.

Sau khi ra review, tạo một cluster và Ocean sẽ xử lý và tối ưu cơ sở hạ tầng.

 

Tối ưu hóa data

Bây giờ chúng ta đã biết Ocean là gì và làm thể nào để thúc đẩy nó. Hãy nhìn vào các con số và lợi ích của một ví dụ thật. Thấy việc sử dụng hạ tầng chủ động có ích như thế nào

Ví dụ 1: Pod yêu cầu bộ nhớ 6,500mb và 1.5vCPUs – Instance size khác

Khi chạy 5 pod trên m5.large hay m5.xlarge instances sẽ tốn $0.096 /pod / giờ. Tuy nhiên, phát triển lên đến 2XL sẽ cho phép bin – packing nhiều hơn. Giảm chi phí xuống còn $0.77 / pod / giờ

Picture20

Ở hình phía trên, sau khi size up, có thể phân bổ tài nguyên hiệu quả hơn. Giảm thêm  20% chi phí.

 

Ví dụ 2: Pod của bộ nhớ 6500mn và 1.8vCPUs – Gia đình Instance khác

Khi chạy bản sao của các pods trên c5.xlarge, nó chỉ cho phép 1 pod 1 instance. Trong khi m5.xlarge cho phép 2 pod. Và giảm chi phí từ $0.17 xuống còn $0.096 / pod / giờ

Picture30

Hình trên cho thấy, bằng cách thay đổi instance family. Cải thiện việc phân bổ và giảm được 43% chi phí.

 

KẾT LUẬN

Tóm lại, khi chạy Kubernetes cluster trên AWS sẽ có 3 thử thách. Về tối ưu hóa, chi phí và độ sẵn sàng. Spotinst giúp hỗ trợ tự động hóa và giải quyết.

  1. Cấu trúc chi phí: Spotinst Ocean tự động cho 100% độ bao phủ Reserved Instance. Bảo đảm bảo việc  tận dụng các Spot instance hiệu quả.
  2. Instance sizing: sử dụng scaling tự động di chuyển serverless container. Ocean quay đúng instance đúng thời điểm dựa trên các yêu cầu pod.
  3. Sử dụng serverless container: Ocean giám sát việc sử dụng serverless container. Sử dụng kích thước đúng và tránh các tài nguyên nhàn rỗi.

Giờ đây việc quản lý các cluster Kubernetes trên AWS trở nên dễ dàng hơn. Nếu mới sử dụng Kubernetes, bạn hãy xem Amazon EKS + Spotinst Ocean Quick Start nhé.