Tải bản đầy đủ (.pdf) (59 trang)

Tìm hiểu kubernetes và xây dựng ứng dụng minh họa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.52 MB, 59 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM

BÁO CÁO MƠN HỌC
ĐỒ ÁN 1

TÌM HIỂU KUBERNETES VÀ
XÂY DỰNG ỨNG DỤNG MINH HỌA
Giảng viên hướng dẫn: Nguyễn Công Hoan
Sinh viên thực hiện:
- Phạm Hồng Nhật Trường, 18521570
- Thơi Đặng Thắng Tường, 18521620

Tp. Hồ Chí Minh, tháng 6, 2021


NHẬN XÉT
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………


………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………

1


LỜI CẢM ƠN
Lời đầu tiên, chúng em xin chân thành cảm ơn đến tập thể quý thầy cô Trường Đại
học Công nghệ thông tin – Đại học Quốc gia TP.HCM và đặc biệt là thầy Nguyễn Công
Hoan đã hướng dẫn tận tình chúng em trong thời gian thực hiện đồ án. Nhờ có sự giúp đỡ
tận tình của thầy chúng em có thể hồn thành được đồ án một cách tốt nhất.
Tuy chúng em đã cố gắng hạn chế những sai sót hết mức có thể nhưng vì kiến thức
cịn hạn hẹp nên chúng em khó tránh khỏi những sai lầm, hạn chế trong quá trình thực
hiện đồ án. Do đó, chúng em mong nhận được ý kiến đóng góp từ thầy để chúng em có
thể khắc phục, sửa chữa.
Chúng em xin chân thành cảm ơn thầy
Tp. Hồ Chí Minh, tháng 6 năm 2021

2



TĨM TẮT
Trong bài báo cáo này, nhóm em sẽ trình bày về đề tài ‘Tìm hiểu Kubernetes và
xây dựng ứng dụng minh họa’. Bài cáo gồm hai phần chính: lý thuyết liên quan đến
Kubernetes và xây dựng ứng dụng minh họa sử dụng Kubernetes. Về phần Kubernetes,
nhóm em nghiên cứu cái tài liệu về Kubernetes, các khái niệm và tổng hợp các phần quan
trọng. Về phần xây dựng ứng dụng, nhóm chọn xây dựng một ứng dụng chia sẻ video và
triển khai, vận hành nó trên Kubernetes. Kết quả của bài báo cáo là trình bày được tổng
quan về Kubernetes và chạy thành công ứng dụng trên Kubernetes. Cuối cùng là đánh giá
kết quả đề tài nhóm thực hiện

3


MỤC LỤC
NHẬN XÉT

1

LỜI CẢM ƠN

2

TÓM TẮT

3

MỤC LỤC

4


CHƯƠNG 1. GIỚI THIỆU ĐỀ TÀI
1.1. Lý do chọn đề tài
1.2. Phạm vi đề tài
1.3. Mục tiêu đề tài

6
6
6
6

CHƯƠNG 2. TÌM HIỂU KUBERNETES
2.1. Kubernetes là gì?
2.2. Lịch sử
2.3. Các khái niệm
2.3.1. Control plane
2.3.2. Nodes
2.3.3. Pods
2.3.4. Deployments
2.3.5. ReplicaSet
2.3.6. StatefulSets
2.3.7. DaemonSets
2.3.8. Jobs
2.3.9. CronJobs
2.3.10. Namespaces
2.3.11. Services
2.3.12. Ingress
2.3.13. ConfigMaps
2.3.14. Secrets
2.3.15. Volumes
2.3.16. Persistent Volumes

2.3.17. StorageClasses
2.3.18. Persistent Volumes Claims
2.4. Lý do sử dụng Kubernetes

7
7
7
8
9
9
9
10
10
11
11
12
12
12
13
13
13
14
14
14
15
15
15
4



2.5. Các công cụ làm việc với Kubernetes
2.5.1. Kubectl
2.5.2. Kubeadm
2.5.3. Minikube
2.5.4. Kind
2.5.5. Dashboard
2.5.6. Helm

16
17
17
17
17
18
18

CHƯƠNG 3. XÂY DỰNG ỨNG DỤNG MINH HỌA
3.1. Ứng dụng
3.1.1. Mơ tả ứng dụng
3.1.2 Phân tích
3.1.2.1. Sơ đồ Use Case
3.1.2.2. Sơ đồ lớp
3.1.3. Thiết kế dữ liệu
3.1.3.1. Sơ đồ logic
3.1.3.2. Chi tiết kiểu dữ liệu
3.1.4. Thiết kế kiến trúc
3.1.4.1. Kiến trúc hệ thống
3.1.4.2. Chi tiết thành phần
3.1.5. Thiết kế các màn hình
3.1.5.1. Danh sách màn hình

3.1.5.2. Các màn hình
3.2. Kubernetes
3.2.1. Triết khai ứng dụng
3.2.2. Vận hành Kubernetes

19
19
19
19
19
26
27
27
27
31
31
31
32
32
33
44
44
50

CHƯƠNG 4. ĐÁNH GIÁ VÀ KẾT LUẬN
4.1. Kết quả đạt được
4.2. Hạn chế
4.3. Hướng phát triển

57

57
57
57

