NGHIÊN CỨU VÀ TRIỂN KHAI GIẢI PHÁP AUTOSCALING TRÊN NỀN TẢNG K8S CỦA GOOGLE CLOUD PLATFORM

87 5 0
NGHIÊN CỨU VÀ TRIỂN KHAI GIẢI PHÁP AUTOSCALING TRÊN NỀN TẢNG K8S CỦA GOOGLE CLOUD PLATFORM

Đ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

Sử dụng Vertical Scaling thêm tài nguyên bổ sung vào hệ thống để hệ thống đáp ứng nhu cầu và Horizontal Scaling thêm các máy vào cơ sở hạ tầng để đáp ứng với các nhu cầu mới. Triển khai một dự án web app trên nền tảng K8s cluster Từ kết quả demo, rút ra ưu nhược điểm riêng biệt của từng loại autoscaling Đưa ra giải pháp autoscaling dựa trên nhiều tham số đầu vào: sử dụng CPU, RAM, số lượng requests. Thực hiện và đánh giá hiệu năng hai giải pháp vertical autoscaling và horizontal autoscaling cho các trường hợp quá tải CPU, RAM, requests khác nhau Củng cố và nắm vững kiến thức về autoscaling

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠOBỘ NÔNG NGHIỆP VÀ PTNT

TRƯỜNG ĐẠI HỌC THỦY LỢI

HỒ CHÍ THIỆN

NGHIÊN CỨU VÀ TRIỂN KHAI GIẢI PHÁP AUTOSCALINGTRÊN NỀN TẢNG K8S CỦA GOOGLE CLOUD PLATFORM

ĐỒ ÁN TỐT NGHIỆP

HÀ NỘI, NĂM 2024

TRƯỜNG ĐẠI HỌC THỦY LỢI

Trang 2

HỒ CHÍ THIỆN

Nghiên cứu và triển khai giải pháp autoscaling trên nền tảng K8scủa Google Cloud Platform

Ngành : Công nghệ thông tin

Trang 3

Họ tên sinh viên: Hồ Chí Thiện Hệ đào tạo: Chính quy

Ngành: Công nghệ thông tin

Khoa: Công nghệ thông tin1 TÊN ĐỀ TÀI:

NGHIÊN CỨU VÀ TRIỂN KHAI GIẢI PHÁP AUTOSCALING TRÊN NỀNTẢNG K8S CỦA GOOGLE CLOUD PLATFORM

2 NỘI DUNG CÁC PHẦN THUYẾT MINHNội dung cần thuyết minhTỷ lệ (%)

Chương 2: Kiến trúc của Kubernetes 30%

3 GIÁO VIÊN HƯỚNG DẪN TỪNG PHẦN

Chương 1: Giới thiệu tổng quan

TS Đỗ Trường Xuân

Chương 2: Kiến trúc của Kuberneter

Chương 3: Giải pháp Autoscaling Chương 4: Cấu hình và Demo

Trang 4

4 NGÀY GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP

Trang 5

TRƯỜNG ĐẠI HỌC THUỶ LỢI

KHOA CÔNG NGHỆ THÔNG TIN

BẢN TÓM TẮT ĐỀ CƯƠNG ĐỒ ÁN TỐT NGHIỆP

TÊN ĐỀ TÀI: Nghiên cứu và triển khai giải pháp autoscaling trên nền tảng K8s của

Google Cloud Platform

Sinh viên thực hiện: Hồ Chí Thiện

Trong những năm gần đây, nhiều ứng dụng đã thực hiện container hoá bằng cách sử dụng docker Trên thực tế các ứng dụng sử dụng docker chạy trên môi trường production ngày càng tăng lên Trên môi trường production, việc cấu trúc hệ thống chạy bằng container chỉ sử dụng docker là rất khó khăn Cho nên việc sử dụng một Platform để điều phối các Container là cực kì cần thiết để giúp việc cấu trúc hệ thống trở nên dễ dàng hơn, K8s là một trong số đó

K8s hay còn gọi là Kubernetes, là một hệ thống mã nguồn mở, giúp tự động hóa việc quản lý, scaling và triển khai ứng dụng dưới dạng Container orchestration engine hay còn được gọi tắt là container Đây là một hệ sinh thái lớn và phát triển nhanh chóng trong các dịch vụ và công cụ đóng gói sẵn

Để giúp phân phối tài nguyên một cách hợp lý, K8s sử dụng một phương pháp phân phối gọi là autoscaling, phương pháp này giúp tự động mở rộng hoặc giảm thiểu số lượng các

Trang 6

tài nguyên máy tính được phân phối cho ứng dụng vào bất kỳ thời điểm nào theo nhu cầu sử dụng, nhằm giúp trải nghiệm một nền tảng không chỉ mạnh mẽ mà còn vô cùng linh hoạt, tiện lợi Nhằm tìm hiểu rõ về autoscaling cũng như cách hoạt động, em xin triển khai một dự án kubernetes cluster và áp dụng công nghệ autoscaling trên đó Dự án demo này sẽ giúp rút ra những nhận định chính xác nhất về ưu, nhược điểm trong từng phương loại autoscaling, qua đó có thể áp dụng linh hoạt hoặc kết hợp từng loại trong từng trường hợp khác nhau.

Các mục tiêu chính

(Liệt kê các mục tiêu chính của đề tài như tìm hiểu và ứng dụng một thuật toán/công nghệ, tìm hiểu và giải quyết một bài toán nghiệp vụ, phân tích đánh giá các giải pháp, …) Tìm hiểu về kiến trúc Kubernetes và các công cụ giám sát trên Kubernetes.

Tìm hiểu thế nào là tự động mở rộng (k8s autoscaling) Tìm hiểu thế nào là horizontal scaling và vertical scaling.

Tìm hiểu về những tham số đầu vào để thực hiện tự động mở rộng Triển khai một kubernetes cluster.

Tìm hiểu và đưa ra giải pháp autoscaling dựa trên các tham số đầu vào.

Kết quả dự kiến

 Sử dụng Vertical Scaling thêm tài nguyên bổ sung vào hệ thống để hệ thống đáp ứng nhu cầu và Horizontal Scaling thêm các máy vào cơ sở hạ tầng để đáp ứng với các nhu cầu mới.

 Triển khai một dự án web app trên nền tảng K8s cluster

 Từ kết quả demo, rút ra ưu nhược điểm riêng biệt của từng loại autoscaling

 Đưa ra giải pháp autoscaling dựa trên nhiều tham số đầu vào: sử dụng CPU, RAM, số lượng requests.

 Thực hiện và đánh giá hiệu năng hai giải pháp vertical autoscaling và horizontal autoscaling cho các trường hợp quá tải CPU, RAM, requests khác nhau

 Củng cố và nắm vững kiến thức về autoscaling

Trang 7

LỜI CAM ĐOAN

Tôi xin xác nhận rằng đây là Đồ án tốt nghiệp của mình và tất cả các kết quả được trình bày trong đều là trung thực, không sao chép từ bất kỳ nguồn thông tin nào dưới mọi hình

Trang 8

thức Nếu có tham khảo tài liệu, tôi đã tuân thủ quy định bằng cách trích dẫn và ghi chú nguồn đầy đủ

Tác giả ĐATNHồ Chí Thiện

Trang 9

LỜI CẢM ƠN

