1. Trang chủ
  2. » Luận Văn - Báo Cáo

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 10 0

Đ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

Thông tin cơ bản

Tiêu đề 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
Tác giả Hồ Chí Thiện
Người hướng dẫn TS. Đỗ Trường Xuân
Trường học Trường Đại Học Thủy Lợi
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đồ Án Tốt Nghiệp
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 87
Dung lượng 3,83 MB
File đính kèm File Cau Hinh.rar (543 B)

Nội dung

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ẠO BỘ NÔNG NGHIỆP VÀ PTNT

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

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 K8s

của Google Cloud Platform

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

NHIỆM VỤ KHÓA LUẬN TỐT NGHIỆP

Trang 3

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

Lớp:60 TH 3

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

Khoa: Công nghệ thông tin

1 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

2 NỘI DUNG CÁC PHẦN THUYẾT MINH

Nội dung cần thuyết minh Tỷ 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

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ácContainer 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ệcquả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ácdị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ốigọ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 linhhoạ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ểnkhai một dự án kubernetes cluster và áp dụng công nghệ autoscaling trên đó Dự án demonà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ươngloạ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ườnghợ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ôngnghệ, 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ớicá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à horizontalautoscaling 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ìnhbà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ả ĐATN

Hồ 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ứcchuyê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ềntả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ủaKhoa 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.2.1 Virtual machine là gì? 14

1.2.2 Container là gì? 16

1.2.3 So sánh VM và Container 17

1.3.2 Docker 19

1.2 Tổng quan về Autoscaling 19

1.2.1 Auto Scaling là gì? 19

1.4.2 Lợi ích của Autoscaling 20

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

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 11

2.2.2 Worker Node 29

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

2.3.1 Pod 30

2.3.2 Node 31

2.3.3 Service (svc) 32

2.3.4 Deployment và ReplicaSet 34

2.3.5 Label và Selector trong Kubernetes 35

2.3.6 NameSpace 35

CHƯƠNG 3: GIẢI PHÁP AUTOSCALING 37

3.1 Horizontal Autoscaling 37

3.1.1 Quá trình Autoscaling 37

3.1.2 Thu thập metrics 38

3.1.3 Tính toán số lượng Pod cần thiết 39

3.1.4 Cập nhật trường replicas 41

3.1.5 Scale theo các chỉ số 42

3.1.6 Quản lý Pod mới trong Autoscaling 46

3.2 Vertical Autoscaling 57

3.2.1 Các thành phần của VPA 59

3.2.2 Update Policy 59

3.2.3 Thuật toán 61

CHƯƠNG 4: CẤU HÌNH VÀ DEMO 62

4.1 Kịch bản triển khai 62

4.1.1 Mô tả ứng dụng 62

4.1.2 Kịch bản triển khai 66

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.1 Màn hình đăng nhập 64

Hình 4.2 Màn hình đăng ký 64

Hình 4.3 Màn hình trang chủ 65

Hình 4.4 Màn hình nạp tiền 65

Hình 4.5 Màn hình rút tiền 66

Hình 4.6 Triển khai hạ tầng 68

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 xuhướ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ầngtruyề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ênnền tảng Kubernetes (K8s) của Google Cloud Platform (GCP) Kubernetes đã trở thànhmộ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ưulượ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ệntoá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ếnthứ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ầncấ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 chitiết về các phương pháp Autoscaling, thuật toán liên quan, cách mà hệ thống hoạt độngtrong 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ảnthự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)

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ườidù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, ứngdụ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ùngcuố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ểnkhai 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

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ơicá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 sautườ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ôngcộng và riêng Ngoài ra, "community cloud" là mô hình đám mây giữa các nhà cung cấpdị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ịchvụ), 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ộtdị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ớtthiế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 linhhoạ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àinguyê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ứngkhô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 cungcấ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 "Cloudcomputing" 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 chiphí 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à đượcxem 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 trongnhữ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ằngcá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ệpquan 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ấtthì 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ủaGoogle.

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ạtdự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ủaGoogle 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à doanhnghiệ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àonăm 2014, nó được đổi tên thành Microsoft Azure Azure được kích hoạt chủ yếu thôngqua 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ớibấ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óidị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ềukhiể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ểnthị 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ỗigiao 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 MachineMonitor) Về cơ bản, VMM được phân chia thành hai loại: VMM hoạt động như mộtphầ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ộthypervisor 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ùngtươ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ó haihướng tiếp cận hypervisor khác nhau được biết đến, đó là loại 2 (VMM-hypervisor) đượcgọ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ỏngmộ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ôngqua một trình quản lý máy ảo (Virtual Machines Monitor hay hypervisor) để tương tác vớità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ầnthự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à V