TÀI LIỆU THAM KHẢO

58

5


CHƯƠNG 1. GIỚI THIỆU ĐỀ TÀI
1.1. Lý do chọn đề tài
Theo xu hướng phát triển phần mềm hiện nay, các đội ngũ phát triển không chỉ phải quan
tâm đến chất lượng sản phẩm, mà còn phải đưa sản phẩm đến người dùng một cách
nhanh chóng. Nhu cầu cho một quy trình phần mềm liên tục là cần thiết, vai trị của người
kỹ sư DevOp trở nên quan trọng. Xu hướng kiến trúc microservice, CI/CD trở thành xu
hướng của các công ty phần mềm. Kubernetes một công nghệ cốt lõi mà mọi kỹ sư
DevOp cần phải biết.
Nhận thấy nhu cầu và sự cần thiết của cơng nghệ này, nhóm chúng em quyết định chọn
đề tài ‘Tìm hiểu Kubernetes và xây dựng ứng dụng minh họa’.

1.2. Phạm vi đề tài
Trong đồ án này, nhóm chúng em sẽ tập trung vào tìm hiểu về Kubernetes, lịch sử, khái
niệm, tính năng, cách hoạt động cũng như điểm mạnh điểm yếu của Kubernetes. Từ đó,
làm nền tảng để xây dựng một ứng dụng minh họa và triển khai lên Kubernetes.

1.3. Mục tiêu đề tài
Trong đề tài, nhóm chúng em hướng đến ba mục tiêu chính sau:
-


Thứ nhất, hiểu được các khái niệm, nội dung cơ bản về Kubernetes cũng như cách
thức hoạt động của Kubernetes.

-

Thứ hai, hiểu được quy trình làm việc của một đội phát triển, công việc của một
kỹ sư vận hành Kubernetes.

-

Thứ ba, Sử dụng những kinh nghiệm, kiến thức nhóm có được từ quá trình làm đề
tài này, làm nền tảng phát triển cho những đề tài sau này.

6


CHƯƠNG 2. TÌM HIỂU KUBERNETES
2.1. Kubernetes là gì?
Kubernetes là nền tảng điều phối container mã nguồn mở phục vụ nhằm tự động hóa các
quy trình triển khai, mở rộng quy mơ và quản lý các ứng dụng container.
Nói cách khác, Kubernetes giúp chúng ta nhóm các container thành cụm để quản lí một
chắc dễ dàng, hiệu quả.
Kubernetes được thiết kế bởi Google và là công nghệ đằng sau của các dịch vụ Google
Cloud. Nó nhằm mục đích cung cấp một "nền tảng để tự động hóa việc triển khai, mở
rộng quy mô và hoạt động của các vùng chứa ứng dụng trên các cụm máy chủ".

2.2. Lịch sử
Tiền thân của Kubernetes là Borg System, được giới thiệu trong khoảng 2003-2004. Khởi
đầu từ một dự án nhỏ, Borg là một hệ thống quản lý cụm cục bộ, có thể chạy hàng trăm

jobs, hàng trăm ứng dụng khắc nhau trong khắp cụm, trên hàng ngàn máy tính.
Sau Borg, Google giới thiệu hệ thống quản lý cụm Omega, linh hoạt, có thể mở rộng cho
hệ thống cụm máy tính lớn.
Năm 2014, Google giới thiệu Kubernetes như một phiên bản mã nguồn mở của Borg.
Microsoft, Redhat, IBM, Docker tham gia cộng đồng Kubernetes.
Năm 2015, Kubernetes 1.0 được phát hành. Google cộng tác Linux thành lập Cloud
Native Computing Foundation (CNCF) nhắm tới việc xây dựng một hệ sinh thái và thúc
đẩy một cộng đồng các ứng dụng chất lượng sử dụng hệ điều phối container như một
phần của kiến trúc microservices. Cuối 2015, xuất bản Kubernetes 1.1 với nhiều nâng
cấp.
Năm 2016, năm của Kubernetes trở thành làn sóng:
-

Helm được xuất bản, package manager của Kubernetes.
Kubernetes 1.2 được phát hành, cải thiện mở rộng, đơn giản hóa q trình triển
khai và tự động hóa quản lý cụm.
Kubernetes 1.3 được phát hành, cho phép khám phá các dịch vụ chạy ở nhiều cụm
Minikube được phát hành chính thức, công cụ giúp chạy Kubernetes cục bộ dễ
dàng hơn.

7


-

Kubernetes 1.4, ra mắt công cụ kubeadm, hỗ trợ việc cài đặt Kubernetes.
Kubernetes 1.5, hỗ trợ windows server

Năm 2017, năm của Kubernetes doanh nghiệp và hỗ trợ:
-


Kubernetes 1.6, bản phát hành ổn định.
Google và IBM thông báo Istio, một công nghệ mở cung cấp cung cấp phương
thức kết nối, quản lý và bảo mật mạng của nhiều microservice.
Kubernetes 1.7, hệ điều phối container tiêu chuẩn thêm vào storage, mã hóa secret
và khả năng mở rộng.
Github chạy trên Kubernetes.
Oracle tham gia CNCF.
Kubernetes 1.8, mốc đánh dấu của role-based access control, cơ chế cho việc điều
khiển truy cập Kubernetes API.
Kubernetes 1.9, tính năng mới,tính khả dụng chung của apps/v1 Workload API,
windows support, cải thiện storage,...
Giới thiệu Kubeflow, Machine learning cho Kubernetes

