



















Preview text:
  lOMoAR cPSD| 58702377
TRƯỜ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 và viết ứng dụng 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)    
ĐH SƯ PHẠM KỸ THUẬT 
XÃ HỘI CHỦ NGHĨA VIỆT NAM        lOMoAR cPSD| 58702377
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  TP.HCM KHOA CNTT 
Độc lập – Tự do – Hạnh Phúc   Họ  và tên  ******* ******* Sinh      viên 
2: Nguyễn Hoài NamMSSV: 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) 
ĐH SƯ PHẠM KỸ THUẬT 
XÃ HỘI CHỦ NGHĨA VIỆT NAM  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 PHẢN BIỆN   
Họ và tên Sinh viên 1: Vũ Văn Phước  MSSV: 19133045        lOMoAR cPSD| 58702377  
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)  LỜ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.      lOMoAR cPSD| 58702377
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.      lOMoAR cPSD| 58702377 MỤC LỤC  LỜI CẢM ƠN  3  PHẦN 1: MỞ ĐẦU  9 
1.1 Tính cấp thiết của đề tài  9 
1.2 Mục đích của đề tài  9 
1.3 Đối tượng và phạm vi nghiên cứu  9 
1.4 Kết quả dự kiến đạt được  9  PHẦN 2: NỘI DUNG  9 
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT  9 
1.1 Sơ lược về điện toán đám mây (Cloud)  9 
1.2 Sơ lược về AWS  10 
1.2.1 Giới thiệu AWS  10 
1.2.2 Các dịch vụ hỗ trợ  10 
1.3 Sơ lược về Kubernetes  11 
1.3.1. Khái niệm Kubernetes  11 
1.3.2. Các thành phần chính trong cấu trúc Kubernetes  11 
1.3.2.1. Master (hay còn gọi là control plane)  11  1.3.2.2. Worker  12 
1.3.3. Những khái niệm cơ bản quan trọng trong Kubernetes  12 
1.3.4 Lợi ích khi sử dụng Kubernetes  14 
1.4 Sơ lược về Helm  15 
1.5 Sơ lược về Minikube  15 
1.6 Một số khái niệm khác  16  1.6.1. Volumes  16 
1.6.2. Persistent Volume  16 
1.6.3. Persistent Volume Claim  17 
1.7 Các nguyên tắc khi scale trong kubernestes  17  1.7.1. Autoscaling  17 
1.7.2. HPA (Horizontal Pod Autoscaler)  17 
1.7.3. VPA (Vertical Pod AutoScaler)  17      lOMoAR cPSD| 58702377
CHƯƠNG 2: THIẾT KẾ VÀ CÀI ĐẶT  17 
2.1 Cài đặt cụm kubernetes  18 
2.1.1 Sơ đồ thiết kế  19 
2.2 Xây dựng một web  19 
2.3 Cài đặt chương trình  21  2.4 Chạy website  21  PHẦN 3: KẾT LUẬN  24 
3.1 Kết quả đạt được  24 
3.2 Ưu nhược điểm của đề tài  24  3.2.1 Ưu điểm  24 
3.2.2 Nhược điểm  24 
3.3 Hướng phát triển  24 
TÀI LIỆU THAM KHẢO  25      DANH 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        lOMoAR cPSD| 58702377 DANH MỤC BẢNG        lOMoAR cPSD| 58702377
DANH MỤC TỪ VIẾT TẮT        lOMoAR cPSD| 58702377 PHẦN 1: MỞ ĐẦU 
1.1 Tính cấp thiết của đề tài 
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 Mục đích của đề tài 
- 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 và phạm vi nghiên cứu 
- Đố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 Kết quả dự kiến đạ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.  PHẦ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 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.      lOMoAR cPSD| 58702377
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ề 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 vụ 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, 
Networking 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.      lOMoAR cPSD| 58702377
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 thành 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ó: 
1.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:  api-server 
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.  Etcd 
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.      lOMoAR cPSD| 58702377
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.  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 đị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.  1.3.2.2. Worker 
Có nhiệm vụ xử lý workload của application trong cluster. Worker sẽ bao gồm 3  thành phần chính sau:  kube-proxy 
Chạ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 
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 Kubernetes  PODS 
● 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.      lOMoAR cPSD| 58702377
● 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.  SERVICES 
● 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 
● 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. 
● 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ô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.  REPLICASETS 
● 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).  STATEFULSETS      lOMoAR cPSD| 58702377
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à mongo-01, mong-02, mongo03, 
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)  CONFIGMAPS 
● 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. 
+ 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 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.  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ử dụng Kubernetes 
- Kubernetes được thiết kế để cung cấp developer những lợi ích sau:      lOMoAR cPSD| 58702377
● 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 
- 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ấtcả 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át triển hàng  ngày      lOMoAR cPSD| 58702377
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 khi 
vù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ên  làm quen với Pods.  Các loại Volumes:    + awsElasticBlockStore    + azureDisk    + cinder    + configMap 
1.6.2. Persistent Volume 
PersistentVolume (PV) là một phần không gian lưu trữ dữ liệu trong cụm được 
cấp phát bởi Cluster Admin hoặc được cấp phát linh hoạt. Nó là một loại tài nguyên của 
của cụm cũng giống như 1 node là tài nguyên của cụm. Các PV này cũng giống như các 
Volume thuần khác, tuy nhiên nó tồn tại hoàn toàn độc lập với bất kỳ pod nào sử dụng  PV. 
Chu kỳ của volume và claim 
- Provisioning: statically or dynamically  - Binding  - Using  Cấu hình PV: 
- Capacity: PV sẽ có dung lượng lưu trữ cụ thể. Điều này được đặt bằng cách sử 
dụng thuộc tính capacity của PV 
- Volume mode: Có 2 loại Filesystem và Block  - Access  Modes:  ReadWriteOnce,  ReadWriteOnce,  ReadOnlyMany, 
ReadWriteMany, ReadWriteOncePod  - storageClassName  - Reclaim Policy 
- Mount Options: Hiện tại, Kubernetes hỗ trợ rất nhiều các loại Persistent Volume 
khác nhau được cài đặt dưới dạng plugin như glusterfs, nfs, csi, ...      lOMoAR cPSD| 58702377
1.6.3. Persistent Volume Claim 
Sử dụng không gian lưu trữ (PV) thì cần tạo một PersistentVolumeClaim (PVC). 
Nó chính là một yêu cầu sử dụng không gian lưu trữ (yêu cầu sử dụng PV). Thông 
thường người dùng sẽ tạo một manifest PersistentVolumeClaim, chỉ định số lượng, loại 
lớp lưu trữ (storage class), yêu cầu các mức tài nguyên CPU, bộ nhớ,... Ngoài ra, PVC 
còn có thể xác định các chế độ quyền truy cập cụ thể vào vùng lưu trữ 
(ví dụ như: ReadWriteOnce, ReadOnlyMany or ReadWriteMany 
1.7 Các nguyên tắc khi scale trong kubernestes  1.7.1. Autoscaling 
Auto-scaling là cách thức tự động tăng/giảm tài nguyên máy tính mà được cấp cho 
app của chúng ta bất kì thời điểm nào khi cần. Điều này giúp tạo ra những hệ thống trên 
cloud có khả năng mở rộng 24/24 nhằm đáp ứng nhu cầu sử dụng. 
ReplicaSet là một điều khiển Controller - nó đảm bảo ổn định các nhân bản (số 
lượng và tình trạng của POD, replica) khi đang chạy. 
1.7.2. HPA (Horizontal Pod Autoscaler) 
Horizontal Pod Autoscaler là chế độ tự động scale (nhân bản POD) dựa vào mức 
độ hoạt động của CPU đối với POD, nếu một POD quá tải - nó có thể nhân bản thêm 
POD khác và ngược lại - số nhân bản dao động trong khoảng min, max cấu hình 
HPA đem lại các lợi ích: kinh tế, tự động hóa việc tăng giảm cấu hình hệ thống 
phù hợp với các hệ thống có khối lượng tải (mức enduser sủ dụng) biến đổi nhiều và  khó dự đoán. 
1.7.3. VPA (Vertical Pod AutoScaler) 
VPA cho phép bạn phân tích và đặt tài nguyên CPU và bộ nhớ theo yêu cầu của 
Pod. Thay vì phải thiết lập các yêu cầu và giới hạn CPU cập nhật cũng như các yêu cầu 
và giới hạn bộ nhớ cho các vùng chứa trong Pod của bạn, bạn có thể định cấu hình tính 
năng tự động thay đổi tỷ lệ theo chiều dọc của Pod để cung cấp các giá trị được đề xuất 
cho các yêu cầu và giới hạn CPU và bộ nhớ mà bạn có thể sử dụng để cập nhật theo 
cách thủ công của bạn hoặc bạn có thể định cấu hình tính năng tự động định tỷ lệ Pod 
dọc để tự động cập nhật các giá trị. 
CHƯƠNG 2: THIẾT KẾ VÀ CÀI ĐẶT 
Đối với các đề tài ứng dụng có kết quả là sản phẩm phần mềm phải có mô hình, hồ sơ 
thiết kế, cài đặt, ... theo một trong các mô hình đã học (UML, ...)      lOMoAR cPSD| 58702377
2.1 Cài đặt cụm kubernetes    ● Bước 1: 
- Tại mỗi server, tiến hành cài đặt các docker 
- Thiết lập các Repository - 
Cài đặt các docker engine    ● Bước 2: 
- Đảm bảo rằng br_netfilter module được loaded, kiểm tra bằng: sudo modprobe  br_netfilte 
- Tắt Swap và Bật Kernel modules ● Bước 3: 
- Trên mỗi server, cài đặt Kubernetes   
+ Update và install các package cần thiết   
+ Download the Google Cloud public signing key   
+ Thêm the Kubernetes apt repository   
+ Update lại và install kubelet, kubeadm and kubectl    ● Bước 4: 
- Trên máy master, khởi tạo một master nodes 
- Sau khi câu lệnh kết thúc command, copy kubeadm để join các máy cluster ●  Bước 5: 
- Thiết lập tệp cấu hình kubernetes để sử dụng chung    ● Bước 6: 
- Áp dụng một plugin mạng chung. Trong trường hợp này, Flannel  kubectl apply -f 
https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827 
915/Documentation/kube-flannel.yml    ● Bước 7: 
- Tiến hành join các cluster vô cụm Kubernetes vừa tạo ●  Bước 8: 
- Kiểm tra xem mọi thứ đã ổn chưa  kubectl get nodes   
Hình 1: Kết quả tạo cluster      lOMoAR cPSD| 58702377
2.1.1 Sơ đồ thiết kế   
Hình 2: Mô hình cluste 3 nodes 
2.2 Xây dựng một web  - Xây dựng các files html    + giao diện chính      + giao diện deploy      lOMoAR cPSD| 58702377     + giao diện thông tin      + thông tin về các chart   
- Xây dựng các files css, js để hỗ trợ