phát triển các giải pháp tự mở rộng tùy biến để tối ưu hóa tài nguyên trong môi trường kubernetes

52 0 0
Tài liệu đã được kiểm tra trùng lặp
phát triển các giải pháp tự mở rộng tùy biến để tối ưu hóa tài nguyên trong môi trường kubernetes

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Trang 2

ĐẠI HỌC QUỐC GIA HÀ NỘITRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Trang 3

VIETNAM NATIONAL UNIVERSITY, HANOIUNIVERSITY OF ENGINEERING AND TECHNOLOGY

Duong Duc Tung

DEVELOP CUSTOMIZABLE AUTO – SCALINGSOLUTIONS TO OPTIMIZE RESOURCES WITHIN A

KUBERNETES ENVIRONMENT

BACHELOR’S THESISMajor: Computer science

Supervisor: Assoc Prof., Dr Truong Ninh Thuan

Ha Noi – 2024

Trang 4

LỜI CAM ĐOAN

Em xin cam đoan: Khóa luận tốt nghiệp với đề tài "PHÁT TRIỂN CÁC GIẢIPHÁP TỰ MỞ RỘNG TÙY BIẾN ĐỂ TỐI ƯU HÓA TÀI NGUYÊN TRONG MÔITRƯỜNG KUBERNETES" trong báo cáo này là của em Những gì em viết ra khôngcó sự sao chép từ các tài liệu, không sử dụng kết quả của người khác mà không tríchdẫn cụ thể Đây là công trình nghiên cứu cá nhân em tự phát triển, không sao chép mãnguồn của người khác Nếu vi phạm những điều trên, em xin chấp nhận tất cả nhữngtruy cứu về trách nhiệm theo quy định của Trường Đại học Công nghệ - ĐHQGHN.

Hà Nội, ngày … tháng … năm 2024Sinh viên

Dương Đức Tùng

Trang 5

LỜI CẢM ƠN

Lời đầu tiên cho phép em được gửi lời cảm ơn tới Khoa Công Nghệ Thông Tin –Trường Đại học Công nghệ - ĐHQG Hà Nội đã tạo điều kiện thuận lợi cho em đượchọc tập, nghiên cứu và thực hiện đề tài tốt nghiệp này.

Em cũng xin được bày tỏ lòng biết ơn sâu sắc tới thầy Trương Ninh Thuận đã tậntình hướng dẫn, đóng góp những ý kiến xác đáng để em có thể hoàn thành khóa luậnmột cách tốt nhất Em cảm thấy may mắn khi được thầy hướng dẫn cũng như địnhhướng mục tiêu trong quá trình học tập, nghiên cứu.

Em cũng vô cùng biết ơn những thầy cô trong trường đã tận tình giảng dạy, trangbị cho em những kiến thức quan trọng để em có hành trang vững chắc cho con đườnghọc vấn của mình.

Trang 6

TÓM TẮT

Tóm tắt: Trong lĩnh vực công nghệ thông tin, việc quản lý và tối ưu hóa tài nguyên trong môi

trường Kubernetes đóng vai trò quan trọng trong việc duy trì hiệu suất và độ tin cậy của các ứngdụng container hóa Các giải pháp tự động mở rộng như Horizontal Pod Autoscaler (HPA) vàVertical Pod Autoscaler (VPA) đã cung cấp những công cụ quan trọng để thích ứng với tải hệ thốngbiến đổi Tuy nhiên, việc áp dụng một cách linh hoạt và hiệu quả những giải pháp này trong thực tếvẫn còn gặp nhiều thách thức, bao gồm khả năng tùy biến và phản ứng với các điều kiện hệ thống đadạng Đề tài này nhằm mục đích phát triển và tối ưu hóa các phương pháp auto-scaling trongKubernetes, thông qua việc tinh chỉnh và kết hợp các giải pháp tự động mở rộng hiện có với cácchiến lược mới được thiết kế để cải thiện sự tương tác và đáp ứng nhanh chóng với nhu cầu tàinguyên của ứng dụng Điều này bao gồm việc phát triển các cơ chế điều chỉnh quy mô dựa trên đánhgiá tổng hợp về tài nguyên hệ thống và tải ứng dụng, cũng như việc tích hợp các tín hiệu từ môitrường vận hành để đạt được quản lý tài nguyên tối ưu Nghiên cứu tập trung vào việc đánh giá hiệusuất và độ tin cậy của các giải pháp tự động mở rộng được đề xuất, qua đó đóng góp vào việc nângcao hiệu quả vận hành của hệ thống Kubernetes trong môi trường sản xuất, giảm thiểu chi phí và tốiđa hóa sự hài lòng của người dùng cuối.