Năm 2018:
-

Kubernetes 1.10 beta
DigitalOcean cung cấp Kubernetes
Kubernetes 1.10 được thông báo
Kubernetes 1.11 được thông báo

Chúng ta đang mong chờ xem Kubernetes đang hướng đến đâu. Ngày nay, ngày càng có
nhiều sự phấn khích về cơng nghệ ‘serverless’ và Kubernetes đang đi theo hướng ngược
lại. Tuy nhiên, Kubernetes đã có chỗ đứng trong thế giới "khơng có máy chủ" của chúng
ta.

2.3. Các khái niệm
Khi triển khai Kubernetes, ta sẽ có được một cluster.
Kubernetes cluster được chia làm 2 phần:

-

Control plane: cung cấp các dịch vụ cốt lõi của Kubernetes và hệ điều phối công
workload của ứng dụng
Nodes: chạy workload của ứng dụng

8


2.3.1. Control plane
Control plane được tạo tự động khi khởi tạo Cluster. Control plane có thể chạy trên bất cứ
máy nào trong Cluster.
Control plane gồm các thành phần:
-

kube-apiserver: API server là thành phần phơi bày các Kubernetes API
etcd: duy trì trạng thái của Cluster, ổn định và ln có sẵn sử dụng như một kho
lưu trữ các giá trị khóa trong Kubernetes
kube-scheduler: khi tạo hay scale ứng dụng, bộ lập lịch quyết định khi nào Node
có thể chạy workload và bắt đầu chúng
kube-controller-manager: trình quản lý điều khiển chạy các tiến trình điều khiển

2.3.2. Nodes
Để chạy ứng dụng ta cần Node. Một Node có thể là máy ảo hoặc máy tính vật lý, tùy
thuộc vào Cluster. Mỗi Node được quản lý bởi Control plane và chứa các Service cần
thiết để chạy các Pod
Node gồm các thành phần:
-

kubelet: cơ quan chạy trong mỗi Node, đảm bảo container đang chạy trong Pod

kube-proxy: là một mạng proxy chạy trong mỗi Node trong Cluster
Container runtime: phần mềm chịu trách nhiệm chạy container

2.3.3. Pods
Pods là thành phần nhỏ nhất của một đơn vị triển khai mà ta có thể tạo và quản lý trong
Kubernetes.
Pod trong hầu hết các trường hợp là ánh xạ 1:1 với một container. Một Pod cũng có thể
bao gồm nhiều container. Đa container Pod được lập lịch cùng nhau trên một Node và
cho phép container chia sẻ tài nguyên liên quan.
Pod là một tài nguyên logic, nhưng workload của ứng dụng chạy trên các container. Pod
thường là tài nguyên phù du, dùng một lần. Các Pod được lên lịch riêng bỏ lỡ một số tính
năng Kubernetes. Thay vào đó, các Pod được triển khai và quản lý bởi bộ điều khiển
Kubernetes, như Deployment controller.

9


2.3.4. Deployments
Một Deployment cung cấp các bản cập nhật khai báo cho các Pod và các ReplicaSet.
Ta mô tả trạng thái mong muốn trong Deployment và Deployment controller thay đổi
trạng thái thực tế thành trạng thái mong muốn với tốc độ được kiểm sốt. Ta có thể xác
định các Deployment để tạo các ReplicaSet mới hoặc xóa các Deployment hiện có và sử
dụng tất cả các tài nguyên của chúng với các Deployment mới.
Sau đây là các trường hợp sử dụng điển hình cho Deployment:
-

-

Tạo Deployment để triển khai ReplicaSet. ReplicaSet tạo các Pod đằng sau. Kiểm
tra trạng thái triển khai để xem liệu nó có thành cơng hay khơng.

Khai báo trạng thái mới của Pods bằng cách cập nhật PodTemplateSpec của
Deployment. Một ReplicaSet mới được tạo và Deployment quản lý việc di chuyển
các Pod từ ReplicaSet cũ sang ReplicaSet mới với tốc độ được kiểm soát. Mỗi
ReplicaSet mới cập nhật bản sửa đổi của Deployment.
Quay lại bản sửa đổi Deployment trước đó nếu trạng thái hiện tại của Deployment
khơng ổn định. Mỗi lần khôi phục cập nhật bản sửa đổi của Deployment.
Mở rộng quy mô Deployment để tạo điều kiện tải nhiều hơn.
Tạm dừng Deployment để áp dụng nhiều bản sửa lỗi cho PodTemplateSpec của nó
và sau đó tiếp tục triển khai để bắt đầu một đợt phát hành mới.
Sử dụng trạng thái của Deployment như một chỉ báo cho thấy quá trình triển khai
đã bị mắc kẹt.
Dọn dẹp các ReplicaSet cũ hơn mà bạn không cần nữa

