Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 59 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
59
Dung lượng
5,52 MB
Nội dung
ĐẠ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 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 ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… 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 đặc biệt thầy Nguyễn Cơng Hoan hướng dẫn tận tình chúng em thời gian thực đồ án Nhờ có giúp đỡ tận tình thầy chúng em hồn thành đồ án cách tốt Tuy chúng em cố gắng hạn chế sai sót hết mức kiến thức cịn hạn hẹp nên chúng em khó tránh khỏi sai lầm, hạn chế trình thực đồ án Do đó, chúng em mong nhận ý kiến đóng góp từ thầy để chúng em 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 năm 2021 TĨM TẮT Trong báo cáo này, nhóm em trình bày đề tài ‘Tìm hiểu Kubernetes 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 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 tài liệu Kubernetes, khái niệm tổng hợp phần quan trọng Về phần xây dựng ứng dụng, nhóm chọn xây dựng ứng dụng chia sẻ video triển khai, vận hành Kubernetes Kết báo cáo trình bày tổng quan Kubernetes chạy thành công ứng dụng Kubernetes Cuối đánh giá kết đề tài nhóm thực MỤC LỤC NHẬN XÉT LỜI CẢM ƠN TÓM TẮT MỤC LỤC CHƯƠNG GIỚI THIỆU ĐỀ TÀI 1.1 Lý chọn đề tài 1.2 Phạm vi đề tài 1.3 Mục tiêu đề tài 6 6 CHƯƠNG TÌM HIỂU KUBERNETES 2.1 Kubernetes 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ý sử dụng Kubernetes 7 9 10 10 11 11 12 12 12 13 13 13 14 14 14 15 15 15 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 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ế liệu 3.1.3.1 Sơ đồ logic 3.1.3.2 Chi tiết kiểu 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ế hình 3.1.5.1 Danh sách hình 3.1.5.2 Các 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 ĐÁNH GIÁ VÀ KẾT LUẬN 4.1 Kết đạt 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 CHƯƠNG GIỚI THIỆU ĐỀ TÀI 1.1 Lý chọn đề tài Theo xu hướng phát triển phần mềm nay, đội ngũ phát triển quan tâm đến chất lượng sản phẩm, mà phải đưa sản phẩm đến người dùng cách nhanh chóng Nhu cầu cho quy trình phần mềm liên tục cần thiết, vai trò 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ông ty phần mềm Kubernetes công nghệ cốt lõi mà kỹ sư DevOp cần phải biết Nhận thấy nhu cầu cần thiết cơng nghệ này, nhóm chúng em định chọn đề tài ‘Tìm hiểu Kubernetes 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 tập trung vào tìm hiểu Kubernetes, lịch sử, khái niệm, tính năng, cách hoạt động điểm mạnh điểm yếu Kubernetes Từ đó, làm tảng để xây dựng ứng dụng minh họa 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 sau: - Thứ nhất, hiểu khái niệm, nội dung Kubernetes cách thức hoạt động Kubernetes - Thứ hai, hiểu quy trình làm việc đội phát triển, công việc kỹ sư vận hành Kubernetes - Thứ ba, Sử dụng kinh nghiệm, kiến thức nhóm có từ q trình làm đề tài này, làm tảng phát triển cho đề tài sau CHƯƠNG TÌM HIỂU KUBERNETES 2.1 Kubernetes gì? Kubernetes tảng điều phối container mã nguồn mở phục vụ nhằm tự động hóa quy trình triển khai, mở rộng quy mơ quản lý ứng dụng container Nói cách khác, Kubernetes giúp nhóm container thành cụm để quản lí dễ dàng, hiệu Kubernetes thiết kế Google công nghệ đằng sau dịch vụ Google Cloud Nó nhằm mục đích cung cấp "nền tảng để tự động hóa việc triển khai, mở rộng quy mô hoạt động vùng chứa ứng dụng cụm máy chủ" 2.2 Lịch sử Tiền thân Kubernetes Borg System, giới thiệu khoảng 2003-2004 Khởi đầu từ dự án nhỏ, Borg hệ thống quản lý cụm cục bộ, chạy hàng trăm jobs, hàng trăm ứng dụng khắc khắp cụm, 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, mở rộng cho hệ thống cụm máy tính lớn Năm 2014, Google giới thiệu Kubernetes phiên mã nguồn mở Borg Microsoft, Redhat, IBM, Docker tham gia cộng đồng Kubernetes Năm 2015, Kubernetes 1.0 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 hệ sinh thái thúc đẩy cộng đồng ứng dụng chất lượng sử dụng hệ điều phối container phần kiến trúc microservices Cuối 2015, xuất Kubernetes 1.1 với nhiều nâng cấp Năm 2016, năm Kubernetes trở thành sóng: - Helm xuất bản, package manager Kubernetes Kubernetes 1.2 phát hành, cải thiện mở rộng, đơn giản hóa q trình triển khai tự động hóa quản lý cụm Kubernetes 1.3 phát hành, cho phép khám phá dịch vụ chạy nhiều cụm Minikube phát hành thức, cơng cụ giúp chạy Kubernetes cục dễ dàng - Kubernetes 1.4, 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 Kubernetes doanh nghiệp hỗ trợ: - Kubernetes 1.6, phát hành ổn định Google IBM thông báo Istio, công nghệ mở cung cấp cung cấp phương thức kết nối, quản lý bảo mật mạng 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 khả mở rộng Github chạy Kubernetes Oracle tham gia CNCF Kubernetes 1.8, mốc đánh dấu role-based access control, chế cho việc điều khiển truy cập Kubernetes API Kubernetes 1.9, tính mới,tính khả dụng chung 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 thông báo Kubernetes 1.11 thông báo Chúng ta mong chờ xem Kubernetes hướng đến đâu Ngày nay, ngày có nhiều phấn khích cơng nghệ ‘serverless’ Kubernetes theo hướng ngược lại Tuy nhiên, Kubernetes có chỗ đứng giới "khơng có máy chủ" 2.3 Các khái niệm Khi triển khai Kubernetes, ta có cluster Kubernetes cluster chia làm phần: - Control plane: cung cấp dịch vụ cốt lõi Kubernetes hệ điều phối công workload ứng dụng Nodes: chạy workload ứng dụng 2.3.1 Control plane Control plane tạo tự động khởi tạo Cluster Control plane chạy máy Cluster Control plane gồm thành phần: - kube-apiserver: API server thành phần phơi bày Kubernetes API etcd: trì trạng thái Cluster, ổn định ln có sẵn sử dụng kho lưu trữ giá trị khóa Kubernetes kube-scheduler: tạo hay scale ứng dụng, lập lịch định Node chạy workload bắt đầu chúng kube-controller-manager: trình quản lý điều khiển chạy tiến trình điều khiển 2.3.2 Nodes Để chạy ứng dụng ta cần Node Một Node máy ảo máy tính vật lý, tùy thuộc vào Cluster Mỗi Node quản lý Control plane chứa Service cần thiết để chạy Pod Node gồm thành phần: - kubelet: quan chạy Node, đảm bảo container chạy Pod kube-proxy: mạng proxy chạy Node Cluster Container runtime: phần mềm chịu trách nhiệm chạy container 2.3.3 Pods Pods thành phần nhỏ đơn vị triển khai mà ta tạo quản lý Kubernetes Pod hầu hết trường hợp ánh xạ 1:1 với container Một Pod bao gồm nhiều container Đa container Pod lập lịch Node cho phép container chia sẻ tài nguyên liên quan Pod tài nguyên logic, workload ứng dụng chạy container Pod thường tài nguyên phù du, dùng lần Các Pod lên lịch riêng bỏ lỡ số tính Kubernetes Thay vào đó, Pod triển khai quản lý điều khiển Kubernetes, Deployment controller - Màn hình chỉnh sửa 3.2 Kubernetes 3.2.1 Triết khai ứng dụng Chúng em tiến hành triển khai ứng dụng chia sẻ video vào Kubernetes cục máy tính cá nhân với kind kubectl Trước hết, ta tạo image cho service ứng dụng cách dùng lệnh docker build 44 Đã build xong image, ta cấu hình Kubernetes cluster Ta dùng kind với lệnh kind create cluster config kind-config.yaml Với kind-config.yaml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker Ta cấu hình cluster với node: control-plane worker Trước hết back-end, ta dùng lệnh kubectl apply -f Đối với tệp yaml để triển khai service vào cluster tạo 45 Bắt đầu với tạo Namespace kubectl apply -f project1-namespace.yaml Tạo database Secret kubectl apply -f database-secret.yaml Triển khai user service kubectl apply -f userserv-deploy.yaml Triển khai video service kubectl apply -f videoserv-deploy.yaml 46 Triển khai comment service kubectl apply -f commentserv-deploy.yaml Triển khai subscription service kubectl apply -f subscriptionserv-deploy.yaml //image Triển khai playlist service kubectl apply -f playlistserv-deploy.yaml Triển khai like service kubectl apply -f likeserv-deploy.yaml Triển khai history service kubectl apply -f historyserv-deploy.yaml Triển khai notification service kubectl apply -f notificationserv-deploy.yaml 47 Triển khai API gateway kubectl apply -f gateway-deploy.yaml Xong phần back-end, ta thực tương tự với front-end kubectl apply -f secret.yaml kubectl apply -f deployment.yaml Nếu khơng có sai sót, ta có kết sau 48 Để truy cập ứng dụng qua service LoadBalancer ta dùng lệnh sau để lộ service với máy tính kubectl -n project1 port-forward service/gateway-service 8081:8081 kubectl -n project1 port-forward service/webapp-service 8080:8080 Với lệnh trên, API gateway truy cập qua địa chỉ: http://127.0.0.1:8081 Và Web app truy cập qua địa chỉ: http://127.0.0.1:8080 49 3.2.2 Vận hành Kubernetes Trong q trình vận hành Kubernetes, có trường hợp ta cần scale up hay scale down để đảm bảo hệ thống hoạt động trơn tru, khơng có down time Ta dung lệnh kubectl scale Ta scale up deployment API gateway lên pod kubectl -n project1 scale deployment/gateway-deployment replicas pod tạo 50 Và cần scale down để giải phóng tài nguyên, ta dùng lênh Scale down API gateway kubectl -n project1 scale deployment/gateway-deployment replicas pod bị loạt bỏ Trong trình phát triển ứng dụng, phiên liên tục tạo ra, ta cần phải cập nhật lại container image pod Ta dùng lệnh sau để cập nhật container image kubectl set image Ta cập nhật image webapp-deployment thành image webapp:v1 kubectl -n project1- set image deployment/webapp-deployment webapp=webapp:v1 51 Image thay đổi thành webapp:v1 Và có phiên ta cập nhật tiếp kubectl -n project1- set image deployment/webapp-deployment webapp=webapp:v2 Image thay đổi thành webapp:v2 Mới không tốt hơn, phiên có vấn đề, ta buộc phải quay phiên trước đó, ta dùng lệnh sau để kiểm tra lịch sử revision kubectl rollout history Ta thử kiểm tra history webapp-deployment kubectl -n project1 rollout history deployment/webapp-deployment 52 Ta thấy, revision webapp-deployment 3, ta dùng lệnh sau để rollback revision trước kubectl rollout undo Ta quay revision trước webapp-deployment kubectl -n project1 rollout undo deployment/webapp-deployment Image trở webapp:v1 Ngoài việc sử dụng công cụ CLI, Kubernetes cung cấp công cụ UI trực quan Kubernetes Dashboard Kubernetes dashboard cơng cụ hữu ích, giúp quản lý cluster dễ dàng 53 Kubernetes Dashboard cung cấp GUI giúp ta có nhìn tổng thể ứng dụng chạy cluster Ta viết tệp yaml trực tiếp thêm resource vào cluster 54 Check log Thực scale 55 Thậm chí cụ thể hơn, thay đổi trực tiếp lên tệp yaml resource 56 CHƯƠNG ĐÁNH GIÁ VÀ KẾT LUẬN 4.1 Kết đạt Với yêu cầu mà toán đặt ra, với lý thuyết mà nhóm tìm hiểu để áp dụng vào việc thực đề tài Qua đề tài, nhóm đạt kết sau: - Tìm hiểu Kubernetes khái niệm liên quan Các chức ứng dụng hoàn thiện, theo kế hoạch ban đầu Hiểu quy trình xây dựng ứng dụng với Kubernetes Hiểu quy trình vận hành Kubernetes 4.2 Hạn chế Tuy đạt mục tiêu đề đề tài này, nhóm cịn hạn chế: - Do thời gian có hạn, số chức ứng dụng chưa hoạt động mong đợi Kubernetes hệ thống điều phối container mạnh mẽ, nhóm bị giới hạn phần cứng, nên khó mà tận dụng toàn khả Kubernetes Ứng dụng Kubernetes hoạt động cục máy tính cá nhân 4.3 Hướng phát triển Đề tài đạt mục tiêu mong đợi, nhóm em nhận thấy đề tài cịn tiềm phát triển để trở thành ứng dụng chia sẻ video vào hoạt động thực sự: - Xây dựng cải thiện chức cịn thiếu sót Chỉnh sửa UX/UI cho đẹp mắt ,thân thiện người dùng Sử dụng tảng Cloud GCP, AWS, Azure, để triển khai, vận hành ứng dụng Nghiên cứu thêm CI/CD 57 TÀI LIỆU THAM KHẢO Kubernetes Documentation | Kubernetes Learn Kubernetes in Under Hours: A Detailed Guide to Orchestrating Containers (freecodecamp.org) Microservices architecture | Microsoft Docs kind – Quick Start (k8s.io) Welcome! | minikube (k8s.io) Introduction | Vue.js (vuejs.org) Bilgin Ibryam and Roland Huß, (2019), Kubernetes Patterns, O’Reilly Media Kathleen Juell, (2020), From Containers to Kubernetes with Node.js, DigitalOcean 58 ... dựng ứng dụng minh họa sử dụng Kubernetes Về phần Kubernetes, nhóm em nghiên cứu tài liệu Kubernetes, khái niệm tổng hợp phần quan trọng Về phần xây dựng ứng dụng, nhóm chọn xây dựng ứng dụng. .. chia sẻ ứng dụng riêng dạng Kubernetes charts Nó sử dụng để tạo build tái tạo tệp Kubernetes manifest Nó kiểu khuôn mẫu 18 CHƯƠNG XÂY DỰNG ỨNG DỤNG MINH HỌA 3.1 Ứng dụng 3.1.1 Mô tả ứng dụng Về... Youtube ứng dụng làm cho người dùng dành nhiều thời gian trực tuyến Một ứng dụng ví dụ tốt để minh họa cho Kubernetes Chúng em chọn xây dựng ứng dụng chia sẻ video Ứng dụng chia sẻ video ứng dụng