Hyper-1.1.4.5 OS-level virtualization (Isolation)

Ở mức độ hệ điều hành (OS level virtualization), còn được gọi là ContainersVirtualization hoặc Isolation, là một phương pháp ảo hóa mới cho phép nhân của hệ điềuhà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ẻ chonhiề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ệctriể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ẩmthương mại cho CC như của VMware, Microsoft (Hyper-V), hoặc sử dụng các sản phẩmnguồn mở như Eucalyptus và OpenStack Phần tiếp theo sẽ trình bày về lợi ích của hướngtiế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ênmộ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ầncứng (RAM, CPU, HDD, ) cho đến hệ điều hành đều được "ảo hóa", mang lại trảinghiệ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ôngthể đá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ềmhoặc phần cứng tạo ra và chạy các máy ảo (Virtual Machine) Nó đóng vai trò quan trọngnằ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ềuhà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à ứngdụ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ănghợ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ạytrê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ầnphả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ảiphó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 đíchkhá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ụnggiữ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ềuhành chủ (host system) Để chạy một dịch vụ, chúng ta phải khởi động toàn bộ hệ điềuhà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 caonhấ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 systemvirtualization) Trong phương pháp này, không có việc ảo hóa cả phần cứng và hệ điềuhà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àntoàn độc lập với nhau Thuật ngữ "Container" ở đây được hiểu là khái niệm đóng gói MộtContainer chứa đầy đủ ứng dụng và tất cả các thành phần phụ thuộc, bao gồm các filethự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ặcWindows 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ộtmá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àitră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àytươ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 caohơ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

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ểmkhá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ượngcô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 ảohó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ủacontainer 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ểnphần mềm

Trang 26

giới hạn).

Thực thi

(execution)

HĐH thật → HĐH ảo →HĐH ảo chạy phần mềm