Trang 7

Abstract: In the field of information technology, managing and optimizing resources within

Kubernetes environments plays a pivotal role in maintaining the performance and reliability ofcontainerized applications Automated scaling solutions such as Horizontal Pod Autoscaler (HPA)and Vertical Pod Autoscaler (VPA) have provided essential tools to adapt to fluctuating systemloads However, the practical application of these solutions in a flexible and effective manner stillfaces numerous challenges, including customization capabilities and responsiveness to diversesystem conditions This project aims to develop and optimize auto-scaling methods in Kubernetes byrefining and combining existing automated scaling solutions with newly designed strategies toimprove interaction and quick response to application resource demands This includes developingmechanisms for adjusting scales based on a comprehensive assessment of system resources andapplication loads, as well as integrating signals from the operational environment to achieve optimalresource management The study focuses on evaluating the performance and reliability of theproposed automated scaling solutions, thereby contributing to enhancing the operational efficiencyof Kubernetes systems in production environments, minimizing costs, and maximizing end-usersatisfaction.

Trang 8

Chương 2 Xây dựng giải pháp mở rộng tuỳ biến cho ứng dụng15

Trang 9

Danh sách hình vẽ

Trang 10

Danh sách bảng

Trang 11

Danh sách thuật toán

Trang 12

Danh sách đoạn mã

Trang 13

Thuật ngữThuật ngữ

Ý nghĩaTừ viết tắtTừ đầy đủ

AST Abstract Syntax Tree Cây cú pháp trừu tượngCFG Control Flow Graph Đồ thị dòng điều khiểnSMT Satisfiability Modulo Theories Lý thuyết Mô-đun thỏa mãn

Trang 14

Đặt vấn đề

Trang 15

Chương 1

Kiến thức cơ sở

1.1 Tổng quan về Container và Docker

Trong bối cảnh hiện nay, việc đảm bảo tính sẵn sàng và hiệu quả của các ứngdụng trở nên cực kỳ quan trọng, đặc biệt là trong các môi trường phức tạp nhưKubernetes Kubernetes cung cấp cơ sở hạ tầng cho việc triển khai, quản lý và mởrộng các ứng dụng dựa trên container một cách linh hoạt và tự động Tuy nhiên, việcxây dựng một hệ thống đáp ứng nhu cầu biến đổi của tải công việc, mà không gây lãngphí tài nguyên hoặc thiếu hụt tài nguyên, là một thách thức đáng kể.

Các doanh nghiệp và nhà phát triển cần phải đối mặt với nhu cầu không ngừngthay đổi của ứng dụng và tải công việc, điều này đòi hỏi hệ thống phải có khả năng tựđộng điều chỉnh quy mô của mình Trong môi trường Kubernetes, việc mở rộng tựđộng phụ thuộc vào việc cấu hình chính xác và hiểu biết sâu sắc về nhu cầu tài nguyênthực tế của ứng dụng Điều này bao gồm việc thiết lập các ngưỡng tài nguyên chínhxác cho CPU và bộ nhớ, cũng như khả năng phản ứng nhanh chóng và chính xác vớisự thay đổi trong lưu lượng truy cập và tải công việc.

Để làm được điều đó, chúng ta cần một hệ thống mở rộng tự động dựa trên cácquy tắc cụ thể và thông số đo lường chính xác từ hệ thống Điều này bao gồm việcthiết lập các ngưỡng cho CPU, bộ nhớ và các chỉ số tài nguyên khác, cũng như phảnứng nhanh chóng với sự thay đổi của chúng.

Trang 16

Bài toán đặt ra là làm thế nào để thiết kế và triển khai một giải pháp tự mở rộngtuỳ biến hiệu quả trong môi trường Kubernetes, giúp các doanh nghiệp có thể tự độngđiều chỉnh tài nguyên dựa trên nhu cầu thực tế và các điều kiện kinh doanh cụ thể,đồng thời giảm thiểu thời gian chậm trễ và tối ưu hóa chi phí.

