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 1BỘ 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 2HỒ 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 3Họ 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 44 NGÀY GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Trang 5TRƯỜ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 6tà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 7LỜ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 8thứ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 9LỜ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 10MỤ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 112.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 124.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 13PHỤ 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 14Hì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 15LỜ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 16Chươ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 19Nhì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 20thô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 21User 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 22củ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 23Khi 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 24phí 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 25cá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 26giớ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 27Kubernetes 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 28Cô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 291.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 30quy 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 315 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 32CHƯƠ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 33Hì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 34Ngoà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 35Hì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 36Master 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 382.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 392.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 402.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