(Đối với VPS, Hypervisortype 1 thay thế cho HĐH

(mất thời gian)

Phần mềm thật sẽ chạy

trênphần cứng thật Tốc độkhởi động sẽ như mộtphần mềm bình thường.Tính bảo mật

(Security)

Phần mềm nếu có mã độc cóthể gây ảnh hưởng tới tàinguyên của process kháctrong cùng VM Processtrong môi trường ảo khôngthể truy xuất tới môitrường của HĐH chủ

Process trong cùngcontainer có thể ảnhhưởng tới nhau Nhưngthường mỗicontainer chỉ nên chạy mộtprocess Process kháccontainer không thể gâyảnh hưởng cho nhau.Process trong môi trường

ảo không thể truy xuất tớimôi trường của HĐH chủ

Kubernetes là một hệ thống quản lý tập trung sử dụng Pods để tổ chức các nhómcontainer, 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 quaworker 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ạngthá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áchhiệ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âydự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ộtDocker 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ảipháp cho khách hàng, Kubernetes có thể là lựa chọn phù hợp hơn Mặc dù Docker cungcấ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áytí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 theonhu 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 webhoặ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ềnthố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ậmchí 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áytính Auto Scaling cho phép tự động mở rộng hoặc thu hẹp số lượng tài nguyên theo nhucầ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ềunà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êntheo 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ụngauto scaling giúp họ có thể tạm ngừng hoạt động một số máy chủ trong khoảngthờ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àinguyên thanh toán trong một thời điểm cố định, auto scaling vẫn hữu ích khi chạycá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ônglà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ườnghợ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ặcnă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ếntă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áychủ ả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ủamộ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ụngmộ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ệcthay đổ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ợpmá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 đốivớ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ệmngườ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 horizontalscaling:

 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àmgiá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ướccủ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ưngmang 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ấmdứ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áccụ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ảocâ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ệcmộ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ôngviệc, Kubernetes có khả năng tự động nhận biết việc sử dụng affinity (sự kết hợp) hoặcanti-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áccontainer có thể chia sẻ tài nguyên trên cùng một Node, trong khi anti-affinity có thể ngănchặ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ạngCPU 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àoDocker 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ệusuấ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 Kubernetesgiú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ệnhHTTP/TCP/shell, giúp đảm bảo rằng các container và các service đang chạy đều trongtrạ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úpKubernetes 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 quaService Trong trường hợp sử dụng máy ảo và thiết lập load balancing, endpoint đượccung 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ệnscale, 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ự độngcá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ứcnăng cụ thể, Service discovery trở thành một yếu tố quan trọng để đảm bảo các thànhphầ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ốinhư 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íatrên Tuy nhiên, khi sử dụng Kubernetes, chúng ta có thể tận dụng cơ chế tự động hóamạ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ụmKubernetes Để tăng khả năng xử lý sự cố và đảm bảo tính sẵn sàng của Kubernetes, mộtcụm có thể bao gồm nhiều Master node, mỗi node này có chức năng như Kubernetes APIServer, 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 MasterNode đ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ộcKubernetes 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 choMaster Node Các thành phần chính có trong Worker Node bao gồm Kubelet, KubernetesService 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ựchiệ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ỗimaster 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ácnode 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 duynhấ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áotrong 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ậproute, 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ăngchị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àycũ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ựchiệ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ậpkhá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ặcnhiều ứng dụng container (ví dụ như Docker) và một số tài nguyên được chia sẻ cho cáccontainer đó 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ứacá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ủaNode.js Các container trong một Pod chia sẻ cùng một địa chỉ IP và không gian cổng, lênlị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ảntriển khai (Deployment) trên Kubernetes, kịch bản triển khai đó tạo ra các Pods với cáccontainer 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ăngchứa nhiều Pods Kubernetes Master tự động xử lý việc lên lịch trình các Pods trên cácNodes 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ênmỗ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 nhautrong 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 truycập đến các pod đó Kubernetes cung cấp bốn loại service khác nhau để đáp ứng các yêucầ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

cluster

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

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] [Online]. Available: https://uetacad.com/ao-hoa-va-dien-toandam-may/ Link
[2] [Online]. Available: https://news.bnn.vn/su-khac-nhau-giua-aohoa-container-va-virtual-machine/ Link
[3] [Online]. Available: https://codeschool.vn/portal/so-sanhdocker-container-va-may-ao-virtual-machine/ Link
[4] [Online]. Available: https://cloudfun.vn/threads/di-tim-cau-traloi-dau-la-nen-tang-quan-ly-container-pho-bien-nhat.451/ Link
[5] [Online]. Available: https://infotechz.vn/auto-scaling-la-gi/ Link
[6] [Online]. Available: https://uetacad.com/cac-phuong-thucscaling-trong-aws/ Link
[7] [Online]. Available: https://uetacad.com/aws-auto-scaling-la-gicau-tao-cach-thuc-hoat-dong-cua-auto-scaling/ Link
[8] [Online]. Available: https://bizflycloud.vn/tin-tuc/kubernetesla-gi-vai-tro-cua-kubernetes-la-gi-20181015094513924.htm Link
[9] [Online]. Available: https://bantincongnghe.net/kien-truccua-kubernetes/#Master_Node Link
[10] [Online]. Available: https://hocdevops.com/kubernetes/kientruc-cua-kubernetes/ Link
[11] [Online]. Available: https://viblo.asia/p/kubernetes-tim-hieu-vekubernetes-service-types-L4x5xrgaZBM Link
[12] [Online]. Available: https://viblo.asia/p/kubernetes-series-bai-16- automatic-scaling-pod-va-cluster-YWOZrGyRlQ0 Link
[13] [Online]. Available: https://viblo.asia/p/kubernetes-series-bai-18- advanced-scheduling-node-affinity-and-pod-affinity-gAm5y7jqZdb Link

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w