2.3.5. ReplicaSet
Mục đích của ReplicaSet là duy trì một tập hợp các Pod bản sao ổn định đang chạy tại bất
kỳ thời điểm nào. Do đó, nó thường được sử dụng để đảm bảo sự sẵn có của một số
lượng Pod giống hệt nhau được chỉ định.
Một ReplicaSet đảm bảo rằng một số lượng bản sao nhóm được chỉ định đang chạy tại
bất kỳ thời điểm nào. Tuy nhiên, Deployment là một khái niệm cấp cao hơn quản lý các
ReplicaSet và cung cấp các bản cập nhật khai báo cho Pods cùng với rất nhiều tính năng
hữu ích khác. Do đó, nên sử dụng Deployment thay vì trực tiếp sử dụng ReplicaSet, trừ
khi ta cần tùy chỉnh điều phối cập nhật hoặc hồn tồn khơng cập cập nhật.

10


Điều này có nghĩa là ta có thể khơng bao giờ cần phải thao tác các đối tượng ReplicaSet.
Thay vào đó, sử dụng một Deployment và xác định ứng dụng trong phần spec

2.3.6. StatefulSets

StatefulSet là đối tượng API workload được sử dụng để quản lý các ứng dụng trạng thái.
Quản lý việc triển khai và mở rộng quy mô của một nhóm Pod và cung cấp đảm bảo về
thứ tự và tính duy nhất của các Pod này.
Giống như một Deployment, StatefulSet quản lý các Pod dựa trên một thông số container
giống hệt nhau. Không giống như một Deployment, một StatefulSet duy trì một danh tính
cố định cho mỗi Pod của chúng. Các Pod này được tạo từ cùng một thơng số, nhưng
khơng thể hốn đổi cho nhau: mỗi pod có một số nhận dạng liên tục mà nó duy trì trong
bất kỳ lần lên lịch lại nào.
StatefulSet hữu ích cho các ứng dụng yêu cầu một hoặc nhiều điều sau đây.
-

Ổn định, định danh mạng riêng biệt.
Lưu trữ ổn định, bền bỉ.
Có thứ tự, triển khai duyên dáng và mở rộng.
Cập nhật luân phiên theo thứ tự, tự động.

2.3.7. DaemonSets
Một DaemonSet đảm bảo rằng tất cả (hoặc một số) Node chạy một bản sao của Pod. Khi
các Node được thêm vào Cluster, các Pod sẽ được thêm vào chúng. Khi các Node bị xóa
khỏi Cluster, các Pod đó sẽ được thu thập. Xóa DaemonSet sẽ xóa các Pod mà nó đã tạo.
Một số cách sử dụng điển hình của DaemonSet là:
-

Chạy một daemon lưu trữ Cluster trên mọi Node
Chạy một daemon thu thập log trên mọi Node
Chạy một daemon giám sát Node trên mọi Node

Trong trường hợp đơn giản, một DaemonSet, bao gồm tất cả các Node, sẽ được sử dụng
cho từng loại daemon. Một thiết lập phức tạp hơn có thể sử dụng nhiều DaemonSet cho
một loại daemon, nhưng với các cờ khác nhau và / hoặc các yêu cầu bộ nhớ và cpu khác

nhau cho các loại phần cứng khác nhau.

11


2.3.8. Jobs
Một Job tạo một hoặc nhiều Pod và sẽ tiếp tục thử thực thi lại các Pod cho đến khi một số
lượng cụ thể trong số đó kết thúc thành cơng. Khi các Node hồn thành thành cơng, Job
sẽ theo dõi các Pod hồn thành thành cơng. Khi đạt đến một số lần hồn thành thành cơng
được chỉ định, nhiệm vụ (tức là Job) đã hồn thành. Xóa Job sẽ xóa các Pod mà nó đã
tạo. Tạm dừng một Job sẽ xóa các Pod đang hoạt động của nó cho đến khi Job được tiếp
tục trở lại.
Một trường hợp đơn giản là tạo một đối tượng Job để chạy một Pod đến khi hoàn thành
một cách đáng tin cậy. Đối tượng Job sẽ bắt đầu một Pod mới nếu Pod đầu tiên bị lỗi
hoặc bị xóa (ví dụ do lỗi phần cứng của Node hoặc do Node khởi động lại).
Ta cũng có thể sử dụng một Job để chạy nhiều Pod song song.

2.3.9. CronJobs
Một CronJob tạo Công việc theo lịch trình lặp lại.
Một đối tượng CronJob giống như một dịng của tệp crontab (bảng cron). Nó chạy một
cơng việc định kỳ theo một lịch trình nhất định, được viết ở định dạng Cron.
Tất cả lịch biểu của CronJob: thời gian dựa trên múi giờ của kube-controller-manager.
CronJobs rất hữu ích để tạo các tác vụ định kỳ và lặp lại, như chạy sao lưu hoặc gửi
email. CronJobs cũng có thể lên lịch cho các nhiệm vụ riêng lẻ trong một thời gian cụ
thể, chẳng hạn như lên lịch cho một Job khi Cluster của bạn có khả năng khơng hoạt động

2.3.10. Namespaces
Các tài nguyên Kubernetes, chẳng hạn như Pod và Deployment, được nhóm một cách
hợp lý thành một Namespace để phân chia một Cluster và hạn chế việc tạo, xem hoặc
quản lý quyền truy cập vào tài nguyên.

Các Namespace mặc có sẵn khi tạo một Cluster:
-

default
kube-system
kube-public