Giải quyết thách thức này đòi hỏi việc sâu rộng về cách thức hoạt động củaKubernetes, cũng như hiểu biết về các công cụ và chiến lược mở rộng tự động nhưHorizontal Pod Autoscaler (HPA), Vertical Pod Autoscaler (VPA), Mục tiêu cuốicùng là xây dựng một hệ thống có khả năng tự động điều chỉnh tài nguyên dựa trên cácyêu cầu thực tế một cách chính xác và kịp thời, tối ưu hóa việc sử dụng tài nguyên vàcung cấp trải nghiệm người dùng không bị gián đoạn.

Phần còn lại của khóa luận có cấu trúc như sau

1.2 Tổng quan về Container và Docker

Trong thế giới phát triển phần mềm hiện đại, việc đảm bảo rằng ứng dụng chạymột cách nhất quán và hiệu quả trong mọi môi trường từ phát triển đến sản xuất là cựckỳ quan trọng Để đạt được mục tiêu này, công nghệ Container đã thay đổi cách chúngta triển khai và quản lý ứng dụng.

Thông qua việc áp dụng công nghệ container các công cụ như Docker hayContainerd, các tổ chức và doanh nghiệp có thể đạt được mức độ tự động hóa và linhhoạt cao, giúp tăng tốc độ triển khai ứng dụng và cải thiện khả năng sẵn sàng của hệthống Điều này không chỉ mang lại lợi ích cho đội ngũ phát triển và vận hành mà còncải thiện trải nghiệm người dùng cuối bằng cách đảm bảo rằng ứng dụng luôn có sẵn,hiệu quả và an toàn.

1.2.1 Công nghệ Container & Containerization

Container là một môi trường ảo nhẹ, cung cấp cô lập cho mỗi ứng dụng hoặc

dịch vụ Mỗi container chạy một ứng dụng và tất cả phụ thuộc của nó trong một khônggian người dùng riêng biệt Các container chia sẻ cùng một hệ điều hành với hệ thốngmáy chủ và các container khác, nhưng chúng được cô lập về mặt tài nguyên và quá

Trang 17

trình Điều này giúp giảm đáng kể lượng tài nguyên cần thiết so với việc chạy các ứngdụng trên máy ảo riêng biệt, vì không cần phải khởi động một hệ điều hành đầy đủ chomỗi ứng dụng.

Containerization là quá trình sử dụng container để đóng gói ứng dụng và mọi

thứ cần thiết để chạy ứng dụng đó (bao gồm mã, thư viện, công cụ, tệp cấu hình vàbiến môi trường) vào một gói độc lập Điều này giúp đảm bảo rằng ứng dụng chạy mộtcách nhất quán và đáng tin cậy trên bất kỳ môi trường tính toán nào, từ máy phát triểnđịa phương đến môi trường sản xuất trên đám mây Quá trình containerization đã cáchmạng hóa cách chúng ta triển khai phần mềm, cho phép việc triển khai nhanh chóng,dễ dàng và linh hoạt hơn nhiều so với trước đây.

Những lợi ích của Containerization:

Nhất quán & Di động: Containers đảm bảo rằng ứng dụng chạy một cách nhất quán

trong mọi môi trường, từ máy phát triển địa phương đến máy chủ trong môi trườngsản xuất.

Tối ưu hóa Tài nguyên: Do chia sẻ hệ điều hành máy chủ, containers sử dụng ít tài

nguyên hơn so với máy ảo, cho phép khả năng mở rộng và sử dụng hiệu quả tàinguyên hệ thống.

Cô Lập & An toàn: Mỗi container cô lập với nhau và với hệ thống máy chủ, giúp cải

thiện bảo mật và giảm nguy cơ xung đột giữa các ứng dụng.

Phát triển & Triển khai Nhanh chóng: Containerization giúp đơn giản hóa quá

trình CI/CD, cho phép phát triển và triển khai ứng dụng nhanh chóng và dễ dàng.

Trang 18

1.2.2 Tổng quan về Docker

Docker là một công cụ phần mềm mã nguồn mở dùng để tự động hóa việc triển

khai ứng dụng dưới dạng Containerized, cho phép chúng chạy trên bất kỳ hệ thốngLinux nào cũng như cung cấp hỗ trợ cho Windows Docker sử dụng tính năng cô lậptài nguyên của hạt nhân Linux, như cgroups và không gian tên, để tạo và quản lýcontainer.

