Từ những điều đó, nhóm quyết định chọn đề tài và tạo ra một trang website tương tác đơn giản với kubernestes.1.2 M6c đích của đề t1i- T?m hi@u hệ thống Cloud AWS và các dịch vụ hỗ trợ củ
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINHKHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CUỐI KỲ MÔN HỌC ĐIỆN TOÁN ĐÁM MÂY
Trang 2TP.HCM KHOA CNTT
Độc lập – Tự do – Hạnh Phúc
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Họ và tên Sinh viên 1: Vũ Văn Phước MSSV: 19133045 Họ và tên Sinh viên 2: Nguyễn Hoài Nam MSSV: 19133037 Họ và tên Sinh viên 3: Nguyễn Vũ Lực MSSV: 19133034 Ngành: Kỹ thuật dữ liệu
Tên đề tài: T?m hi@u Kubernetes và viết ứng dụng demo Họ và tên Giáo viên hướng dẫn: Huỳnh Xuân Phụng
Tp Hồ Chí Minh, ngày tháng năm 2021
Giáo viên hướng dẫn
(Ký & ghi rõ họ tên)
Trang 3TP.HCM KHOA CNTT
Độc lập – Tự do – Hạnh Phúc
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Họ và tên Sinh viên 1: Vũ Văn Phước MSSV: 19133045 Họ và tên Sinh viên 2: Nguyễn Hoài Nam MSSV: 19133037 Họ và tên Sinh viên 3: Nguyễn Vũ Lực MSSV: 19133034 Ngành: Kỹ thuật dữ liệu
Tên đề tài: T?m hi@u Kubernetes và viết ứng dụng demo Họ và tên Giáo viên phản biện:
Tp Hồ Chí Minh, ngày tháng năm 2021
Giáo viên phản biện
(Ký & ghi rõ họ tên)
Trang 4LỜI CẢM ƠN
Lời nói đầu tiên, nhóm thực hiện xin được gửi đến thầy Huỳnh Xuân Phụng – giảng viên bộ môn lời cảm ơn chân thành và sâu sắc nhất.
Nhóm thực hiện xin cảm ơn sự quan tâm và giúp đỡ tận t?nh của thầy trong suốt quá tr?nh giảng dạy Cảm ơn thầy đã luôn giải đáp những thắc mắc cũng như đưa ra những nhận xét, góp ý giúp nhóm thực hiện cải thiện chất lượng công việc của nhóm.
V? khả năng còn hạn chế nên trong quá tr?nh thực hiện báo cáo không tránh khỏi sai sót, kính mong nhận được những ý kiến đóng góp từ thầy đ@ nhóm có th@ cải thiện hơn sau này.
Nhóm thực hiện xin chân thành cảm ơn.
Trang 51.3.2 Các th1nh phần chính trong cấu trúc Kubernetes121.3.2.1 Master (hay còn gọi l1 control plane)12
1.3.3 Những khái niệm cơ bản quan trọng trong Kubernetes14
5
Trang 7DANH MỤC HÌNH
H?nh 1: Kết quả tạo cluster 21
H?nh 2: Mô h?nh cluste 3 nodes 21
H?nh 3: Cây thư mục app 23
H?nh 4: Kết quả deploy app 23
H?nh 5: Giao diện khi truy cập website 24
H?nh 6: Giao diện sử dụng 24
H?nh 7: Giao diện thông tin chart đã deploy 25
H?nh 8: Giao diện thay đổi replicas 25
H?nh 9: Giao diện xem thông tin tất cả các deployment 25
7
Trang 8DANH MỤC BẢNG
8
Trang 9DANH MỤC TỪ VIẾT TẮT
9
Trang 10PHẦN 1: MỞ ĐẦU
1.1 Tính cấp thi2t của đề t1i
Những năm vừa qua, Kubernetes đã bùng nổ vô cùng mạnh mẽ Cùng lúc đó tạo ra những cộng đồng, hệ sinh thái mới giúp việc phát tri@n, tri@n khai ứng dụng vốn phức tạp và khó khăn trở nên đơn giản hơn Kubernetes có nghĩa là người lái tàu th? Helm chính là bánh lái của con tàu ấy trong “nghiệp” của mỗi DevOps và Developer
Thế nhưng, khi chuy@n qua từ những phương pháp deploy truyền thống sang Kubernestes th? sẽ trở thành thách thức lớn và khó khan khi phải tốn một khoảng thời gian đ@ đào tạo và tập huấn Từ những điều đó, nhóm quyết định chọn đề tài và tạo ra một trang website tương tác đơn giản với kubernestes.
1.2 M6c đích của đề t1i
- T?m hi@u hệ thống Cloud AWS và các dịch vụ hỗ trợ của AWS cho việc tạo và phát tri@n cụm Kubernetes.
- T?m hi@u về Kubernetes
- Hoàn thiện một trang web hỗ trợ deploy các chart
1.3 Đối tượng v1 phạm vi nghiên c3u
- Đối tượng nghiên cứu: Đối tượng nghiên cứu của đồ án là t?m hi@u, phân tích và xây dựng một cụm Kubernetes và tạo web đ@ deploy chart
- Phạm vi nghiên cứu: Đồ án chỉ nghiên cứu trong phạm vi mà dịch vụ AWS hỗ trợ cho tài khoản sinh viên.
1.4 K2t quả dự ki2n đạt được
Trong phạm vi nghiên cứu của đề tài nhóm chúng em dự kiến sẽ hoàn thiện được một website hỗ trợ deploy các helm chart trên máy ảo EC2 của AWS Website này có các chức năng cơ bản là tạo chart, xóa, sửa, xem thông tin các chart.
10
Trang 11PHẦN 2: NỘI DUNG
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT1.1 Sơ lược về điện toán đám mây (Cloud)
Điện toán đám mây là việc phân phối các tài nguyên CNTT theo nhu cầu qua Internet với chính sách thanh toán theo mức sử dụng Thay v? mua, sở hữu và bảo tr? các trung tâm dữ liệu và máy chủ vật lý, chúng ta có th@ tiếp cận các dịch vụ công nghệ, như năng lượng điện toán, lưu trữ và cơ sở dữ liệu, khi cần thiết, từ nhà cung cấp dịch vụ đám mây,
Tri@n khai dịch vụ trên Cloud có rất nhiều lợi ích như:
- Nhanh chóng: Cloud cho phép chúng ta tiếp cận nhiều công nghệ đ@ chúng ta có th@ thay đổi và phát tri@n gần như tất cả mọi thứ chúng ta có th@ tưởng tượng ra Chúng ta chỉ cần tập trung vào ý tưởng, còn giải pháp và hạ tầng đ@ cloud lo Chúng ta có th@ tri@n khai nhanh chóng ứng dụng của m?nh mà không cần suy nghĩ m?nh cần mua server bao nhiêu GB ram, ổ đĩa bao nhiêu TB cho đủ - Quy mô linh hoạt: khi xây dựng hệ thống chúng ta cần thiết kế hạ tầng đáp ứng
1 yêu cầu bài toán nào đó Nhưng sẽ là lãng phí nếu chúng ta xây dựng hệ thống quá lớn so với nhu cầu thực tế và sẽ là quá tồi nếu 1 ngày nào đó hệ thống của xây dựng không đáp ứng được nhu cầu sử dụng Cloud giúp chúng ta giải quyết hoàn toàn linh hoạt Chúng ta cung cấp tài nguyên mà chúng ta thực sự cần và chúng ta trả tiền với nhu cầu sử dụng thực tế Chúng ta có th@ ngay lập tức tăng hoặc giảm lượng tài nguyên khi nhu cầu kinh doanh của chúng ta thay đổi - Tiết kiệm chi phí: Chúng ta cung cấp lượng tài nguyên phù hợp với nhu cầu,
chúng ta trả tiền trên những g? chúng ta sử dụng.
- Đưa sản phẩm global với thời gian ngắn: Với cloud, chúng ta có th@ đưa ứng dụng, giải pháp, sản phẩm của m?nh ra toàn thế giới chỉ trong vài phút và trong 1 vài cú click chuột
1.2 Sơ lược về AWS1.2.1 Giới thiệu AWS
Amazon Web Services (AWS) là nền tảng đám mây được cung cấp bởi Amazon Là dịch vụ cung cấp cơ sở hạ tầng CNTT cho các doanh nghiệp với chi phí thấp, độ linh hoạt, an toàn cao AWS được sử dụng rộng rãi nhất, cung cấp trên 200 dịch vụ đầy đủ tính năng từ các trung tâm dữ liệu trên toàn thế giới.
1.2.2 Các dịch v6 hỗ trợ
AWS cung cấp rất nhiều dịch vụ (trên 200 dich vụ) một số dịch vụ còn được sử dụng miễn phí Trong đó, các dịch vụ cơ bản như: Compute, Storage, Database, 11
Trang 12Networking and content delivery, Developer tools, Management Tools, Analytics, Internet of things, Machine learning, EC2… lại chứa rất nhiều các dịch vụ nhỏ hơn bên trong.
Trong phạm vi nghiên cứu của đề tài, chúng em tập chung vô các dịch vụ chính là VPC, EC2.
- EC2 là dịch vụ Compute cloud, về cơ bản chúng ta có th@ thuê máy chủ của AWS và chúng ta có th@ cấu h?nh, chạy các dịch vụ của chúng ta trên đó Và hoàn toàn có th@ lựa chọn cấu h?nh m?nh mong muốn, có th@ tăng hoặc giảm tài nguyên sử dụng một cách dễ dàng Ngoài ra ec2 cũng cung cấp các cơ chế backup hoặc restore một cách nhanh chóng giúp chúng ta restore hoặc scale hệ thống của m?nh một cách cực kỳ nhanh chóng và dễ dàng.
1.3 Sơ lược về Kubernetes 1.3.1 Khái niệm Kubernetes
- Kubernetes là một platform đ@ deploy, scaling và manage (quản lý) các ứng dụng hoạt động dựa trên Container Các ứng dụng có th@ khác nhau về kích thước: từ 1 cho đến hàng ngh?n server.
- Với Kubernetes chúng ta có th@ phát tri@n application một cách linh hoạt và đáng tin cậy.
- Trách nhiệm chính của Kubernetes là container orchestration (dịch ra có nghĩa điều phối container) Kubernetes đảm bảo rằng tất cả container được lên lịch chạy trên các server (server ở đây có th@ là physical machine hoặc virtual machine).
- Ngoài ra, Kubernetes còn có chức năng theo dõi hoạt động của từng container và khi một container nào đó gặp trục trặc, dừng hoạt động th? Kubernetes sẽ thay thế container đó.
1.3.2 Các th1nh phần chính trong cấu trúc Kubernetes
Cluster là một tập hợp nhiều Node mà trong đó các Node sẽ cung cấp các tài nguyên như là computing, memory, storage và networking Một hệ thống ở quy mô to có th@ bao gồm nhiều Cluster.
Node mà ở đây có th@ là một physical machine (máy vật lý) hoặc virtual machine Trong một số tài liệu cũ về Kubernetes, Node còn được gọi là minion.
Có hai loại Node trong Kubernetes Cluster mà mỗi loại sẽ bao gồm các thành phần khác nhau.
Thứ nhất, chúng ta có:
12
Trang 131.3.2.1 Master (hay còn gọi là control plane)
Đối với cluster nhỏ, Master có th@ chạy trên một Node, nhưng trong một cluster lớn, đ@ đảm bảo tính khả dụng (trong tiếng anh là High-Availability) th? Master có th@ được chạy trên nhiều Node (Tính khả dụng có nghĩa là Khi mà một Node trong cluster dừng hoạt động th? hệ thống vẫn duy tr? như không có g? xảy ra).
Master sẽ bao gồm 5 thành phần chính sau:
Cung cấp REST API cho Kubernetes Cluster dùng đ@ xác thực và thiết lập configuration data cho các objects như Pods, Services.
Là Key-value Storage được sử dụng đ@ lưu trữ toàn bộ cấu h?nh, trạng thái và metadata của Kubernetes Cluster Trong các cluster nhỏ, etcd có th@ chạy trên cùng một Node với các thành phần khác Nhưng trong các cluster lớn, etcd có th@ chạy dự phòng trên nhiều Node đ@ đảm bảo tính khả dụng của toàn hệ thống.
Kube Controller Manager
Là một tập hợp các controller khác nhau đ@ theo dõi các cập nhật trạng thái của Kubernetes Cluster thông qua API và thực hiện các thay đổi đối với Cluster sao cho phù hợp.
Cloud Controller Manager
Là một tập hợp các logic dành riêng cho Cloud Provider (GCP, AWS, Azure) cho phép bạn liên kết Kubernetes Cluster với API của Cloud Provider.
Nếu bạn đang chạy Kubernetes on-premises hoặc môi trường dev trên máy tính của bạn, th? mặc định Cluster sẽ không có Cloud Controller Manager.
Sử dụng Kubernetes API đ@ t?m các Pod chưa được lên lịch Sau đó, scheduler sẽ đặt các Pod này vào các Node dựa trên tài nguyên và các ràng buộc khác được định nghĩa trong manifest file của Pod.
Scheduler sẽ cố gắng đảm bảo rằng các Pod của cùng một application sẽ được phân phối trên các Node khác nhau đ@ đảm bảo tính khả dụng.
Trang 14Chạy trên tất cả các Node trong cluster kube-proxy có trách nhiệm quản lý network policy trên mỗi Node và chuy@n tiếp hoặc lọc traffic tới Node dựa trên các policy này.
Kubelet là một agent chạy trên mỗi Worker Node kubelet có trách nhiệm giám sát giao tiếp với master node và quản lý các Pod.
Kubelet sử dụng CRI (Container Runtime Interface) đ@ giao tiếp với container runtime trên cùng một Node đó.
Container Runtime
Phần mềm chịu trách nhiệm chạy các container
1.3.3 Những khái niệm cơ bản quan trọng trong KubernetesPODS
● Trong Kubernetes, Pod là đơn vị nhỏ nhất đ@ schedule, deploy và cô lập runtime của một hoặc nhiều container liên quan tới nhau.
● Các container trong cùng một Pod sẽ luôn được schedule trên cùng một Node và cùng nhau chia sẻ tài nguyên, chẳng hạn như filesystem, và networking Nếu Node đó đột nhiên dừng hoạt động, các Pod nằm trên Node đó sẽ được schedule lại trên một Node khác trong Cluster.
● Application của bạn sẽ chạy trong Pod, nhưng thực tế bạn sẽ không truy cập trực tiếp vào Pods – mà thay vào đó chúng ta sẽ sử dụng một object khác gọi là Service.
● Trong trường hợp phổ biến nhất, Services đại diện cho một đi@m vào (hay còn gọi là entry-point) đ@ truy cập application của bạn Services được sử dụng đ@ khám phá và thực hiện chức năng load-balancing cho một nhóm đối tượng các Pods bằng nhãn (hay còn gọi là Labels mà m?nh sẽ giải thích ngay sau đây) Service giúp bạn scale application mà không ảnh hưởng đến end-user ● Ngoài ra, chúng ta cũng có th@ có Services cung cấp quyền truy cập tới các
resources bên ngoài Kubernetes Cluster
● Labels (Nhãn) cung cấp metadata nhận dạng cho các object trong Kubernetes Labels cho phép người dùng tổ chức và nhóm các object trong Cluster Một object có th@ có nhiều Label và mỗi Label có th@ được gán cho nhiều object khác nhau — đây là mối quan hệ MxN.
14
Trang 15● Người dùng có th@ sử dụng Label đ@ lọc các đối tượng trong Cluster một cách dễ dàng
● Annotations (dịch ra có nghĩa là chú thích) khá giống với Label Nhưng, Annotations nhằm mục đích cung cấp metadata đ@ máy tính sử dụng chứ không phải con người Annotations không dùng đ@ truy vấn cũng như đối sánh các object.
● Ví dụ: Chúng ta có th@ sử dụng Annotations đ@ bổ sung các thông tin như là timestamp, Git branch, Build IDs, Release IDs v.v.
● ReplicaSet đảm bảo rằng application sẽ luôn chạy đúng loại và số lượng Pod trong cluster Lấy ví dụ rất đơn giản là, trong thực tế, khi bạn webserver, thay v? chỉ chạy 1 instance, bạn sẽ muốn chạy 4 instance đ@ load balancing.
● Trong Kubernetes bạn có th@ sử dụng ReplicaSet đ@ làm việc đó ● Replica Set được thiết kế cho stateless application (ví dụ như Web Server).
Nh?n chung, StatefulSet tương tự như ReplicaSet nhưng sở hữu một số thuộc tính đặc biệt sau:
● Mỗi bản sao của Pod có một tên cố định và không thay đổi
● Mỗi bản sao của Pod được tạo theo thứ tự từ index thấp nhất đến cao nhất Ví dụ, m?nh tạo một StatefulSet chạy 4 replica của mongodb container, khi chạy thành công th? m?nh sẽ có 4 Pod có tên lần lượt là 01, mong-02, mongo-03, mongo-04, trong quá tr?nh khởi tạo th? mongo-02 sẽ bị block cho đến khi mongo-01 đi vào hoạt động Quy tắc này cũng sẽ được áp dụng khi bạn scale up application.
● Khi bạn xóa StatefulSet, các Pod mà StatefulSet đó quản lý sẽ bị xóa theo thứ tự từ index cao nhất về index thấp nhất Quy tắc này cũng sẽ được áp dụng khi bạn scale down application.
● Chúng ta sẽ sử dụng StatefulSets cho stateful application (stateful có nghĩa là dữ liệu của application sẽ được lưu lại trong mỗi session)
● ConfigMap cung cấp dữ liệu dưới dạng các cặp key-value đ@ truyền vào container tại runtime.
● Sau khi bạn tạo một ConfigMap, th? bạn có th@ sử dụng ConfigMap theo hai cách sau:
+ Một là tham chiếu tới các environment variable, trong đó các key trong ConfigMap trở thành tên của environment variable.
15
Trang 16+ Hai là các key trong Configmap sẽ được ánh xạ thành các file trên một ổ đĩa của Pod key sẽ tương ứng là tên của file.
● Secrets tương tự như ConfigMap nhưng được sử dụng đ@ cung cấp thông tin nhạy cảm cho container.
Ví dụ: MySQL DB Password, API token, v.v.
● Sử dụng Secrets cho phép bạn tạo container mà không cần đóng gói dữ liệu nhạy cảm trong container.
● Configmap và Secrets có th@ được truyền vào Pod thông qua Manifest file và Kubernetes API.
● Tất cả các object trong Kubernetes được deploy vào các namespaces ● Kubernetes sử dụng Namespace đ@ quản lý các object trong Cluster.
1.3.4 Lợi ích khi sử d6ng Kubernetes
- Kubernetes được thiết kế đ@ cung cấp developer những lợi ích sau:
● Kubernetes cung cấp các công cụ mà bạn cần đ@ phát tri@n application nhanh chóng trong khi vẫn duy tr? sự ổn định Kubernetes sử dụng Container Image mà trong đó application được đóng gói Khi bạn thêm chức năng mới, tương đương với việc tạo một Container Image mới Khi deploy, bạn chỉ cần thay thế Image cũ bằng Image mới Nếu có lỗi, bạn có th@ rollback ngay lập tức bằng cách deploy lại Image cũ.
● Application sẽ được chia nhỏ thành nhiều Service mà mỗi Service sẽ chỉ thực hiện một chức năng duy nhất (còn được gọi là microservice) Mỗi Service sẽ được duy tr? bởi một nhóm và có th@ scale dễ dàng hơn rất nhiều so với trong hệ thống thông thường.
● Kubernetes tự động khôi phục nếu có sự cố Khi một Container dừng hoạt động, Kubernetes sẽ tự động lên lịch đ@ chạy một Container khác.
● Nhiều application có th@ chạy trên cùng một máy mà không ảnh hưởng đến nhau Developer có th@ tập trung vào việc tạo thay v? nghĩ về vị trí các ứng dụng chạy.
● Tự động hóa việc phân phối các ứng dụng trên toàn cụm, đảm bảo mức độ sử dụng cao hơn so với công cụ truyền thống.Kubernetes API giúp ứng dụng của bạn có th@ di động trên nhiều môi trường khác nhau Ví dụ, Kubernetes Services biết cách tạo bộ cân bằng tải trên tất cả các đám mây công cộng chính.
1.4 Sơ lược về Helm
- Là một tr?nh quản lý gói cho các ứng dụng Kubernetes
16