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Í MINH
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CUỐI KỲ MÔN HỌC ĐIỆN TOÁN ĐÁM MÂY
ĐỀ TÀI T$m hi(u Kubernetes v1 vi2t 3ng d6ng demo
GVHD: Ths Huỳnh Xuân Phụng Lớp: Thứ 7 (tiết 12-15) Sinh viên thực hiện: (Đề tài 1 nhóm 1)
Vũ Văn Phước (MSSV: 19133045)Nguyễn Hoài Nam (MSSV: 19133037)Nguyễn Vũ Lực (MSSV: 19133034)
Trang 2
TP.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
NHẬN XÉT
Về nội dung đề tài khối lượng thực hiện:
1 Ưu đi@m:
2 Khuyết đi@m
3 Đề nghị cho bảo vệ hay không?
4 Đánh giá loại:
5 Đi@m:
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:
NHẬN XÉT
Về nội dung đề tài khối lượng thực hiện:
1 Ưu đi@m:
2 Khuyết đi@m
3 Đề nghị cho bảo vệ hay không?
4 Đánh giá loại:
5 Đi@m:
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 4V? 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ỏisai sót, kính mong nhận được những ý kiến đóng góp từ thầy đ@ nhóm có th@ cảithiệ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 Kubernetes 12 1.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 Kubernetes 14
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ốnphứ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 sangKubernestes th? sẽ trở thành thách thức lớn và khó khan khi phải tốn một khoảng thờigian đ@ đà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 ramộ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 đượcmộ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ẾT
1.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 quaInternet 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ôngnghệ, 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ấpdị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 suynghĩ 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ốngquá 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ủaxây dựng không đáp ứng được nhu cầu sử dụng Cloud giúp chúng ta giải quyếthoà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ănghoặ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 ứngdụ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ề AWS
1.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ơnbê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ủaAWS 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àinguyê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 ứngdụng hoạt động dựa trên Container Các ứng dụng có th@ khác nhau về kíchthướ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ịchchạy trên các server (server ở đây có th@ là physical machine hoặc virtualmachine)
- 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àinguyê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 virtualmachine 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ànhphầ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 clusterlớ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 clusterdừ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:
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ủaKubernetes Cluster thông qua API và thực hiện các thay đổi đối với Cluster sao chophù 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ínhcủa bạn, th? mặc định Cluster sẽ không có Cloud Controller Manager
Scheduler
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 địnhnghĩ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ẽ đượcphâ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ácpolicy này.
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 Kubernetes
PODS
● Trong Kubernetes, Pod là đơn vị nhỏ nhất đ@ schedule, deploy và cô lậpruntime 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ếuNode đó đột nhiên dừng hoạt động, các Pod nằm trên Node đó sẽ được schedulelạ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ậptrự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
SERVICES
● Trong trường hợp phổ biến nhất, Services đại diện cho một đi@m vào (hay còngọ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ácPods 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ácresources bên ngoài Kubernetes Cluster
LABELS
● 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ộtobject có th@ có nhiều Label và mỗi Label có th@ được gán cho nhiều objectkhá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
● 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ôngphải con người Annotations không dùng đ@ truy vấn cũng như đối sánh cácobject
● 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
REPLICASETS
● ReplicaSet đảm bảo rằng application sẽ luôn chạy đúng loại và số lượng Podtrong 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)
STATEFULSETS
Nh?n chung, StatefulSet tương tự như ReplicaSet nhưng sở hữu một số thuộc tính đặcbiệ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ạythành công th? m?nh sẽ có 4 Pod có tên lần lượt là mongo-01, mong-02, mongo-
03, mongo-04, trong quá tr?nh khởi tạo th? mongo-02 sẽ bị block cho đến khimongo-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 khibạ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)
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
● Secrets tương tự như ConfigMap nhưng được sử dụng đ@ cung cấp thông tinnhạ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ệunhạy cảm trong container
● Configmap và Secrets có th@ được truyền vào Pod thông qua Manifest file vàKubernetes API
NAMESPACES
● 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 nhanhchó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ằngcách deploy lại Image cũ
● Application sẽ được chia nhỏ thành nhiều Service mà mỗi Service sẽ chỉ thựchiệ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 đếnnhau Developer có th@ tập trung vào việc tạo thay v? nghĩ về vị trí các ứngdụ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ủabạn có th@ di động trên nhiều môi trường khác nhau Ví dụ, KubernetesServices 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
Trang 17- Helm repo: Tập hợp nhiều lệnh đ@ tương tác với chart ( có th@ thêm, sửa, xóa, tạo chỉmục )
- Helm chart: Là tập hợp những file YAML template của những Kubernetes resourcecần thiết đ@ dựng lên một ứng dụng Kubernetes
- Helm bitnami: đóng gói các ứng dụng theo tiêu chuẩn ngành và liên tục giám sát tất
cả các thành phần và thư viện đ@ t?m các lỗ hổng và các bản cập nhật ứng dụng
1.5 Sơ lược về Minikube
- Minikube là một công cụ cho phép bạn chạy Kubernetes cục bộ
- Minikube chạy cụm Kubernetes một nút trên máy tính cá nhân (bao gồm PCWindows, macOS và Linux) đ@ có th@ dùng thử Kubernetes hoặc cho công việc pháttri@n hàng ngày
1.6 Một số khái niệm khác
1.6.1 Volumes
Các tệp trên đĩa trong một vùng chứa là tạm thời, điều này gây ra một số vấn đềđối với các ứng dụng không nhỏ khi chạy trong vùng chứa Một vấn đề là mất tệp khivùng chứa gặp sự cố Kubelet khởi động lại vùng chứa nhưng ở trạng thái clean Sự cốthứ hai xảy ra khi chia sẻ tệp giữa các vùng chứa đang chạy cùng nhau trong một Pod
Sự trừu tượng hóa khối lượng Kubernetes giải quyết được cả hai vấn đề này Bạn nênlàm quen với Pods
sử dụng PV
Chu kỳ của volume và claim
- Provisioning: statically or dynamically
17