Sau bốn năm học tập tại trường Đại học Thủy Lợi, tôi đã tích lũy được những kiến thức chuyên môn quan trọng nhờ vào sự nhiệt huyết và tận tâm của các giáo viên Đây là nền tảng quý báu cho các bước tiến đầu tiên trên hành trình nghề nghiệp của tôi Tôi muốn

bày tỏ lòng biết ơn đặc biệt đến Thầy giáo TS Đỗ Trường Xuân, người đã hướng dẫn tôi

từ khi bắt đầu đến khi hoàn thành khóa luận này.

Ngoài ra, tôi cũng muốn gửi lời cảm ơn chân thành đến toàn bộ đội ngũ giáo viên của Khoa Công nghệ thông tin tại trường Đại học Thủy Lợi Những người thầy này không chỉ tận tâm mà còn chia sẻ những kiến thức hữu ích trong suốt thời gian học tập của tôi Sự sẵn sàng và hỗ trợ của họ đã tạo điều kiện thuận lợi giúp tôi hoàn thành bài luận này.

Trang 10

MỤC LỤC

LỜI CẢM ƠN 1

CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN 9

1.1 Tổng quan về Cloud Computing ( Điện toán đám mây) 9

1.1.1 Cloud Computing là gì? 9

1.1.2 Các tiện ích của “Cloud Computing” 10

1.1.3 Các nền tảng Cloud Computing phổ biến 11

1.1.4 Các công nghệ ảo hóa 12

1.2 Sự khác biệt VM(Virtual machine) và Container 14

1.4.4 Những tham số đầu vào để thực hiện AutoScaling 22

CHƯƠNG 2: KIẾN TRÚC KUBERNETES 24

2.1 Chức năng của Kubernetes 24

2.2 Kiến trúc Kubernetes 27

Trang 12

4.2 Triển khai hạ tầng 68

4.2.1 Triển khai cụm 68

4.2.2 Triển khai ứng dụng 69

4.3 Triển khai các giải pháp Autoscaling 70

4.3.1 Triển khai Horizontal Pod Autoscaling 70

4.3.2 Triển khai Vertical Pod Autoscaling 74

Trang 13

PHỤ LỤC HÌNH ẢNH

Hình 2.1 Các Load Balancing có thể thực hiện tăng giảm số lượng Replicas 24

Hình 2.2 Các container được điều phối tự động 25

Hình 2.3 K8s tự động phân tỷ lệ các Kubernetes cluster 25

Hình 2.4 Self-healing giúp tự động khôi phục các service khi node xảy ra lỗi 26

Hình 2.5 Sử dụng container image trong kiến trúc microservices 27

Hình 2.6 Kiến trúc Kubernetes 27

Hình 2.7 Pod trong Kubernetes 31

Hình 2.8 Node trong Kubernetes 32

Hình 2.9 Service và Pod trong Kubernetes 33

Hình 2.10 Mô hình Deployment và ReplicaSet 34

Hình 2.11 Mối quan hệ giữa Deployment, ReplicaSet và Pod trong Kubernetes 35

Hình 2.12 Cơ chế lựa chọn Label Selector 35

Hình 2.13 NameSpace trong Kubernetes 36

Hình 3.1 Mô hình Horizontal Pod Autoscaler 37

Hình 3.2 Quy trình thu thập Metrics 39

Hình 3.3 Horizontal Pod Autoscaling tính toán với nhiều metric 40

Hình 3.4 Horizontal Pod Autoscaling cập nhật trường replicas 41

Hình 3.5 Node Affinity 50

Hình 3.6 Node Affinity 53

Hình 3.7 Pod affinity 55

Hình 3.8 Kiến trúc Vertical Autoscaling 58

Hình 3.9 Quy trình Update Policy 60

Trang 14

Hình 3.10 Biểu đồ quá trình VPA 61

Hình 4.7 Triển khai HPA 70

Hình 4.8 Trước khi scaling 72

Hình 4.9 Sau khi scaling 73

Hình 4.10 Các pod mới được tạo ra để giảm tải cho các pod đã tồn tại 73

Hình 4.11 Triển khai VPA 74

Hình 4.12 Pod cũ bị thay thế bằng Pod mới 78

Trang 15

LỜI NÓI ĐẦU

Trong thời đại công nghệ ngày nay, việc xây dựng và quản lý hạ tầng ứng dụng đòi hỏi sự linh hoạt và hiệu quả để đảm bảo sự ổn định và khả năng mở rộng Một trong những xu hướng quan trọng nhất của ngành công nghiệp là sự chuyển đổi từ mô hình cơ sở hạ tầng truyền thống đến việc sử dụng các nền tảng điện toán đám mây và giải pháp container.

Trong kịch bản này, tôi tập trung vào nghiên cứu và triển khai giải pháp autoscaling trên nền tảng Kubernetes (K8s) của Google Cloud Platform (GCP) Kubernetes đã trở thành một công cụ quản lý container mạnh mẽ, cung cấp môi trường linh hoạt để triển khai, quản lý, và mở rộng các ứng dụng dựa trên container.

Autoscaling là một khía cạnh quan trọng của việc quản lý hạ tầng, giúp tối ưu hóa sự sử dụng tài nguyên và đảm bảo khả năng phục vụ linh hoạt đối với biến động trong lưu lượng công việc Chúng tôi sẽ tìm hiểu cách autoscaling có thể được thực hiện trên K8s, và làm thế nào GCP cung cấp các công cụ và dịch vụ hỗ trợ trong quá trình này.

Nội dung đồ án được trình bày trong 4 chương:

Chương 1: Chương đầu tiên này chúng ta sẽ đĩ tìm hiểu các kiến thức cơ bản nhất về điện toán đám mây, máy ảo (VM) Container và các nền tảng quản lý Container, Autoscaling Giúp chúng ta có thể hiểu đề tài một cách cơ bản nhất

Chương 2: Chương thứ hai sẽ giới thiệu về kiến trúc và chức năng cơ bản của Kubernetes, cùng với một số khái niệm quan trọng trong hệ thống Những thông tin này cung cấp kiến thức cơ bản về cấu trúc và hoạt động của Kubernetes, hỗ trợ hiểu rõ về các thành phần cấu thành và cách chúng tương tác trong hệ thống này.

Chương 3: Chương này sẽ tập trung vào khái niệm Autoscaling, cung cấp thông tin chi tiết về các phương pháp Autoscaling, thuật toán liên quan, cách mà hệ thống hoạt động trong quá trình tự điều chỉnh, và cách áp dụng các phương pháp này trong các kịch bản thực tế.

Trang 16

Chương 4: Sau khi đã học và hiểu các kiến thức trong chương trước, chương này sẽ đưa ra một ứng dụng cụ thể để chúng ta có thể áp dụng kiến thức đã học, từ đó nắm bắt các ưu và nhược điểm của từng phương pháp

Trang 17

-CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN

1.1 Tổng quan về Cloud Computing ( Điện toán đám mây)

1.1.1 Cloud Computing là gì?

Cloud Computing (điện toán đám mây), hay còn gọi là điện toán máy chủ ảo, là mô hình nơi các tính toán được cung cấp và phát triển thông qua Internet Trong mô hình này, tất cả tài nguyên, thông tin và phần mềm được chia sẻ và cung cấp dưới dạng dịch vụ cho máy tính, thiết bị và người dùng trên nền tảng hạ tầng mạng công cộng, thường là Internet.