12


2.3.11. Services
Một cách trừu tượng để hiển thị một ứng dụng đang chạy trên một tập hợp các Pod như
một dịch vụ mạng.
Với Kubernetes, ta không cần phải sửa đổi ứng dụng của mình để sử dụng một cơ chế
khám phá dịch vụ không quen thuộc. Kubernetes cung cấp cho các Pods địa chỉ IP của
riêng nó và một tên DNS duy nhất cho một nhóm các Pod và có thể cân bằng tải trên các
nhóm đó.
Kubernetes cung cấp ServiceType để ta định nghĩa loại Service mình muốn, các kiểu
Service là:
-

ClusterIP: phơi bày service trên một IP nội bộ Cluster, kiểu mặc định
NodePort: phơi bày service trên mỗi Node tại một port tĩnh, từ bên ngồi Cluster
có thể truy cập
LoadBalancer: phơi bày Service ra bên ngoài bằng cách sử dụng bộ cân bằng tải
của nhà cung cấp dịch vụ đám mây

2.3.12. Ingress
Một đối tượng API quản lý quyền truy cập bên ngoài vào các Service trong một Cluster,
thường là HTTP.

Ingress có thể cung cấp tính năng cân bằng tải, chấm dứt SSL và name-based virtual
hosting.
Ingress hiển thị các tuyến HTTP và HTTPS từ bên ngoài cluster đến các Service trong
Cluster. Định tuyến lưu lượng được kiểm soát bởi các quy tắc được xác định trên tài
nguyên Ingress.
Ingress có thể được cấu hình để cung cấp cho Service các URL có thể truy cập bên
ngoài, lưu lượng cân bằng tải, chấm dứt SSL / TLS và cung cấp dịch vụ lưu trữ ảo dựa
trên tên. Bộ điều khiển Ingress chịu trách nhiệm thực hiện Ingress, thường là với bộ cân
bằng tải, mặc dù nó cũng có thể định cấu hình bộ định tuyến biên của ta hoặc các giao
diện người dùng bổ sung để giúp xử lý lưu lượng.

2.3.13. ConfigMaps
ConfigMap là một đối tượng API cho phép ta lưu trữ cấu hình cho các đối tượng khác sử
dụng. Khơng giống như hầu hết các đối tượng Kubernetes có thơng số kỹ thuật,
13


ConfigMap có các trường data và binaryData. Các trường này chấp nhận các cặp
khóa-giá trị làm giá trị của chúng. Cả trường data và binaryData đều là tùy chọn. Trường
data được thiết kế để chứa các chuỗi byte UTF-8 trong khi trường binaryData được thiết
kế để chứa dữ liệu nhị phân dưới dạng chuỗi được mã hóa base64.

2.3.14. Secrets
Kubernetes secrets cho phép ta lưu trữ và quản lý thông tin nhạy cảm, chẳng hạn như mật
khẩu, token OAuth và khóa ssh. Lưu trữ thơng tin bí mật trong secret an toàn và linh hoạt
hơn so với việc đưa nguyên văn vào định nghĩa pod hoặc trong container image.
Kubernetes cung cấp một số kiểu tích hợp sẵn cho một số trường hợp sử dụng phổ biến.
Các loại này khác nhau về các xác thực được thực hiện và các ràng buộc mà Kubernetes
áp đặt lên chúng:
-


Opaque
kubernetes.io/service-account-token
kubernetes.io/dockercfg
kubernetes.io/dockerconfigjson
kubernetes.io/basic-auth
kubernetes.io/ssh-auth
kubernetes.io/tls
bootstrap.kubernetes.io/token

2.3.15. Volumes
Kubernetes thường coi các Pod riêng lẻ là tài nguyên phù du, dùng một lần. Các ứng
dụng có sẵn các cách tiếp cận khác nhau để sử dụng và duy trì dữ liệu. Volume đại diện
cho một cách để lưu trữ, truy xuất và duy trì dữ liệu trên các nhóm và thơng qua vịng đời
ứng dụng.

2.3.16. Persistent Volumes
Các Volume được xác định và tạo như một phần của vòng đời Pod, chỉ tồn tại cho đến khi
bạn xóa Pod. Các Pod thường mong muốn kho lưu trữ của nó vẫn cịn nếu một Pod được
lên lịch lại trên một máy chủ khác trong sự kiện bảo trì, đặc biệt là trong StatefulSets.
Persistent Volume (PV) là tài nguyên lưu trữ được tạo và quản lý bởi Kubernetes API có
thể tồn tại ngồi vịng đời của một Pod riêng lẻ.

14


2.3.17. StorageClasses
StorageClass cung cấp một cách để quản trị viên mô tả các "class" lưu trữ mà họ cung
cấp. Các lớp khác nhau có thể ánh xạ đến các mức chất lượng dịch vụ, hoặc các chính
sách sao lưu, hoặc các chính sách tùy ý do quản trị viên Cluster xác định. Bản thân

Kubernetes không được biết đến về những gì các lớp đại diện.
Quản trị viên Kubernetes có thể xác định StorageClass và gán PV cho chúng. Mỗi
StorageClass đại diện cho một loại lưu trữ. Điều này cho phép một Kubernetes Cluster
cung cấp các loại lưu trữ khác nhau tùy thuộc vào yêu cầu thay đổi của khối lượng cơng
việc của nó.
2.3.18. Persistent Volumes Claims