Các khái niệm liên quan:

Docker Engine: Là một ứng dụng server - client bao gồm một dịch vụ máy chủ là

một tiến trình daemon; một API xác định cách ứng dụng và dịch vụ nói chuyệnvới nhau; và một client CLI (Docker CLI).

Docker Images: Là một bản mẫu chỉ đọc dùng để tạo ra Docker container Một

image chứa tất cả cần thiết để chạy một ứng dụng, bao gồm mã ứng dụng, mộtruntime, thư viện, biến môi trường, và file cấu hình.

Docker Containers: Là thực thể chạy của một Docker image Container là nơi

ứng dụng thực sự chạy và thực hiện Chúng có thể được bắt đầu, dừng, di chuyển,và xóa.

Docker CLI: cung cấp một loạt các lệnh cho phép người dùng tạo, chạy, và quản

lý Docker containers và images.

Dockerfile: là một file văn bản không định dạng chứa tất cả các lệnh mà người

dùng có thể gọi từ dòng lệnh để tạo một image Bằng cách sử dụng Dockerfile,người dùng có thể tự động hóa quá trình tạo Docker image.

Docker Compose là một công cụ giúp định nghĩa và chạy các ứng dụng Docker

đa-container Với Docker Compose, bạn sử dụng một file YAML để cấu hình dịchvụ của mình Sau đó, với một lệnh đơn giản, bạn tạo và bắt đầu tất cả các dịch vụtừ cấu hình của mình.

Docker Hub: là một dịch vụ registry cung cấp cho người dùng khả năng chia sẻ

và quản lý Docker images công cộng hoặc riêng tư Nó giống như GitHub nhưngdành cho Docker images.

Trang 19

Docker Registry: là một ứng dụng máy chủ lưu trữ và phân phối Docker images.

Người dùng có thể lưu trữ images trên registry riêng của họ hoặc sử dụng DockerHub.

Quy trình của một hệ thống sử dụng Docker:

Hình 1 Quy trình của hệ thống sử dụng Docker

Build: Đầu tiên tạo một Dockerfile, là một hướng dẫn tuần tự dành cho Docker

chứa các bước đóng gói & khởi tạo ứng dụng từ source code Dockerfile này sẽđược build tại một máy tính đã cài đặt Docker Engine Sau khi build, một DockerImage sẽ được tạo ra Docker Image này chứa ứng dụng kèm bộ thư viện.

Push: Sau khi có được Docker Image, thực hiện push Docker Image này lên một

Docker Registry và lưu tại đó.

Pull & Run: Nếu một máy tính khác đã cài Docker Engine muốn sử dụng Docker

Image thì bắt buộc máy phải thực hiện việc pull Docker Image Sau đó thực hiệnRun Container từ Image đó.

Trang 20

1.3 Khái niệm Container Ochestration & Kubernetes

Trong khi Docker đã cách mạng hóa việc đóng gói và triển khai ứng dụng thôngqua container, nó bắt đầu gặp hạn chế khi xử lý các ứng dụng lớn và phức tạp cầnđược triển khai trên quy mô lớn Docker tập trung vào việc container hóa và chạycontainer một cách hiệu quả, nhưng không giải quyết vấn đề về việc tự động quản lý,mở rộng, và điều phối các container trong môi trường sản xuất đa dạng và phân tán.

Kubernetes xuất hiện như một giải pháp cho những hạn chế này, cung cấp mộtnền tảng mạnh mẽ cho việc tự động hóa việc triển khai, mở rộng và quản lý ứng dụngcontainerized Với khả năng quản lý cụm container, tự động phục hồi, và mở rộng dựatrên tải, Kubernetes không chỉ giải quyết những hạn chế của Docker mà còn mở ra cơhội mới cho việc triển khai ứng dụng quy mô lớn một cách linh hoạt và hiệu quả.

1.3.1 Khái niệm Container Orchestration

Container Orchestration là quá trình tự động hóa việc triển khai, quản lý, mở

rộng, và điều phối hoạt động của các container Khi ứng dụng dựa trên container trởnên phức tạp và phải được triển khai trên nhiều máy chủ, việc quản lý chúng một cáchthủ công trở nên không khả thi Container orchestration giúp giải quyết vấn đề nàybằng cách cung cấp các công cụ để quản lý cuộc sống của container ở quy mô lớn.