Người dùng có thể sử dụng các dịch vụ như cơ sở dữ liệu, website, lưu trữ trong mô hình điện toán đám mây mà không cần quan tâm đến vị trí địa lý hay các thông tin khác của hệ thống mạng đám mây - tức là "điện toán đám mây trong suốt đối với người dùng" Người dùng cuối có thể truy cập và sử dụng các ứng dụng đám mây qua trình duyệt web, ứng dụng di động hoặc máy tính cá nhân thông thường Hiệu năng sử dụng từ phía người dùng cuối được cải thiện khi các phần mềm chuyên dụng và cơ sở dữ liệu được lưu trữ và triển khai trên hệ thống máy chủ ảo trong môi trường điện toán đám mây trên nền tảng của "data center".

Thuật ngữ "data center" chỉ một khu vực chứa server và các thiết bị lưu trữ, bao gồm nguồn điện và các thiết bị khác như rack, cáp, có khả năng sẵn sàng và ổn định cao Ngoài ra, nó còn bao gồm các tiêu chí khác như tính module hóa cao, khả năng mở rộng dễ dàng, nguồn và làm mát, hỗ trợ hợp nhất server và lưu trữ mật độ cao.

Có ba mô hình triển khai điện toán đám mây chính là public (công cộng), private (riêng) và hybrid ("lai" giữa đám mây công cộng và riêng) Đám mây công cộng là mô hình nơi các nhà cung cấp đám mây cung cấp dịch vụ tài nguyên, nền tảng hoặc ứng dụng lưu trữ trên đám mây và public ra bên ngoài Các dịch vụ trên public cloud có thể miễn phí hoặc

Trang 18

đích kinh doanh, với mục tiêu cung cấp dịch vụ cho một nhóm người và đứng đằng sau tường lửa Đám mây "lai" là môi trường đám mây kết hợp cung cấp các dịch vụ công cộng và riêng Ngoài ra, "community cloud" là mô hình đám mây giữa các nhà cung cấp dịch vụ đám mây.

Về mô hình cung cấp dịch vụ, có ba loại chính là IaaS (cung cấp hạ tầng như một dịch vụ), PaaS (cung cấp nền tảng như một dịch vụ) và SaaS (cung cấp phần mềm như một dịch vụ).

1.1.2 Các tiện ích của “Cloud Computing”

Một số lợi ích cơ bản và đặc trưng của hệ thống "Điện toán đám mây":

 Tăng sự linh hoạt của hệ thống (Increased Flexibility): Việc thêm hoặc giảm bớt thiết bị như lưu trữ, máy chủ, máy tính chỉ mất vài giây, giúp hệ thống trở nên linh hoạt và dễ quản lý.

 Sử dụng tài nguyên theo yêu cầu (IT Resources on Demand): Quản trị viên có thể cấu hình hệ thống dựa trên nhu cầu của khách hàng, tối ưu hóa việc sử dụng tài nguyên theo yêu cầu cụ thể.

 Tăng khả năng sẵn sàng của hệ thống (Increased Availability): Các ứng dụng và dịch vụ được cân bằng động để đảm bảo tính khả dụng Hỏng hóc phần cứng không ảnh hưởng đến hệ thống, chỉ làm giảm hiệu suất tài nguyên.

 Tiết kiệm phần cứng (Hardware Saving): So với mô hình truyền thống, mô hình "Điện toán đám mây" quản lý tài nguyên IT để tránh lãng phí Dịch vụ được cung cấp với độ sẵn sàng gần như 100% (takedown services in real time).

 Trả theo nhu cầu sử dụng thực tế (Paying-as-you-go IT): Mô hình "Cloud computing" tích hợp hệ thống billing để tính cước dựa trên việc sử dụng thực tế, bao gồm tốc độ CPU, dung lượng RAM, dung lượng HDD, và các tài nguyên khác.

Trang 19

Nhìn chung mô hình "Điện toán đám mây" đã khắc phục hai yếu điểm quan trọng của mô hình truyền thống về "khả năng mở rộng (scalability)" và "độ linh hoạt (flexibility)" Các tổ chức và công ty có thể triển khai ứng dụng và dịch vụ một cách nhanh chóng, giảm chi phí và giảm rủi ro Phần tiếp theo sẽ giới thiệu về ảo hóa – một công nghệ cốt lõi và được xem là bước đệm quan trọng trong chuyển đổi từ mô hình truyền thống sang "Điện toán đám mây"

1.1.3 Các nền tảng Cloud Computing phổ biến

1.1.3.1 Amazon Web Service

Thành lập từ năm 2006, dịch vụ đám mây AWS của Amazon đã trở thành một trong những nền tảng công nghệ sáng tạo và có ảnh hưởng nhất thế giới Amazon Web Services (AWS) là một chương trình dựa trên đám mây để xây dựng các giải pháp kinh doanh bằng cách sử dụng các dịch vụ web tích hợp AWS cung cấp một loạt các dịch vụ IaaS và PaaS, bao gồm Elastic Cloud Compute (EC2), Elastic Beanstalk, Simple Storage Service (S3) và Relational Database Service (RDS).

Với việc hoạt động tại 6 vùng, 25 khu vực, 78 điểm hiện diện trên toàn thế giới, AWS trở thành nền tảng chuyên triển khai AI, cơ sở dữ liệu, máy học, đám mây 5G, đa đám mây và không máy chủ AWS có ba mô hình định giá khác nhau: “Dùng đến đâu thanh toán đến đó”, “Tiết kiệm khi bạn đặt trước” và “Thanh toán ít hơn khi sử dụng nhiều hơn”.

1.1.3.2 Google Cloud Platform

Google Cloud Platform là nhà cung cấp dịch vụ đám mây của Google Nếu doanh nghiệp quan tâm một cách nghiêm túc về độ trễ khi xây dựng các ứng dụng hướng đến hiệu suất thì Google Cloud là lựa chọn tốt nhất vì nó bao gồm GCP & Google Workspace (G

Suite)

Google Cloud Platform có sẵn ở 22 khu vực, 61 khu vực và 140 điểm hiện diện tại hơn 200 quốc gia, giúp GCP trở thành một trong những mạng lớn nhất và nhanh nhất Với cơ sở hạ tầng bảo mật nhiều lớp của Google Cloud, người dùng có thể yên tâm rằng mọi thứ doanh nghiệp xây dựng, lập trình hoặc lưu trữ sẽ được bảo vệ Điều này được thực hiện

Trang 20

thông qua cam kết về tính minh bạch và đội ngũ kỹ sư được đào tạo chuyên sâu của Google.

Google cũng cung cấp dịch vụ chuyển sang máy ảo một cách đơn giản với giá cả linh hoạt dựa trên các gói thanh toán “Dùng đến đâu thanh toán đến đó” Điện toán đám mây của Google tuyên bố là nền tảng dẫn đầu khi nói đến giá cả so với những đối thủ lớn và doanh nghiệp có thể tự mình dùng thử dịch vụ miễn phí

1.1.3.3 Microsoft Azure

Microsoft Azure được ra mắt vào năm 2010 với tên gọi Windows Azure, và sau đó vào năm 2014, nó được đổi tên thành Microsoft Azure Azure được kích hoạt chủ yếu thông qua các trung tâm dữ liệu do Microsoft quản lý, nền tảng này chứng tỏ là một giải pháp đáng tin cậy trong việc hỗ trợ phát triển, kiểm tra, triển khai và quản lý các ứng dụng và dịch vụ Để phát triển web, nó cũng cung cấp hỗ trợ cho PHP, ASP.net và Node.js.