Persistent Volume Claim (PVC) là một yêu cầu lưu trữ của người dùng. Nó tương tự như
Pod. Các Pod tiêu thụ tài nguyên Node và PVC tiêu thụ tài nguyên PV. Các Pod có thể
yêu cầu các mức tài nguyên cụ thể (CPU và Bộ nhớ). Các xác nhận quyền sở hữu có thể
yêu cầu kích thước và chế độ truy cập cụ thể (ReadWriteOnce, ReadOnlyMany hoặc
ReadWriteMany).
Mặc dù Persistent Volume Claim cho phép người dùng sử dụng tài nguyên lưu trữ trừu
tượng, nhưng thông thường người dùng cần Persistent Volume với các thuộc tính khác
nhau, chẳng hạn như hiệu suất, cho các vấn đề khác nhau.

2.4. Lý do sử dụng Kubernetes
Container là một cách tốt để đóng gói và chạy các ứng dụng. Trong mơi trường sản xuất,
ta cần quản lý các container chạy các ứng dụng và đảm bảo rằng khơng có downtime. Ví
dụ: nếu một container bị hỏng, một container khác cần phải khởi động. Sẽ dễ dàng hơn
nếu việc này được xử lý bởi một hệ thống
Kubernetes cung cấp một framework để chạy các hệ thống phân tán một cách linh hoạt.
Nó đảm nhiệm việc thay đổi quy mô và chuyển đổi dự phòng cho ứng dụng, cung cấp các
mẫu triển khai và hơn thế nữa.
Kubernetes cung cấp:
● Khám phá dịch vụ và cân bằng tải: Kubernetes có thể phơi bày một container
bằng tên DNS hoặc sử dụng địa chỉ IP của riêng họ. Nếu lưu lượng truy cập vào

15












một container cao, Kubernetes có thể cân bằng tải và phân phối lưu lượng mạng để
việc triển khai ổn định.
Điều phối lưu trữ Kubernetes cho phép bạn tự động gắn kết một hệ thống lưu trữ
mà bạn chọn, chẳng hạn như lưu trữ cục bộ, nhà cung cấp cloud, v.v.
Tự động triển khai và rollbacks Bạn có thể mơ tả trạng thái mong muốn cho các
bộ chứa được triển khai của mình bằng Kubernetes và nó có thể thay đổi trạng thái
thực tế thành trạng thái mong muốn ở tốc độ được kiểm sốt. Ví dụ: bạn có thể tự
động hóa Kubernetes để tạo bộ chứa mới để triển khai, xóa các bộ chứa hiện có và
áp dụng tất cả tài nguyên của chúng vào bộ chứa mới.
Đóng gói thùng rác tự động Bạn cung cấp cho Kubernetes một cụm các nút mà
nó có thể sử dụng để chạy các tác vụ trong bộ chứa. Bạn cho Kubernetes biết mỗi
container cần bao nhiêu CPU và bộ nhớ (RAM). Kubernetes có thể lắp các thùng
chứa vào các nút của bạn để sử dụng tốt nhất tài nguyên của bạn.
Tự chữa lành Kubernetes khởi động lại các container bị lỗi, thay thế container,
giết chết các container không phản hồi với user-defined health check của bạn và
không quảng cáo chúng cho client cho đến khi chúng sẵn sàng.
Quản lý bí mật và cấu hình Kubernetes cho phép bạn lưu trữ và quản lý thông tin
nhạy cảm, chẳng hạn như mật khẩu, mã thông báo OAuth và khóa SSH. Bạn có
thể triển khai và cập nhật các bí mật và cấu hình ứng dụng mà khơng cần xây dựng
lại hình ảnh vùng chứa của mình và khơng để lộ bí mật trong cấu hình ngăn xếp

của bạn.

Vì Kubernetes hoạt động ở cấp container thay vì ở cấp độ phần cứng, nó cung cấp một số
tính năng áp dụng chung phổ biến cho các dịch vụ paaS, chẳng hạn như triển khai, thay
đổi quy mô, cân bằng tải và cho phép người dùng tích hợp các giải pháp ghi log, giám sát
và cảnh báo. Tuy nhiên, Kubernetes không cứng nhắc và các giải pháp này là tùy chọn.
Kubernetes cung cấp các khối xây dựng để xây dựng nền tảng nhà phát triển, nhưng vẫn
giữ được sự lựa chọn và linh hoạt của người dùng ở những nơi quan trọng.

2.5. Các công cụ làm việc với Kubernetes
Các công cụ được dùng cho việc quản lý, theo dõi, triển khai, kiểm thử và bảo mật
kubernetes. Những công cụ cung cấp cho ta khả năng tận dụng được phần lớn tiềm năng
của Kubernetes và cái thiện môi trường làm việc. Có rất nhiều cơng cụ cho nhiều cơng
việc cụ thể, sau đây là những cơng cụ nhóm đã tìm hiểu và sử dụng:

16