Tại sao cần Container Orchestration?

Quản lý quy mô: Khi ứng dụng của bạn cần phải chạy trên hàng trăm hoặc hàng

ngàn container, việc quản lý chúng một cách thủ công là không thể.

Tối ưu hóa tài nguyên: Orchestration giúp đảm bảo rằng container được lập kế

hoạch (scheduled) trên các máy chủ với sự tối ưu hóa tài nguyên, giảm thiểu lãngphí.

Tự động hóa triển khai: Tự động hóa việc triển khai và cập nhật ứng dụng mà

không gây gián đoạn dịch vụ.

Trang 21

Tự phục hồi: Tự động phục hồi các container thất bại, đảm bảo ứng dụng luôn

online và hoạt động.

Mở rộng dễ dàng: Cho phép tự động mở rộng (scale out/in) ứng dụng dựa trên

nhu cầu sử dụng tài nguyên hoặc lưu lượng truy cập.

Container Orchestration giúp quản lý vòng đời của Container, bao gồm việc triểnkhai, cập nhật, mở rộng quy mô, và loại bỏ các Container Nó cũng đảm bảo rằng cácContainer có sự cô lập tài nguyên cần thiết, được kết nối mạng đúng cách và có khảnăng chịu lỗi cao bằng cách tự động hóa việc lập lịch chạy Container, cân bằng tải, vàquản lý tài nguyên, container orchestration giúp giảm thiểu thời gian downtime và tốiưu hóa việc sử dụng tài nguyên.

Những công cụ orchestration như Kubernetes, Docker Swarm, và Apache Mesosđã trở nên phổ biến, mỗi công cụ có những đặc điểm và lợi ích riêng, phù hợp với nhucầu và môi trường triển khai khác nhau Kubernetes, đặc biệt, đã trở thành giải pháphàng đầu trong việc quản lý container trên quy mô lớn, cung cấp một hệ thống đầy đủtính năng và linh hoạt, cho phép các doanh nghiệp triển khai ứng dụng một cách nhanhchóng và dễ dàng mở rộng quy mô theo nhu cầu.

1.3.2 Giới thiệu về Kubernetes

Kubernetes, còn được gọi là K8s, là một công cụ Container Orchestration mãnguồn mở, được thiết kế để tự động hóa việc triển khai, mở rộng, và quản lý các ứngdụng containerized Phát triển bởi Google và sau đó được Cloud Native ComputingFoundation (CNCF) quản lý, Kubernetes đã trở thành tiêu chuẩn ngành cho việc quảnlý container trên quy mô lớn, cung cấp một cách linh hoạt và mạnh mẽ để quản lý cáctải công việc và dịch vụ trong môi trường đám mây hoặc on - premise.

Những điểm nổi bật của Kubernetes:

Khả năng tự động hóa và tự phục hồi: Kubernetes tự động triển khai và

mở rộng ứng dụng dựa trên các yêu cầu tài nguyên và sử dụng các chính sách đểkhắc phục sự cố, đảm bảo ứng dụng luôn ổn định và khả dụng.

Trang 22

Khả năng mở rộng: Hỗ trợ mở rộng quy mô ứng dụng một cách linh hoạt,

cho phép tự động tăng hoặc giảm số lượng replicas của ứng dụng dựa trên lưulượng sử dụng thực tế, giúp tối ưu hóa chi phí và hiệu suất.

Quản lý tài nguyên đa dạng: Kubernetes cho phép quản lý một loạt tài

nguyên container, từ microservices đơn lẻ đến nhóm ứng dụng phức tạp, trên mộtcơ sở hạ tầng chung, giúp tối ưu hóa sử dụng tài nguyên và đơn giản hóa quy trìnhvận hành.

Tính di động và độc lập với cơ sở hạ tầng: Kubernetes giúp container

hoạt động độc lập với cơ sở hạ tầng, hỗ trợ triển khai ứng dụng trên mọi môitrường đám mây công cộng, riêng tư, hoặc hybrid, cũng như trên máy chủ vật lý,đảm bảo tính di động cao cho ứng dụng.

Cộng đồng mạnh mẽ và hỗ trợ rộng rãi: Kubernetes được hỗ trợ bởi một

cộng đồng người dùng và nhà phát triển đông đảo, cung cấp một lượng lớn tài liệuhướng dẫn, công cụ, và plugins để tăng cường khả năng và tính năng của hệthống.