Với Azure, người dùng có thể chạy bất kỳ dịch vụ nào trên đám mây hoặc kết hợp nó với bất kỳ ứng dụng, trung tâm dữ liệu hoặc cơ sở hạ tầng hiện có Điều này dẫn đến các gói dịch vụ được lựa chọn phù hợp hơn với nhu cầu.

Tất cả giá và gói của Microsoft Azure đều được trình bày rất chi tiết trên trang web của họ Trang này bao gồm máy tính chi phí và dịch vụ “Dùng đến đâu thanh toán đến đó” Mỗi kế hoạch có thể được điều chỉnh cho phù hợp với nhu cầu cụ thể của doanh nghiệp.

1.1.4 Các công nghệ ảo hóa

1.1.4.1 Kernel mode và User mode

Kernel mode: Đây là không gian được bảo vệ, nơi mà nhân của hệ điều hành xử lý và tương tác trực tiếp với phần cứng Một ví dụ điển hình cho Kernel mode là các trình điều khiển (drivers) của thiết bị Khi xảy ra sự cố, hệ thống có thể tạm dừng hoạt động và hiển thị thông báo lỗi, như trên hệ điều hành Windows sẽ xuất hiện màn hình xanh khi có lỗi giao tiếp phần cứng.

Trang 21

User mode: Đây là không gian nơi các ứng dụng chạy, như Microsoft Office, MySQL, hoặc Exchange Server Khi có sự cố ở các ứng dụng, chỉ có các ứng dụng đó bị tạm dừng mà không ảnh hưởng gì đến hoạt động của máy chủ.

1.1.4.2 Hypervisor

Tất cả các hình thức ảo hóa đều được quản lý bởi Máy ảo ảo (VMM - Virtual Machine Monitor) Về cơ bản, VMM được phân chia thành hai loại: VMM hoạt động như một phần mềm trung gian chạy trên hệ điều hành để chia sẻ tài nguyên với hệ điều hành, ví dụ như VMware Workstation và Virtual PC Còn loại thứ hai, VMM hoạt động như một hypervisor chạy trực tiếp trên phần cứng, như VMware ESXi, Hyper-V và Xen.

Hypervisor là một phần mềm được đặt ngay trên phần cứng hoặc ở dưới hệ điều hành để tạo ra các môi trường cô lập, được gọi là các phân vùng hoặc partition Mỗi phân vùng tương ứng với một máy ảo (VM) có thể chạy hệ điều hành độc lập Hiện nay, có hai hướng tiếp cận hypervisor khác nhau được biết đến, đó là loại 2 (VMM-hypervisor) được gọi là Monolithic và Micro hypervisor.

1.1.4.3 Full-virtualization

Full-virtualization là một công nghệ ảo hóa được sử dụng để tạo ra một máy ảo mô phỏng một máy chủ thực với đầy đủ các tính năng, bao gồm quá trình input/output, interrupts, và truy cập bộ nhớ Tuy nhiên, mô hình ảo hóa này có hạn chế về hiệu suất khi phải thông qua một trình quản lý máy ảo (Virtual Machines Monitor hay hypervisor) để tương tác với tài nguyên hệ thống (chuyển đổi chế độ) Do đó, một số tính năng có thể bị giảm khi cần thực hiện trực tiếp từ CPU.

Các hệ thống hỗ trợ loại ảo hóa này bao gồm Xen, VMware Workstation, VirtualBox, Qemu/KVM, và Microsoft Virtual Server.

1.1.4.4 Para-virtualization

Para-virtualization, hay còn được biết đến là ảo hóa "một phần," là một kỹ thuật ảo hóa được hỗ trợ và điều khiển bởi một hypervisor Trong para-virtualization, các hệ điều hành

Trang 22

của máy ảo thực hiện các lệnh mà không thông qua hypervisor hoặc bất kỳ trình quản lý máy ảo nào khác, giảm hạn chế về quyền hạn Tuy nhiên, nhược điểm của loại ảo hóa này là các hệ điều hành biết rằng chúng đang chạy trên một nền tảng phần cứng ảo và có thể gặp khó khăn trong việc cấu hình và cài đặt.

Ảo hóa Para-virtualization được hỗ trợ bởi một số hệ thống như Xen, VMware và Hyper-V.

1.1.4.5 OS-level virtualization (Isolation)

Ở mức độ hệ điều hành (OS level virtualization), còn được gọi là Containers Virtualization hoặc Isolation, là một phương pháp ảo hóa mới cho phép nhân của hệ điều hành hỗ trợ nhiều instances được cách ly dựa trên một hệ điều hành có sẵn, chia sẻ cho nhiều người dùng khác nhau Nói một cách khác, phương pháp này tạo và chạy nhiều máy ảo cách ly và an toàn sử dụng chung một hệ điều hành Ưu điểm của ảo hóa này là khả năng bảo trì nhanh chóng, do đó, nó được ứng dụng rộng rãi trong lĩnh vực hosting.

Các công nghệ hỗ trợ loại ảo hóa này bao gồm OpenVZ, Virtuozzo, Linux-VServer, Solaris Zones và FreeBSD Jails Lưu ý rằng loại ảo hóa Isolation này chỉ tồn tại trên hệ điều hành Linux Nếu ảo hóa chỉ là công nghệ nền tảng của Cloud Computing (CC), việc triển khai CC trong thực tế thường dựa vào hai giải pháp cơ bản: sử dụng các sản phẩm thương mại cho CC như của VMware, Microsoft (Hyper-V), hoặc sử dụng các sản phẩm nguồn mở như Eucalyptus và OpenStack Phần tiếp theo sẽ trình bày về lợi ích của hướng tiếp cận triển khai CC sử dụng nguồn mở.

1.2 Sự khác biệt VM(Virtual machine) và Container

1.2.1 Virtual machine là gì?

Đây thực sự là một giải pháp tuyệt vời khi chúng ta muốn chạy nhiều hệ điều hành trên một máy tính vào cùng một thời điểm Với giải pháp ảo hóa này, toàn bộ hệ thống từ phần cứng (RAM, CPU, HDD, ) cho đến hệ điều hành đều được "ảo hóa", mang lại trải nghiệm sử dụng gần tương đương như một máy tính thật.

Trang 23

Khi sức mạnh và công suất xử lý của máy chủ tăng lên, các ứng dụng bare-metal không thể đáp ứng việc khai thác đa dạng nguồn tài nguyên Đó là lý do tại sao Virtual Machine được tạo ra Virtual Machine được thiết kế để chạy phần mềm trên các máy chủ vật lý, mô phỏng một hệ thống phần cứng cụ thể Một trình ảo hóa - hypervisor là một phần mềm hoặc phần cứng tạo ra và chạy các máy ảo (Virtual Machine) Nó đóng vai trò quan trọng nằm giữa phần cứng và máy ảo, cần thiết để ảo hóa máy chủ.

Trong mỗi máy ảo, chỉ có một hệ điều hành khách duy nhất chạy Máy ảo với các hệ điều hành khác nhau có thể chạy trên cùng một máy chủ vật lý - ví dụ, máy ảo UNIX có thể chia sẻ máy chủ với máy ảo Linux Mỗi máy ảo đều có các tệp nhị phân, thư viện và ứng dụng riêng, và kích thước của máy ảo có thể lớn đến nhiều gigabyte.

Top of Form

Lợi ích của VM:

Ảo hóa máy chủ mang lại nhiều lợi ích, và một trong những lợi ích lớn nhất là khả năng hợp nhất các ứng dụng vào một hệ thống duy nhất Đã quá thời kỳ mỗi ứng dụng chạy trên một máy chủ riêng lẻ Ảo hóa giúp tiết kiệm chi phí thông qua việc loại bỏ footprint, tạo ra máy chủ nhanh hơn và cải thiện khả năng khôi phục sau thảm họa (DR) Việc này đồng thời giảm áp lực cho phần cứng dự phòng trong trường hợp DR, vì không còn cần phản chiếu toàn bộ trung tâm dữ liệu chính.

Bằng cách sử dụng hiệu quả nhiều hơn các máy chủ lớn và nhanh hơn, ảo hóa giúp giải phóng các máy chủ không sử dụng và chúng có thể được tái sử dụng cho các mục đích khác như kiểm thử chất lượng (QA) hoặc như thiết bị phòng thí nghiệm

Hạn chế:

Tuy ảo hóa máy chủ mang lại nhiều lợi ích, nhưng nó cũng mang theo những hạn chế Mỗi máy ảo bao gồm một hình ảnh của hệ điều hành riêng biệt, điều này tăng thêm chi

Trang 24

phí trong bộ nhớ và gây vấn đề về lưu trữ Vấn đề này làm tăng sự phức tạp trong tất cả các giai đoạn của vòng đời phát triển phần mềm, từ phát triển và thử nghiệm đến sản xuất và khôi phục sau thảm họa Phương pháp này cũng hạn chế tính di động của các ứng dụng giữa các đám mây công cộng, đám mây riêng và các trung tâm dữ liệu truyền thống.

Hơn nữa, việc phải ảo hóa máy chủ tiêu tốn một lượng tài nguyên không nhỏ của hệ điều hành chủ (host system) Để chạy một dịch vụ, chúng ta phải khởi động toàn bộ hệ điều hành ảo, dẫn đến thời gian khởi động, dừng lại hay khởi động lại mất ít nhất vài phút Từ những điểm yếu trên, công nghệ Container đã xuất hiện như một giải pháp lý tưởng để chạy các dịch vụ trên máy ảo, tiêu tốn ít tài nguyên và đồng thời đảm bảo hiệu suất cao nhất.

1.2.2 Container là gì?

Ảo hóa Container còn được gọi là "ảo hóa mức hệ điều hành" (operating system virtualization) Trong phương pháp này, không có việc ảo hóa cả phần cứng và hệ điều hành, mà chỉ ảo hóa môi trường Các dịch vụ trong Container vẫn chạy trên cùng một hệ điều hành chủ ở phía dưới, chia sẻ Kernel nhưng môi trường chạy của các dịch vụ là hoàn toàn độc lập với nhau Thuật ngữ "Container" ở đây được hiểu là khái niệm đóng gói Một Container chứa đầy đủ ứng dụng và tất cả các thành phần phụ thuộc, bao gồm các file thực thi và thư viện, để đảm bảo các ứng dụng có thể chạy độc lập trong container đó Như vậy, mỗi Container được xem như một "máy ảo" mini.

Lợi ích của ảo hóa Container:

Các container đặt trên máy chủ vật lý và hệ điều hành chủ của nó, ví dụ như Linux hoặc Windows Mỗi vùng chứa chia sẻ Kernel của Host OS và thường là các tệp nhị phân và thư viện Các thành phần được chia sẻ ở chế độ "chỉ đọc" Vì vậy, các vùng chứa đặc biệt "nhẹ" - chúng chỉ có kích thước trong khoảng vài megabyte và chỉ mất vài giây để khởi động, và vài phút cho máy ảo Điều này là một điểm mạnh lớn của Container Với một máy tính cấu hình bình thường, nếu chạy máy ảo VM truyền thống, ta chỉ có thể chạy vài

Trang 25

cái; trong khi ở đây, nếu sử dụng Container, có thể chạy đến vài chục hoặc thậm chí vài trăm cái.

Ngoài ra, Container còn giảm chi phí quản lý Vì chúng chia sẻ một hệ điều hành chung, chỉ cần bảo trì và cung cấp bản vá, sửa lỗi cho một hệ điều hành duy nhất Khái niệm này tương tự như khi sử dụng máy chủ hypervisor: ít điểm quản lý hơn, mặc dù miền lỗi cao hơn một chút Ta có thể tự tạo Container từ một mẫu có sẵn, cài đặt môi trường, sau đó lưu trạng thái lại như một "image", và triển khai "image" này đến bất kỳ đâu ta muốn Tóm lại, container có trọng lượng nhẹ hơn và dễ di chuyển hơn so với VM.

Hạn chế:

Điểm yếu duy nhất của công nghệ container là giới hạn trong việc ảo hóa hệ điều hành Bởi vì container sử dụng chung kernel với hệ điều hành chủ, nên chỉ có thể ảo hóa được hệ điều hành mà hệ điều hành chủ hỗ trợ Ví dụ, nếu hệ điều hành chủ là Linux, ta chỉ có thể ảo hóa các hệ điều hành nhân Linux như Ubuntu, LinuxMint, và không thể tạo ra một container chứa hệ điều hành Windows.

Mặc dù máy ảo VM và công nghệ ảo hóa Container có nhiều sự khác biệt, nhưng điểm khác biệt chính là Container cung cấp cách ảo hóa một hệ điều hành để nhiều khối lượng công việc có thể chạy trên một phiên bản hệ điều hành Với máy ảo, phần cứng được ảo hóa để chạy nhiều phiên bản hệ điều hành Tốc độ, sự nhanh nhẹn và tính di động của container khiến chúng trở thành một công cụ hữu ích để hợp lý hóa quá trình phát triển

quy định mỗi process một mức giới hạn tài nguyên

