lOMoARcPSD| 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
Thứ 7 (tiết 12-15)
Sinh viên thực hiện: (
Đề tài 1 nhóm 1)
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
lOMoARcPSD| 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
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
TP.HCM KHOA CNTT
*******
XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độ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
TP.HCM KHOA CNTT
*******
Độc lập – Tự do – Hạnh Phúc
*******
lOMoARcPSD| 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.
lOMoARcPSD| 58702377
Nhóm thực hiện xin cảm ơn sự quan tâm 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.
lOMoARcPSD| 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
lOMoARcPSD| 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
lOMoARcPSD| 58702377
DANH MỤC BẢNG
lOMoARcPSD| 58702377
DANH MỤC TỪ VIẾT TẮT
lOMoARcPSD| 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ổ cùng mạnh mẽ. 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 khó khăn trở n đơn giản hơn. Kubernetes nghĩa 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 khó khan khi phải tốn một khoảng thời
gian đ đào tạo tập huấn. Từ những điều đó, nhóm quyết định chọn đề tài 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 các dịch vhỗ trợ của AWS cho việc tạo
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
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 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 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 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ữ 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 hạ tầng đ cloud lo.
lOMoARcPSD| 58702377
Chúng ta th trin khai nhanh chóng ng dụng của mnh không cần suy
nghĩ mnh cần mua server bao nhiêu GB ram, ổ đĩa bao nhiêu TB cho đủ.
- Quy linh hoạt: khi xây dựng hệ thống chúng ta cần thiết kế htầ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ế sẽ 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 chúng ta thực sự cần
chúng ta trả tiền với nhu cầu sử dụng thực tế. Chúng ta 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 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 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ụ 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 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 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.
lOMoARcPSD| 58702377
1.3 Sơ lược về Kubernetes
1.3.1. Khái niệm Kubernetes
- Kubernetes là một platform đ deploy, scaling manage (quản lý) các ứng dụng
hoạt động dựa trên Container. Các ứng dụng th khác nhau về 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 container orchestration (dịch ra nghĩa
điều phối container). Kubernetes đảm bảo rằng tất cả container được 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 một tập hợp nhiều Node trong đó các Node sẽ cung cấp các tài
nguyên như computing, memory, storage networking. Một hệ thống quy to
có th bao gồm nhiều Cluster.
Node đây có th 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.
hai loại Node trong Kubernetes Cluster 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 High-Availability) th Master 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
Key-value Storage được sử dụng đ lưu trữ toàn bộ cấu hnh, trạng thái
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.
lOMoARcPSD| 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
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 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
network policy trên mỗi Node chuyn tiếp hoặc lọc traffic tới Node dựa trên các
policy này.
kubelet
Kubelet một agent chạy trên mỗi Worker Node. kubelet 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.
lOMoARcPSD| 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, 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 thay vào đó chúng ta sẽ sử dụng một object khác gọi
Service.
SERVICES
Trong trường hợp phổ biến nhất, Services đại diện cho một đim o (hay còn
gọi entry-point) đ truy cập application của bạn. Services được sử dụng đ
khám p 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 Labels 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 th 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 nhóm các object trong Cluster. Một object
có th nhiều Label và mỗi Label 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 nghĩa 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.
dụ: Chúng ta th sử dụng Annotations đ bổ sung các thông tin n
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 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
lOMoARcPSD| 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ẽ 4 Pod tên lần lượt 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 dliệ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 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 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 ơ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 Secrets th được truyền vào Pod thông qua Manifest file
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:
lOMoARcPSD| 58702377
Kubernetes cung cấp các công cụ 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
bằng Image mới. Nếu lỗi, bạn 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ỗi Service sẽ chỉ thực
hiện một chức năng duy nhất (còn được gọi 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 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 Linux) đ th dùng thử Kubernetes hoặc cho công việc phát trin hàng
ngày
lOMoARcPSD| 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 đề 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) 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 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ẽ dung lượng 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 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, ...
lOMoARcPSD| 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).
chính 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 cách thức tự động tăng/giảm tài nguyên máy tính đượ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 một điều khin Controller - đả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 qtải - 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 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 đặt tài nguyên CPU 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 giới hạn CPU bộ nhớ bạn th sử dụng đ cập nhật theo
cách thủ công của bạn hoặc bạn 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, ...)
lOMoARcPSD| 58702377
2.1 Ci đặt cm kubernetes
ớ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
lOMoARcPSD| 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
lOMoARcPSD| 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ợ

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ợ