1.3.3 Kiến trúc của Kubernetes

Kiến trúc Kubernetes được thiết kế để quản lý các ứng dụng Containerized trongmôi trường phân tán Về cốt lõi, Kubernetes tuân theo kiến trúc phi tập trung giúp điềuphối hiệu quả cơ sở hạ tầng điện toán, mạng và lưu trữ thay cho khối lượng công việccủa người dùng Kiến trúc này được tạo thành từ một số thành phần chính được tổchức trên các Master node và Worker node, đảm bảo thực thi liền mạch các ứng dụngContainerized.

Kiến trúc của một cụm máy chủ Kubernetes (Kubernetes Cluster):

Trang 23

Hình 2 Kiến trúc của cụm máy chủ Kubernetes (Kubernetes Cluster)

Master Node: Đóng vai trò là bộ não điều khiển trung tâm của Kubernetes Cluster,

quản lý trạng thái và hoạt động của cụm.

API Server: Là cổng giao tiếp chính với cụm Kubernetes, xử lý tất cả các yêu cầu

API và quản lý các đối tượng Kubernetes như Pods, Services, v.v.

etcd: Là cơ sở dữ liệu dạng key-value lưu trữ tất cả dữ liệu cấu hình của cụm, bao

gồm trạng thái và thông tin metadata.

Scheduler: Chịu trách nhiệm lên lịch các pods để chúng chạy trên các nút Worker

dựa trên tài nguyên có sẵn và các yêu cầu của pods.

Controller - Manager: Điều khiển các bộ điều khiển nền, đảm bảo các đối tượng

trong cụm phản ánh đúng trạng thái mong muốn.

Worker Node: Là nơi các ứng dụng thực sự được chạy dưới dạng Container.

Kubelet: Là một agent chạy trên mỗi nút Worker, quản lý các pods và containers

mà nó được giao.

Trang 24

Kube-proxy: Quản lý mạng cho containers bằng cách duy trì các quy tắc mạng

trên nút và thực hiện việc chuyển tiếp lưu lượng.

Container Runtime: Phần mềm chạy containers, Docker là một trong những

runtime phổ biến nhưng Kubernetes cũng hỗ trợ các runtime khác như containerdvà CRI-O.

1.3.4 Một số khái niệm chính trong Kubernetes

Kubernetes là một hệ thống phức tạp với nhiều khái niệm cốt lõi quan trọng Dướiđây là một số khái niệm chính trong Kubernetes mà bạn cần biết để hiểu rõ hơn vềcách thức hoạt động của nó:

Pods: Là đơn vị cơ bản nhất của Kubernetes, chứa một hoặc nhiều containers chạy

cùng nhau Mỗi Pod có một địa chỉ IP chung và các container trong Pod có thểchia sẻ tài nguyên mạng và lưu trữ.

Services: Là một cách để các ứng dụng chạy trên các Pods có thể tiếp xúc với thế

giới bên ngoài hoặc các ứng dụng khác trong cụm Kubernetes Services định nghĩamột bộ quy tắc để truy cập các Pods.

Workloads: Tham chiếu đến các nhiệm vụ hoặc tác vụ mà hệ thống cần thực hiện,

thường là chạy các ứng dụng Containerized Có một số những Workloads rất phổbiến trong Kubernetes như Deployments, StatefulSets, và DaemonSets.

Network: Điều khiển việc truy cập mạng vào các pods từ mạng ngoại vi hoặc các

nodes khác trong cluster Trong Kubernetes có Kube-Proxy để thực hiện điều phốimạng.

Storage: Xử lý việc lưu trữ cho các tài nguyên ứng dụng trong Kubernetes, bao

gồm Volumes, Persistent Volumes (PVs) và Persistent Volumes Claims (PVCs).

Trang 25

1.4 Quản lý tài nguyên trong Kubernetes

Kubernetes quản lý tài nguyên thông qua một hệ thống phức tạp nhưng linh hoạt,cho phép cấp phát và sử dụng tài nguyên một cách hiệu quả Trong môi trườngKubernetes, việc quản lý tài nguyên chủ yếu tập trung vào CPU và bộ nhớ (RAM),đồng thời cung cấp khả năng lên lịch, giới hạn và yêu cầu (limits và requests) cho cáccontainer.