khác nhau (hoặc không

Trang 26

(Đối với VPS, Hypervisor

type 1 thay thế cho HĐH thể gây ảnh hưởng tới tài nguyên của process khác trong cùng VM Process trong môi trường ảo không

thể truy xuất tới môi container không thể gây

ảnh hưởng cho nhau Process trong môi trường ảo không thể truy xuất tới môi trường của HĐH chủ.

1.1 Các nền tảng quản lý container

1.3.1 Kubernetes

Kubernetes, được Google công bố là mã nguồn mở từ năm 2014, là một giải pháp quản lý container được xây dựng dựa trên công nghệ Borg đã được sử dụng từ những năm 2000 Nó đã trải qua một quãng thời gian dài phát triển và đúc kết kinh nghiệm, making nó trở thành một trong những giải pháp quản lý container phổ biến và mạnh mẽ nhất trên thị trường hiện nay.

Kubernetes là một hệ thống quản lý tập trung sử dụng Pods để tổ chức các nhóm container, chia sẻ tài nguyên và giải quyết vấn đề khi máy chủ hoặc Pod gặp sự cố Kubernetes có khả năng tự động khởi động lại container hoặc dịch chuyển các pods để đảm bảo sự linh hoạt và hiệu suất của hệ thống Điều này được thực hiện thông qua worker nodes, nơi mà các nhóm này có thể chạy trên bare metal machines hoặc máy ảo.

Trang 27

Kubernetes có một thành phần quan trọng là kubelet, nó đảm nhận trách nhiệm về trạng thái chạy của worker nodes và đảm bảo rằng chúng được triển khai và hoạt động một cách hiệu quả.

1.3.2 Docker

Docker là một nền tảng mã nguồn mở được thiết kế để xây dựng, triển khai, và quản lý ứng dụng thông qua containers trên nền tảng ảo hóa Nó cung cấp một cách tiện lợi để xây dựng, triển khai, và chạy ứng dụng bằng cách sử dụng containers.

Docker không chỉ là một công cụ tạo ra các container mà còn cung cấp một công cụ quản lý container có tên là Swarm Swarm là một giải pháp quản lý container tự nhiên trong hệ sinh thái Docker, sử dụng Docker API để biến một nhóm Docker engine thành một Docker engine duy nhất Tích hợp này giúp quản lý các quy trình từ trên xuống dưới, tạo ra một môi trường quản lý linh hoạt.

Tuy nhiên, khi đối mặt với yêu cầu tự động hóa quản lý tài nguyên và cần phát triển giải pháp cho khách hàng, Kubernetes có thể là lựa chọn phù hợp hơn Mặc dù Docker cung cấp khả năng kiểm soát thủ công và sự linh hoạt trong việc tự động hóa, sự tích hợp đầy đủ của Kubernetes làm cho nó trở thành lựa chọn phổ biến trong lĩnh vực này.

1.2 Tổng quan về Autoscaling

1.2.1 Auto Scaling là gì?

Auto Scaling là một giải pháp có khả năng tự động điều chỉnh số lượng tài nguyên máy tính được sử dụng để phục vụ các ứng dụng, giúp thu hẹp hoặc mở rộng tài nguyên theo nhu cầu sử dụng của người dùng trong khoảng thời gian cụ thể.

Trước khi công nghệ điện toán đám mây trở nên phổ biến, việc mở rộng các trang web hoặc máy chủ đặt ra nhiều thách thức cho người quản trị Trong môi trường lưu trữ truyền thống, các tài nguyên phần cứng hạn chế có thể dẫn đến sự suy giảm hiệu suất và thậm chí là sự mất mát dữ liệu.

Trang 28

Công nghệ điện toán đám mây đã đưa ra giải pháp cho vấn đề phân bố tài nguyên máy tính Auto Scaling cho phép tự động mở rộng hoặc thu hẹp số lượng tài nguyên theo nhu cầu thực tế, giúp giải quyết khó khăn trong việc quản lý và phân phối tài nguyên Điều này giúp người sử dụng có thể linh hoạt khởi chạy, sử dụng và ngừng sử dụng tài nguyên theo yêu cầu của họ

1.4.2 Lợi ích của Autoscaling

 Đối với các công ty vận hành nền tảng máy chủ web trong công ty, việc sử dụng auto scaling giúp họ có thể tạm ngừng hoạt động một số máy chủ trong khoảng thời gian thấp điểm, tiết kiệm chi phí điện năng và chi phí vận hành.

 Các doanh nghiệp chạy hạ tầng trên đám mây cũng hưởng lợi từ auto scaling, vì nó giúp giảm chi phí dựa trên tổng mức sử dụng thay vì dựa trên công suất tối đa.

 Ngay cả đối với các công ty không thể giảm tổng dung lượng tài nguyên hoặc tài nguyên thanh toán trong một thời điểm cố định, auto scaling vẫn hữu ích khi chạy các công việc ít nhạy cảm về thời gian trên các máy đã được auto scaling trong giai đoạn có lượng traffic thấp.

 Các giải pháp auto scaling cũng có thể sử dụng để thay thế các đối tượng không lành mạnh (unhealthy) và từ đó giúp ngăn chặn các lỗi phần cứng, lỗi mạng và lỗi ứng dụng.

 Auto scaling mang lại tỷ lệ uptime tốt hơn và tính sẵn sàng cao hơn trong trường hợp khối lượng công việc thay đổi đột ngột và bất ngờ.

 Auto scaling không giới hạn bởi chu kỳ sử dụng máy chủ theo ngày, tuần hoặc năm, mà thay vào đó nó linh hoạt và tương thích với các trường hợp sử dụng thực tế, giảm nguy cơ có quá ít hoặc quá nhiều máy chủ phục vụ truyền tải lưu lượng Ví dụ, auto scaling có thể xử lý tốt việc điều chỉnh lưu lượng truy cập vào nửa đêm, khi lượng người sử dụng giảm đi, nhưng cũng có khả năng đáp ứng đột biến tăng lượng người sử dụng vào buổi tối, giúp tránh tình trạng downtime

Trang 29

1.4.3 Các phương thức Scaling

1.4.3.1 Vertical Scaling

Vertical scaling, hay còn được biết đến là "scale-up," là phương pháp truyền thống mà nhiều người nghĩ đến khi thảo luận về scaling Đây không yêu cầu sửa đổi ứng dụng và thường được thực hiện bằng cách thêm tài nguyên cho máy hiện tại Hãy tưởng tượng một ứng dụng chạy trên một máy chủ ảo có khả năng xử lý 1.000 khách truy cập mỗi giờ Khi số lượng khách truy cập tăng lên đến 1500 mỗi giờ, trải nghiệm người dùng có thể giảm đi vì máy chủ không đủ tài nguyên.

Vertical scaling đạt được bằng cách thêm tài nguyên như CPU hoặc bộ nhớ vào máy chủ hiện tại Điều này giúp máy chủ có thể phục vụ thêm khách hàng hoặc thực hiện các tác vụ tính toán nhanh hơn Tuy nhiên, vertical scaling cũng mang theo một số hạn chế Máy chủ ảo càng lớn, rủi ro gia tăng, và có những giới hạn về khả năng tăng kích thước của một instance Quy mô lớn hơn có nghĩa là chi phí tăng lên và rủi ro của việc chỉ sử dụng một máy chủ ảo.

Một vấn đề khác là giới hạn về mức tài nguyên một instance có thể mở rộng đến Dù có thể thêm CPU và bộ nhớ, nhưng đến một mức độ nào đó, chúng sẽ đạt đến giới hạn Việc thay đổi càng lớn, càng tăng chi phí cho mỗi đơn vị năng lực bổ sung Trong trường hợp máy chủ vật lý, việc này đòi hỏi tắt nguồn máy chủ và thay đổi phần cứng, trong khi đối với máy chủ ảo, thường cần khởi động lại ứng dụng, tạo ra gián đoạn trong trải nghiệm người dùng.

1.4.3.2 Horizontal Scaling

Horizontal scaling là một kiến trúc hoàn toàn khác biệt so với vertical scaling Thay vì tăng kích thước của một instance, horizontal scaling thêm các instance bổ sung vào hệ thống Một nền tảng có thể sử dụng nhiều instance nhỏ hơn thay vì một instance lớn Horizontal scaling đạt được điều này bằng cách thêm các máy chủ vào nhóm tài nguyên, với mỗi máy cung cấp cùng một dịch vụ Phương pháp này không giới hạn kích thước

Trang 30

quy mô ảo và có thể mở rộng đến gần như vô hạn, nhưng yêu cầu sự hỗ trợ từ ứng dụng để mở rộng một cách hiệu quả.

Các nhược điểm của vertical scaling gần như đều được khắc phục khi sử dụng horizontal scaling:

 Rủi ro phân tán trên nhiều thành phần nhỏ thay vì một khối lớn.

 Có thể thực hiện scaling thường xuyên mà không bị ngừng hoạt động vì bạn chỉ thêm tài nguyên bổ sung mà không làm thay đổi tài nguyên hiện có, không làm gián đoạn dịch vụ đang cung cấp.

 Chi phí thường rẻ hơn: Sử dụng 10 máy chủ có kích thước bằng 1/10 kích thước của máy chủ lớn sẽ giá rẻ hơn so với việc sử dụng một máy chủ lớn nhất.

Tuy nhiên, horizontal scaling đòi hỏi cấu hình phức tạp hơn so với vertical scaling, nhưng mang lại hiệu suất cao hơn nếu được triển khai một cách đúng đắn.

1.4.4 Những tham số đầu vào để thực hiện AutoScaling

Để xác định khi nào cần mở rộng hoặc giảm quy mô hệ thống bằng cách thêm hoặc chấm dứt máy chủ, bạn có thể theo dõi và đánh giá các thông số sau đây:

1 Sử dụng CPU (%): Theo dõi mức sử dụng CPU của hệ thống Nếu tỷ lệ này tiến

gần đến 100%, đó có thể là dấu hiệu cần phải mở rộng để giữ cho hệ thống hoạt động mượt mà.

2 Sử dụng bộ nhớ (%): Kiểm tra tỷ lệ sử dụng bộ nhớ Nếu nó tiến gần đến giới

hạn, bạn có thể cần mở rộng để tránh các vấn đề hiệu suất.

3 Bộ nhớ được sử dụng (MB): Số lượng bộ nhớ thực tế đang được sử dụng có thể

là một chỉ số quan trọng để xác định mức độ cụ thể của tải công việc hiện tại.

4 Bộ nhớ khả dụng (MB): Theo dõi bộ nhớ còn trống Nếu bộ nhớ khả dụng giảm

đáng kể, đó có thể là dấu hiệu cần phải mở rộng.

Trang 31

5 Sử dụng không gian đĩa (%): Kiểm tra tỷ lệ sử dụng không gian đĩa Nếu không

gian đĩa tiếp cận giới hạn, bạn có thể cần thêm lưu trữ.

6 Dung lượng đĩa được sử dụng (GB): Số lượng không gian đĩa đang được sử dụng

có thể cung cấp cái nhìn chi tiết về lưu trữ.

7 Dung lượng đĩa trống (GB): Số lượng không gian đĩa còn trống, giúp bạn dự

đoán khi nào cần mở rộng lưu trữ.

8 Sử dụng mạng (%): Kiểm tra ti lệ sử dụng mạng để xác định xem có cần tăng

băng thông hay không.

9 Số liệu khác: Các thông số như số lượng kết nối đồng thời, số lượng yêu cầu mỗi

giây, hoặc bất kỳ số liệu nào khác phản ánh hiệu suất và tải công việc của hệ thống.

Trang 32

CHƯƠNG 2: KIẾN TRÚC KUBERNETES

2.1 Chức năng của Kubernetes

Kubernetes (viết tắt là K8s) quản lý một số lượng lớn Docker host bằng cách tạo ra các cụm container, được gọi là "container cluster" Khi chạy một container trên Kubernetes, việc triển khai replicas (tạo các bản sao giống nhau) có thể được thực hiện để đảm bảo cân bằng tải tự động và tăng khả năng chịu lỗi Cân bằng tải giúp phân phối công việc một cách hiệu quả giữa các replicas, đồng thời cũng cung cấp khả năng autoscaling - tự động điều chỉnh số lượng replicas dựa trên nhu cầu thực tế và tải công việc.

Hình 2.1 Các Load Balancing có thể thực hiện tăng giảm số lượng Replicas

Docker host trong Kubernetes còn được gọi là Node Khi xếp container vào các Node, có các dạng workload như "Sử dụng Disk I/O nhiều", "Sử dụng băng thông cao", "Disk là SSD", và "CPU xung nhịp cao" được xem xét Dựa vào loại máy chủ Docker và loại công việc, Kubernetes có khả năng tự động nhận biết việc sử dụng affinity (sự kết hợp) hoặc anti-affinity (sự không kết hợp) để lên lịch công việc một cách hợp lý Affinity giúp các container có thể chia sẻ tài nguyên trên cùng một Node, trong khi anti-affinity có thể ngăn chặn chúng chạy cùng nhau để đảm bảo tính ổn định và tăng khả năng chịu lỗi.

Trang 33

Hình 2.2 Các container được điều phối tự động

Trong những trường hợp không cụ thể khác, lập lịch sẽ được thực hiện dựa trên tình trạng CPU và bộ nhớ trống, giúp người dùng không cần phải quản lý việc đặt container vào Docker host nào Nếu tài nguyên không đủ, Kubernetes cũng có khả năng tự động mở rộng hoặc giảm quy mô của các Kubernetes cluster để đáp ứng nhu cầu và đảm bảo hiệu suất.

Hình 2.3 K8s tự động phân tỷ lệ các Kubernetes cluster

Kubernetes có khả năng chịu lỗi cao và thực hiện giám sát container theo tiêu chuẩn Trong trường hợp có sự cố bất ngờ, khi một container bị dừng, Kubernetes sẽ thực hiện tự làm mới bằng cách khởi động lại container đó Khái niệm self-healing trong Kubernetes giúp tự động khôi phục các dịch vụ khi node xảy ra lỗi, bị tắt hoặc di chuyển.

Trang 34

Ngoài ra, Kubernetes cũng hỗ trợ thiết lập health checks với các tập lệnh HTTP/TCP/shell, giúp đảm bảo rằng các container và các service đang chạy đều trong trạng thái hoạt động và lành mạnh Điều này cùng với khả năng tự động khôi phục giúp Kubernetes duy trì tính ổn định và độ tin cậy của hệ thống.

Hình 2.4 Self-healing giúp tự động khôi phục các service khi node xảy ra lỗi

Khi thực hiện auto scaling và phát sinh vấn đề về endpoint đến container, Kubernetes (K8s) giải quyết vấn đề này bằng cách cung cấp chức năng load balancing thông qua Service Trong trường hợp sử dụng máy ảo và thiết lập load balancing, endpoint được cung cấp dưới dạng VIP (Virtual IP).

Service trong Kubernetes không chỉ tự động thêm và xóa các endpoint khi thực hiện scale, mà còn tự động ngắt kết nối trong trường hợp container gặp lỗi Khả năng tự động cách ly trước khi thực hiện rolling updates cho container cho thấy Kubernetes có khả năng quản lý các endpoint với một mức độ dịch vụ (SLA) cao.

Trong kiến trúc microservices, để triển khai và sử dụng container image cho mỗi chức năng cụ thể, Service discovery trở thành một yếu tố quan trọng để đảm bảo các thành phần microservices có thể tìm thấy và giao tiếp với nhau một cách hiệu quả.

Trang 35

Hình 2.5 Sử dụng container image trong kiến trúc microservices

Để sử dụng Docker trong môi trường production mà không sử dụng công cụ điều phối như Kubernetes, người dùng sẽ cần tự tạo và quản lý các chức năng được đề cập ở phía trên Tuy nhiên, khi sử dụng Kubernetes, chúng ta có thể tận dụng cơ chế tự động hóa mạnh mẽ của công cụ này.

2.2 Kiến trúc Kubernetes

Một kiến trúc Kubernetes sẽ gồm có các thành phần sau đây:

Hình 2.6 Kiến trúc Kubernetes

Trang 36

Master Node

Được xem như cơ quan đầu não trong kiến trúc Kubernetes, Master Node đóng vai trò quan trọng trong việc điều phối và quản lý các container cũng như các node có trong cụm Kubernetes Để tăng khả năng xử lý sự cố và đảm bảo tính sẵn sàng của Kubernetes, một cụm có thể bao gồm nhiều Master node, mỗi node này có chức năng như Kubernetes API Server, etcd, Scheduler, Controller Manager, và Cloud Controller Manager.Worker/Slave

Node

Worker/Slave Node là các máy chủ chịu trách nhiệm vận hành các ứng dụng được Master Node điều khiển Worker Node được cấu hình để có thể chạy trên tất cả các nút thuộc Kubernetes và nhiệm vụ của nó là quản lý và thông báo tình trạng của các Pods cho Master Node Các thành phần chính có trong Worker Node bao gồm Kubelet, Kubernetes Service Proxy, và Container Runtime.

Các Addons

Các Addons (service và pod) đóng vai trò quan trọng trong Kubernetes bằng cách thực hiện các chức năng của cluster, bao gồm Container Resource Monitoring, DNS Server, Cluster-level Logging

2.2.1 Master Node

Master node trong cụm Kubernetes đóng vai trò quản lý tất cả các nhiệm vụ quản trị, và có thể có nhiều hơn một master node để tăng tính sẵn sàng và khả năng chịu lỗi Mỗi master node bao gồm các thành phần sau:

Etcd cluster: Là một hệ thống lưu trữ giá trị khóa phân tán, được sử dụng để lưu

trữ dữ liệu cụm Kubernetes, như trạng thái pod, namespace, và API object Các node master kết nối với etcd để quản lý trạng thái cụm Etcd thông báo về các thay đổi cấu hình trong cụm sử dụng các watcher.

Trang 37

Kube-apiserver: Là thành phần quản lý API của Kubernetes, nhận các yêu cầu

REST để thực hiện sửa đổi trên các đối tượng như pod, service, bộ điều khiển, và các yếu tố khác Nó là giao diện người dùng chính cho cụm và là thành phần duy nhất giao tiếp trực tiếp với etcd.

Kube-controller-manager: Chạy các controller để xử lý các nhiệm vụ nền của

cụm, giúp đảm bảo rằng cluster đang hoạt động đúng với trạng thái được khai báo trong Resource.

Cloud-controller-manager: Quản lý các tiến trình của bộ điều khiển, phụ thuộc

vào nhà cung cấp cloud (nếu có) Ví dụ, nó kiểm tra trạng thái của node, thiết lập route, load-balancer, hoặc volume trong cơ sở hạ tầng cloud.

Việc tồn tại nhiều master node cùng tồn tại trong cụm giúp tăng tính sẵn sàng và khả năng chịu lỗi của Kubernetes.

2.2.2 Worker Node

Worker node là một máy chủ (máy ảo) chạy các ứng dụng mà sử dụng các Pod được điều

khiển bởi Master node Trên worker node, các pod được lập lịch Để truy cập các ứng

dụng từ bên ngoài, chúng ta có thể kết nối với chúng thông qua các node

Các thành phần của worker node gồm:

Kubelet – Là service chính trên mỗi node, sẽ thường xuyên nhận các thông số của pod

mới hoặc được sửa đổi (chủ yếu là thông qua kube-apiserver) và đảm bảo rằng các pod và container của chúng không có vấn đề gì và chạy ở trạng thái mong muốn Thành phần này cũng sẽ báo cáo cho master về tình trạng của node nơi nó đang chạy.

Kube-proxy – một dịch vụ proxy mà chạy trên mỗi worker node để xử lý vấn đề về mạng

trên mỗi worker node và expose các port của service với bên ngoài internet Nó sẽ thực hiện chuyển tiếp các yêu cầu đến các pod / container chính xác trên các mạng bị cô lập khác nhau trong một cụm

Trang 38

2.3 Các khái niệm trong Kubernetes

2.3.1 Pod

Pod trong Kubernetes là một khái niệm trừu tượng, đại diện cho một nhóm chứa một hoặc nhiều ứng dụng container (ví dụ như Docker) và một số tài nguyên được chia sẻ cho các container đó Những tài nguyên này bao gồm lưu trữ được chia sẻ dưới dạng Volumes, kết nối mạng như một cluster IP duy nhất, và thông tin về cách chạy từng container như phiên bản container image hoặc các cổng cụ thể để sử dụng.

Một Pod có thể được xem như một "máy chủ logic" dành riêng cho ứng dụng, có thể chứa các container khác nhau liên kết chặt chẽ Ví dụ, một Pod có thể bao gồm cả container với ứng dụng Node.js cùng với một container khác cung cấp dữ liệu cho webserver của Node.js Các container trong một Pod chia sẻ cùng một địa chỉ IP và không gian cổng, lên lịch và chạy cùng trên cùng một Node.

Pods được coi là các đơn vị nguyên tử trên Kubernetes, và khi triển khai một kịch bản triển khai (Deployment) trên Kubernetes, kịch bản triển khai đó tạo ra các Pods với các container bên trong chúng Mỗi Pod được liên kết với một Node nơi nó được lên lịch trình và tiếp tục ở đó cho đến khi chấm dứt theo chính sách khởi động lại Trong trường hợp có lỗi ở Node, các Pods tương tự có thể được lên lịch trình trên các Nodes khác trong cluster.

Hình 2.7 Pod trong Kubernetes

Trang 39

2.3.2 Node

Một Node trong Kubernetes đại diện cho một máy worker, có thể là máy ảo hoặc máy vật lý, phụ thuộc vào cụm Mỗi Node được quản lý bởi Master, và một Node có khả năng chứa nhiều Pods Kubernetes Master tự động xử lý việc lên lịch trình các Pods trên các Nodes trong cluster, và quá trình lên lịch trình tự động này tính đến tài nguyên có sẵn trên mỗi Node.

Mỗi Node trong Kubernetes ít nhất chạy các thành phần sau:

Kubelet: Là một quy trình có trách nhiệm liên lạc giữa Kubernetes Master và

Node, quản lý các Pods và containers đang chạy trên cùng một máy.

Container runtime (như Docker): Chịu trách nhiệm về việc lấy container, giải nén

container, và chạy ứng dụng Các containers chỉ nên được lên lịch trình cùng nhau trong một Pod nếu chúng được liên kết chặt chẽ và cần chia sẻ tài nguyên như disk.

Hình 2.8 Node trong Kubernetes

Trang 40

2.3.3 Service (svc)

Service là một khái niệm quan trọng trong Kubernetes, định nghĩa một tài nguyên xác định một pod hoặc một nhóm các pod cung cấp cùng một dịch vụ và các chính sách truy cập đến các pod đó Kubernetes cung cấp bốn loại service khác nhau để đáp ứng các yêu cầu đa dạng:

ClusterIP: Service chỉ có địa chỉ IP cục bộ và chỉ có thể truy cập được từ các

thành phần bên trong cluster Kubernetes.

NodePort: Service có thể tương tác thông qua cổng của các worker nodes trong

LoadBalancer: Service có địa chỉ IP public, có thể tương tác ở bất kỳ đâu, giúp

thực hiện cân bằng tải.

ExternalName: Ánh xạ service với một tên DNS, giúp quản lý các liên kết với các

tài nguyên bên ngoài cluster.

Ngày đăng: 04/04/2024, 10:37

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

Tài liệu liên quan