2.5.1. Kubectl
Kubectl là công cụ command line sử dụng để tương tác với Kubernetes cluster. Nó cung
cấp giao diện command line để quản lí Kubernetes cluster như kiểm tra trạng thái node,
triển khai, xóa pod, deployment, service, namespace,…
Chúng ta có kiểm soát nhiều nhiều Kubernetes cluster chỉ với kubectl dùng tại một máy
tính duy nhất. Chỉ cần copy tệp cấu hình từ Kubernetes server master về máy tính cá
nhân.

2.5.2. Kubeadm
Kubeadm là công cụ dễ dàng cung cấp Kubernetes cluster đa node. Nó là cơng cụ
command line để khởi tạo Kubernetes cluster. Nó giúp ta khởi động cụm Kubernetes một
cách dễ dàng. Nó thực hiện kiểm tra trước, sau đó tạo tất cả các chứng chỉ và tệp cấu hình

được yêu cầu và đặt các tệp này vào vị trí thích hợp để ta không phải làm những việc này
theo cách thủ cơng. Tuy nhiên, nó khơng bao gồm các addons bổ sung và thiết lập mạng,
vì vậy chúng tơi cần phải triển khai thủ công các plugin mạng theo nhu cầu.

2.5.3. Minikube
Minikube cũng là một công cụ để khởi động Kubernetes cluster cục bộ, tuy nhiên, nó chỉ
cho phép ta chạy một Kubernetes cluster đơn node cục bộ trên máy tính cá nhân, hữu ích
cho mục đích thử nghiệm và phát triển. Chúng ta có thể cài đặt Minikube bằng cách sử
dụng package management hoặc thông qua việc tải xuống trực tiếp. Chúng ta có thể chạy
Minikube trên Windows, Linux và OSX. Chúng ta có thể khởi tạo một Kubernetes cluster
đơn node trong vài phút và bắt đầu sử dụng nó ngay. Đây là cách đơn giản nhất để triển
khai một cụm Kubernetes với tài nguyên tối thiểu. Cài đặt đơn giản, kind có thể tạo
cluster trong vài phút và có thể sử dụng ngay. Nếu ta cần một Kubernetes cluster đa node,
kind là một sự lựa chọn để thay thế Minikube.

2.5.4. Kind
Minikube cũng là một công cụ để khởi động Kubernetes cluster cục bộ sử dụng Docker
container ‘node’. Kind được thiết kế phục vụ chính cho việc kiểm thử Kubernetes, Kind
nhưng cũng có thể sử dụng để phát triển cục bộ. Ta có có thể cài đặt kind thơng qua
package management hoặc tải trực tiếp. Chúng ta có thể chạy kind trên Linux, Windows
và OSX.
17


2.5.5. Dashboard
Dashboard cung cấp giao diện người dùng dựa trên web để quản lý Kubernetes cluster.
Chúng ta có thể triển khai ứng dụng được đóng gói container, khắc phục sự cố cluster và
quản lý cả cluster cũng như tài nguyên của nó. Chúng ta có thể giám sát việc sử dụng tài
nguyên của các node và pod bằng cách sử dụng bảng điều khiển. Nó cũng có thể theo dõi
tình trạng của workload. Nó cung cấp một cái nhìn trực quan về việc sử dụng tài nguyên

giúp dễ dàng xác định bất kỳ vấn đề tài nguyên nào. Dashboard không được triển khai
theo mặc định, chúng ta cần triển khai nó dưới dạng một pod riêng biệt trong Kubernetes
cluster.

2.5.6. Helm
Helm là một cơng cụ package management giúp quản lý gói tài ngun Kubernetes được
cấu hình sẵn. Nó cịn được gọi là Kubernetes charts. Nó tương tự như các cơng cụ
package management khác như YUM, APT và Homebrew nhưng dành cho Kubernetes.
Helm được sử dụng để tìm và sử dụng phần mềm phổ biến được đóng gói và cho phép
chúng ta chia sẻ các ứng dụng của riêng mình dưới dạng Kubernetes charts. Nó cũng
được sử dụng để tạo các bản build có thể tái tạo và các tệp Kubernetes manifest. Nó là
một kiểu khn mẫu.

18


CHƯƠNG 3. XÂY DỰNG ỨNG DỤNG MINH HỌA
3.1. Ứng dụng
3.1.1. Mô tả ứng dụng
Về phần ứng dụng, chúng em cần xây dựng một ứng dụng yêu cầu khả năng mở rộng,
yêu cầu khối lượng tiến trình lớn, gồm nhiều các microservices thì ta mới thấy được sự
cần thiết của Kubernetes. Theo xu hướng giải trí hiện nay, những như Tik Tok, Youtube
là những ứng dụng có thể làm cho người dùng dành nhiều thời gian trực tuyến. Một ứng
dụng như thế sẽ là ví dụ tốt để minh họa cho Kubernetes. Chúng em chọn xây dựng một
ứng dụng chia sẻ video
Ứng dụng chia sẻ video là ứng dụng cho phép người dùng chia sẻ video của mình. Qua
ứng dụng này, người dùng có thể chia sẻ video của mình, xem video của người khác,
đánh giá, tưởng tác, lưu trữ chúng lại để xem sau,..

3.1.2 Phân tích

3.1.2.1. Sơ đồ Use Case
Actor Chính

Use Case

Guest

Xem video
Tìm kiếm
Đăng nhập
Đăng ký

User

Bình luận
Đăng ký kênh
Thích
Lịch sử
Đăng tải video

19


20


Tên Use Case

Xem video


Mã Use Case

UC-1

Mô tả

Use Case cho phép Actor xem video

Actor

Guest

Dịng sự kiện chính

-

Actor nhấn vào video mình muốn xem
Màn hình video xuất hiện
Actor có thể play, pause,,.. Video

Dịng sự kiện khác

-

Nếu Actor đã đăng nhập, Actor có thể thích video
Nếu Actor đã đăng nhập, Actor có thể bình luận video
Nếu Actor đã đăng nhập, Actor có thể đăng ký kênh

Điều kiện trước


Video Actor nhấn vào có tồn tại

Điều kiện sau
Ưu tiên

Cao

Tên Use Case

Tìm kiếm

Mã Use Case

UC-2

Mơ tả

Use Case cho phép Actor tìm kiếm video theo từ khóa

Actor

Guest

Dịng sự kiện chính

-

Actor nhấn vào khung tìm kiếm
Actor gõ từ khóa
Màn hình trả về kết quả cho Actor


Dịng sự kiện khác

-

Khơng tìm thấy kết quả với từ khóa Actor nhập, hiển thị
thị ‘khơng tìm thấy’

Điều kiện trước

Actor khơng để trống từ khóa tìm kiếm

Điều kiện sau

Ghi nhận lịch sử tìm kiếm vào database

Ưu tiên

Cao

Tên Use Case

Đăng nhập

21


Mã Use Case

UC-3


Mô tả

Use Case cho phép Actor đăng nhập vào ứng dụng và trở thành
User

Actor

Guest

Dịng sự kiện chính

-

Actor nhấn nút đăng nhập
Actor nhập thông tin đăng nhập gồm email, password
Actor nhấn đăng nhập
Actor đăng nhập thành cơng

Dịng sự kiện khác

-

Actor nhập sai thông tin đăng nhập, thông báo lỗi
Actor chưa có tài khoản, nhấn đăng ký

Điều kiện trước

Actor chưa đăng nhập


Điều kiện sau
Ưu tiên

Cao

Tên Use Case

Đăng ký

Mã Use Case

UC-4

Mô tả

Use Case cho phép Actor đăng ký tài khoản mới

Actor

Guest

Dòng sự kiện chính

Dịng sự kiện khác

-

Actor nhấn nút đăng ký
Actor nhập thông tin đăng ký gồm username, email,
password

Actor nhấn đăng ký
Actor đăng ký thành công

-

Actor nhập sai thông tin đăng ký, thơng báo lỗi
Actor đã có tài khoản, nhấn đăng nhập

Điều kiện trước

Actor chưa đăng nhập

Điều kiện sau

Ghi nhận tài khoản mới vào database

Ưu tiên

Cao

Tên Use Case

Bình luận

22


Mã Use Case

UC-5


Mơ tả

Use Case cho phép Actor bình luận vào video

Actor

User

Dịng sự kiện chính

-

Actor nhấp bình luận
Actor nhập bình luận
Actor gửi bình luận

Dịng sự kiện khác

-

Actor bỏ khơng bình luận nữa
Actor nhập quá giới hạn từ

Điều kiện trước

Actor đã đăng nhập

Điều kiện sau


Ghi nhận bình luận vào database

Ưu tiên

Cao

Tên Use Case

Đăng ký kênh

Mã Use Case

UC-6

Mô tả

Use Case cho phép Actor đăng ký kênh

Actor

User

Dịng sự kiện chính

-

Actor nhấn nút đăng ký
Actor đăng ký kênh

Dòng sự kiện khác


-

Actor đã đăng ký kênh nhấn nút đăng ký
Actor hủy đăng ký kênh

Điều kiện trước

Kênh Actor muốn đăng ký không phải của Actor

Điều kiện sau

Ghi nhận đăng ký vào database

Ưu tiên

Cao

Tên Use Case

Thích

Mã Use Case

UC-7

Mơ tả

Use Case cho phép Actor thích video


23


Actor

User

Dịng sự kiện chính

-

Actor nhấn nút thích
Actor thích video

Dịng sự kiện khác

-

Actor đã thích video nhấn nút thích
Actor bỏ thích video

Điều kiện trước

Actor đã đăng nhập

Điều kiện sau

Ghi nhận lượt thích vào database

Ưu tiên


Cao

Tên Use Case

Lịch sử

Mã Use Case

UC-8

Mơ tả

Use Case cho phép Actor xem lịch sử xem video

Actor

User

Dòng sự kiện chính

-

Actor nhấn play video
Actor nhấn nút lịch sử
Màn hình hiển thị lịch sử

Dịng sự kiện khác

-


Actor khơng có lịch sử xem, hiển thị ‘khơng có lịch sử’

Điều kiện trước

Actor đã đăng nhập

Điều kiện sau

Ghi nhận lịch sử xem vào database

Ưu tiên

Cao

Tên Use Case

Đăng tải video

Mã Use Case

UC-9

Mô tả

Use Case cho phép Actor đăng tải video

Actor

User


Dịng sự kiện chính

-

Actor nhấn nút đăng tải
Actor chọn video
Actor nhập thông tin video gồm tiêu đề, mô tả, các thẻ

24


×