Khi triển khai một Container trong Kubernetes, người dùng có thể chỉ định"requests" (yêu cầu) và "limits" (giới hạn) tài nguyên cho CPU và bộ nhớ:

Requests: Là lượng tài nguyên tối thiểu mà Kubernetes đảm bảo cung cấp cho

container Nó được sử dụng bởi Kubernetes khi lên lịch (scheduling) containerstrên một node Nếu một container cần nhiều tài nguyên hơn mức "request", nó cóthể sử dụng nhiều hơn miễn là các tài nguyên đó không được container khác yêucầu.

Limits: Định nghĩa lượng tài nguyên tối đa mà một container có thể sử dụng Nếu

một container sử dụng nhiều tài nguyên hơn "limit", nó có thể bị Kubernetes giếtchết và khởi động lại tùy thuộc vào chính sách của cụm.

Trong Kubernetes, đơn vị của CPU được tính bằng "millicores" Một core CPUtrong Kubernetes tương đương với một vCPU/Core trên hầu hết các nhà cung cấp dịchvụ đám mây và một core CPU vật lý hoặc luồng trên phần cứng máy chủ Dưới đây làmột ví dụ về chỉ định "request" và "limit" dành cho CPU:

Requests: Đặt requests CPU cho container là quyết định số millicores tối thiểu

mà container đó cần có Ví dụ, nếu đặt requests: 250m, điều này nghĩa là

container cần 0.25 cores để chạy.

Limits: Đặt limits CPU là cách để xác định số millicores tối đa mà container có

thể sử dụng Nếu container cố gắng sử dụng nhiều hơn, nó sẽ bị hạn chế Ví dụ,

nếu đặt limits: 1000m, container không thể sử dụng quá 1 core.

Trang 26

Bộ nhớ trong Kubernetes được tính bằng bytes nhưng thường được chỉ định bằngcác đơn vị như MiB (Mebibytes), GiB (Gibibytes) Dưới đây là một ví dụ về chỉ định"request" và "limit" dành cho bộ nhớ:

Requests: Đặt requests bộ nhớ cho container là quyết định lượng bộ nhớ tối thiểu

cần thiết cho container Điều này đảm bảo Kubernetes sẽ lên lịch container trên

một node với ít nhất lượng bộ nhớ này có sẵn Ví dụ: requests: 256Mi chỉ định

rằng container cần 256 Mebibytes bộ nhớ.

Limits: Đặt limits bộ nhớ là cách để xác định lượng bộ nhớ tối đa mà container có

thể sử dụng Nếu container cố gắng sử dụng nhiều hơn lượng này, nó có thể bị

Kubernetes kết thúc Ví dụ: limits: 1Gi chỉ định rằng container không được sử

dụng quá 1 Gibibyte bộ nhớ.

Kubernetes sử dụng Kube-scheduler để quyết định nút (node) nào trong cụm sẽchạy một pod mới Scheduler quyết định dựa trên nhiều yếu tố, bao gồm yêu cầu tàinguyên của pod, yêu cầu về tương thích phần cứng/phần mềm, chính sách cụm(Cluster Policy), workload trên các nodes, v.v

Kubelet trên mỗi node giám sát "limits" và "requests" của tài nguyên để đảm bảocontainers không tiêu thụ quá nhiều tài nguyên Nó kiểm soát containers để chúngkhông vượt quá giới hạn đã đặt và quản lý tài nguyên sao cho phù hợp với yêu cầu đãkhai báo.

Quản lý tài nguyên chặt chẽ thông qua "requests" và "limits" giúp tối ưu hóa việcsử dụng tài nguyên trong cụm, bảo đảm rằng các ứng dụng và dịch vụ có đủ tài nguyêncần thiết để hoạt động mà không làm ảnh hưởng đến các ứng dụng khác Điều này tạođiều kiện cho việc chia sẻ tài nguyên một cách hiệu quả giữa các ứng dụng, cải thiệnđộ ổn định và hiệu suất của hệ thống.

Qua việc đặt "requests" và "limits", Kubernetes cung cấp khả năng điều chỉnhlinh hoạt, cho phép các nhà phát triển và quản trị viên tối ưu hóa sử dụng tài nguyêndựa trên nhu cầu thực tế của ứng dụng và môi trường vận hành, từ đó tăng cường hiệusuất và tính sẵn sàng của ứng dụng.

Ngày đăng: 19/05/2024, 14:23

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan