TÌM HIỂU về KUBERNETES và VIẾT ỨNG DỤNG DEMO

19 185 0
TÌM HIỂU về KUBERNETES và VIẾT ỨNG DỤNG DEMO

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HCM KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN HỌC PHẦN Tên học phần: ĐIỆN TOÁN ĐÁM MÂY (Cloud Computing) Tên đề tài Nhóm: TÌM HIỂU VỀ KUBERNETES VÀ VIẾT ỨNG DỤNG DEMO DANH SÁCH THÀNH VIÊN NHÓM Trần Tiến Đức - 18133007 Ngày nộp: ……./……./2021 TP.HCM, ngày … Tháng … năm 2021 Mục lục I Kubernetes (K8s) gì? .4 II Các hệ thống cung cấp Kubernetes cài đặt sẵn: .4 III Các cách để cài đặt K8s IV Các đối thủ cạnh tranh V Kiến trúc Master server (Máy chủ) a) Etcd b) API Server c) Controller Manager Service d) Scheduler Service e) Dashboard (Không bắt buộc) Node Server (Máy công nhân) a) Pod b) Service (svc) c) Persistent Volumes (PV) .9 d) Namespaces (Không gian tên) e) Ingress rules 10 f) Network policies 11 g) Network 11 h) ConfigMaps and Secrets 11 i) Controllers 11 j) Helm - Trình quản lý gói K8s 12 k) Dashboard 12 l) Monitoring 12 VI Mơ hình hệ thống sử dụng: 13 VII Tài liệu hướng dẫn sử dụng: 13 VIII Vấn đề tồn tại: .17 IX Hướng phát triển: 18 NGUỒN THAM KHẢO 19 I Kubernetes (K8s) gì? Kubernetes hệ thống điều phối container mã nguồn mở tiếng sử dụng để đóng gói service từ triển khai hệ thống microservices (Hệ thống mà dịch vụ đóng gói cách ly với cấp độ hệ điều hành liên kết với hệ thống mạng máy tính chung) Kubernetes hệ sinh thái lớn phát triển nhanh chóng Các dịch vụ, hỗ trợ cơng cụ có sẵn rộng rãi Tên gọi Kubernetes có nguồn gốc từ tiếng Hy Lạp, có ý nghĩa người lái tàu hoa tiêu Google mở mã nguồn Kubernetes từ năm 2014 Kubernetes xây dựng dựa thập kỷ rưỡi kinh nghiệm mà Google có với việc vận hành khối lượng lớn workload thực tế, kết hợp với ý tưởng thực tiễn tốt từ cộng đồng II Các hệ thống cung cấp Kubernetes cài đặt sẵn:  Google container engine (GKE): https://cloud.google.com/containerengine/ (free 300$ cho tài khoản mới)  CoreOS techtonic: https://coreos.com/tectonic/  RedHat Openshift: https://www.openshift.com/  Amazon EKS (Elastic Kubernetes Service) III Các cách để cài đặt K8s K8s hệ thống, gồm nhiều thành phần tương tác với Tuy không tới nỗi phức tạp cài hệ thống cloud IaaS (Infranstructure as A Service Kiến trúc hạ tầng dịch vụ) OpenStack Vậy người ta có hàng chục cách khác để cài K8s, đáng kể có: Minikube (Tích hợp sẵn Docker Desktop Windows MacOS chủ yếu triển khai cụm node) Kubeadm giai đoạn phát triển, để cài hệ thống máy vật lý / máy ảo dùng Ubuntu 16.04 hay CentOS Kargo phần mềm dựa Ansible (Phần mềm tự động hoá cấu hình) để cài nhiều nơi bao gồm máy vật lý/máy ảo/AWS/GCE Dùng SaltStack để cài https://github.com/kubernetes/kubernetes/tree/master/cluster/saltbase/ Cài tay CoreOS Container Linux Kops để cài AWS (Amazon cloud) IV Các đối thủ cạnh tranh  Docker Swarm https://docs.docker.com/engine/swarm/  Apache Mesos https://mesos.apache.org/ V Kiến trúc K8s cluster bao gồm nhiều node, node cần chạy "kubelet", chương trình để chạy k8s Cần máy để làm "chủ" cluster, cài API server, scheduler Các máy lại chạy kubelet để sinh container Master server (Máy chủ) a) Etcd Là hệ thống lưu trữ liệu cụm K8s theo dạng key - value (Khoá - giá trị) b) API Server Đúng theo tên gọi, server cung cấp Kubernetes API Nó có nhiệm vụ đặt Pod vào Node, đồng hố thơng tin Pod REST API tiếp nhận cài đặt pod/service/replicationController c) Controller Manager Service Chúng background threads chạy task bên cluster Controller bao gồm nhiều vai trò khác nhau, tất compiled thành single binary Những vai trò controllers bao gồm: − Node controller chịu trách nhiệm cho trạng thái worker (worker state) − Replication controller chịu trách nhiệm cho việc đảm bảo trì (maintaining) số lượng Pods − End-point Controller kết nối services Pods với − Service account token controllers quản lý access management d) Scheduler Service Scheduler Service có trách nhiệm giám sát việc sử dụng tài nguyên máy chủ để đảm bảo hệ thống không bị tải Scheduler Service phải biết tổng số tài nguyên có sẵn máy chủ, tài nguyên phân bổ cho khối lượng cơng việc có gán máy chủ e) Dashboard (Không bắt buộc) Giao diện web Kubernetes Dashboard giúp đơn giản hóa tương tác người dùng K8s thông qua API server Node Server (Máy công nhân) a) Pod Pod nhóm (gồm nhiều) container thực mục đích đó, chạy phần mềm ứng dụng Nhóm chia sẻ khơng gian lưu trữ, địa IP với Pod tạo xóa tùy thuộc vào yêu cầu dự án b) Service (svc) Vì Pod có tuổi thọ ngắn, khơng đảm bảo địa IP cố định Điều khiến cho việc giao tiếp microservice trở nên khó khăn Do đó, K8s giới thiệu khái niệm svc, lớp nằm số nhóm Pod Svc cung cấp mạng máy tính đáng tin cậy cách cung cấp địa IP tĩnh, DNS (Máy chủ phân giải tên miền) cổng mạng cố định c) Persistent Volumes (PV) PersistentVolume (PV) phần không gian lưu trữ liệu cluster, PersistentVolume giống với Volume bình thường nhiên tồn độc lập với POD (pod bị xóa PV tồn tại), có nhiều loại PersistentVolume triển khai NFS, Clusterfs … PersistentVolumeClaim (pvc) yêu cầu sử dụng không gian lưu trữ (sử dụng PV) Hình dung PV giống Node, PVC giống POD POD chạy sử dụng tài nguyên NODE, PVC hoạt động sử dụng tài nguyên PV d) Namespaces (Không gian tên) Đây cơng cụ dùng để nhóm tách nhóm đối tượng Namespaces sử dụng để kiểm sốt truy cập, kiểm soát truy cập network, quản lý resource quoting Nếu ta đặt service "web" lúc chạy production, cịn lúc phát triển ta chạy đâu? Ta phải thay đỏi tên service Namespace giải vấn đề Mặc định dịch vụ sử đụng namespace "default", ta tạo namespace tuỳ ý K8s sử dụng namespace riêng : kube-system e) Ingress rules Ingress thành phần dùng để điều hướng yêu cầu traffic giao thức HTTP HTTPS từ bên (interneet) vào dịch vụ bên Cluster Ingress để phục vụ cổng, yêu cầu HTTP, HTTPS loại cổng khác, giao thức khác để truy cập từ bên ngồi dùng Service với kiểu NodePort 10 LoadBalancer f) Network policies Định nghĩa quy tắc truy cập mạng Pod bên Cluster g) Network Có nhiều loại phần mềm để triển khai container network, Flannel, Weaver ta dùng Google Cloud, vấn đề không cần quan tâm h) ConfigMaps and Secrets Một phần mềm khởi động chạy mà không cần cấu hình ConfigMap giải pháp để nhét file config / đặt environment variable (Biến môi trường) hay thiết lập tham số gọi câu lệnh ConfigMap cục cấu hình, mà pod cần, định cần - giúp dễ dàng chia sẻ file cấu hình Ít muốn đặt mật vào file cấu hình, có lập trình viên "tồi" hardcode mật vào code Vậy nên K8s có "secret", để lưu trữ mật khẩu, token, hay cần giữ bí mật i) Controllers Có nhiều controller cho loại dịch vụ khác nhau: 11 Deployment : loại chung nhất, ta muốn "deploy" dịch vụ Ta tạo pod cách tạo deployment (hoặc statefulSets, khái niệm tương đương) StatefulSets dùng ta cần service bật lên theo tứ tự định DaemonSet : thường dành cho dịch vụ cần chạy tất node Ví dụ fluentd để collect log tất node StatefulSet : file "manifest" đặt thư mục định kubelet, pod chạy kubelet chạy Không thể điều khiển chúng kubectl Đây khái niệm dần bị xa lánh thiếu linh động khó kiểm sốt Gõ kubectl get để xem tất khái niệm resource mà k8s sử dụng, cách gọi ngắn gọn cho khái niệm (svc cho service, deploy cho deployment, cm cho configmap ) j) Helm - Trình quản lý gói K8s Trên Ubuntu, ta có APT (Advanced Package Tool - Cơng cụ quản lý gói nâng cao) để cài gói phần mềm, K8s, Helm dùng để cài "chart” (Tương tự trình quản lý gói bên Linux) Với Helm, ta triển khai app service Apache Hadoop, Apache Spark, Redis, Nginx,… k) Dashboard Dashboard cho phép xem tổng quan cụm k8s thiết lập từ trước, cài vào k8s add-on (link project K8s Dashboard: https://github.com/kubernetes/dashboard) thông qua lệnh apply kubectl Dashboard plugin có sẵn Minikube l) Monitoring Monitoring K8s dễ dàng, cần cài phần mềm có khả tích hợp với k8s, hỏi K8s để lấy thơng tin tất pod hệ thống 12 VI Mơ hình hệ thống sử dụng: − Nền tảng: Amazon Linux (Trên Amazon EC2) − Phiên Python: 3.7 − Loại máy EC2: t3.medium − CPU: nhân − RAM: GB Nhóm em sử dụng dịch vụ Amazon EC2 để tạo máy ảo chạy hệ điều hành Amazon Linux cài đặt Docker với Kubectl minikube phiên Nhóm em sử dụng Minikube để tự động hố việc cấu hình cụm Kubernetes EC2 (Do tài khoản giáo dục miễn phí cho sinh viên khơng cho tạo secret key môi trường sandbox) VII Tài liệu hướng dẫn sử dụng: − Cài đặt Flask: pip install Flask − Clone repo chứa web nhóm từ Github: git clone https://github.com/tienduc18/Project_CP_Kubernetes.git − Khởi động trang web cách thực thi câu lệnh: python index.py − Sau đó, trang chủ cổng 5000: 13 − Ở trang chủ này, ta có nút để điều khiển cluster thơng qua Minikube:  Start cluster: Khởi động cluster node Minikube  Stop cluster: Dừng tất hoạt động node cluster  Delete cluster: Xố bỏ tồn node file cấu hình cluster − Khi click vào nút “Start cluster”, trang web load lúc để chuẩn bị cluster node cho việc triển khai ứng dụng cụm chuyển qua trang lựa chọn triển khai ứng dụng sau 14 − Trang cho phép triển khai ứng dụng phổ biến thời điểm Redis Apache Spark thơng qua trình quản lý gói Helm − Khi click vào nút deploy với ứng dụng tương ứng, trang web sau ra:  Đối với Redis:  Đối với Spark: 15  Bảng hình ảnh cho biết trạng thái (status) ứng dụng cài đặt qua Helm phiên namespace mà ứng dụng triển khai − Trong trường hợp client muốn xố ứng dụng cơng việc mà client phải làm click vào nút “delete” tương ứng với ứng dụng 16 VIII Vấn đề cịn tồn tại: − Khơng thể sử dụng command kubeadm init để khởi tạo cluster máy ảo Amazon Linux EC2 không cấp quyền tạo secret key access key − Cổng mạng 8080 EC2 từ chối không cho truy cập qua SSH môi trường sandbox không cấp quyền truy cập EC2 Serial Console − Những phương pháp khác để triển khai cụm K8s sử dụng Rancher container để quản lý cụm K8s thất bại hay dịch vụ Amazon EKS không cấp quyền truy cập cho tài khoản giáo dục miễn phí năm tài khoản nhóm em − Kỹ sử dụng Python Flask để viết web nhiều khuyết điểm việc thiết kế giao diện backend − Do tình hình dịch bệnh nên tụi em tạo cụm K8s máy thật Linux mà phải sử dụng Minikube để tiện việc nghiên cứu K8s 17 IX Hướng phát triển: − Ứng dụng cho ngành Kỹ thuật liệu − Kết hợp với kiến trúc Serverless Amazon − Tập trung vào vấn đề bảo mật cụm − Mở rộng kiến trúc phân tán Kubernetes để phù hợp với AI/ML − Tự động hóa tác vụ cài đặt triển khai phần mềm 18 NGUỒN THAM KHẢO https://viblo.asia/p/phan-1-gioi-thieu-ve-kubernetes-924lJO6m5PM https://viblo.asia/p/phan-2-kien-truc-cua-kubernetes-RQqKLnr6l7z#_helm k8s-package-manager-18 https://kubernetes.io/vi/docs/concepts/overview/what-is-kubernetes/ https://xuanthulab.net/kubernetes/ Link Github repo chứa web viết Python Flask nhóm em: https://github.com/tienduc18/Project_CP_Kubernetes.git 19 ... click vào nút deploy với ứng dụng tương ứng, trang web sau ra:  Đối với Redis:  Đối với Spark: 15  Bảng hình ảnh cho biết trạng thái (status) ứng dụng cài đặt qua Helm phiên namespace mà ứng dụng. .. click vào nút “Start cluster”, trang web load lúc để chuẩn bị cluster node cho việc triển khai ứng dụng cụm chuyển qua trang lựa chọn triển khai ứng dụng sau 14 − Trang cho phép triển khai ứng dụng. .. Trong trường hợp client muốn xố ứng dụng cơng việc mà client phải làm click vào nút “delete” tương ứng với ứng dụng 16 VIII Vấn đề cịn tồn tại: − Khơng thể sử dụng command kubeadm init để khởi

Ngày đăng: 14/09/2021, 18:15

Mục lục

  • I.Kubernetes (K8s) là gì?

  • II.Các hệ thống cung cấp Kubernetes cài đặt sẵn:

  • III.Các cách để cài đặt K8s

  • IV.Các đối thủ cạnh tranh

  • V.Kiến trúc

    • 1.Master server (Máy chủ)

      • a)Etcd

      • c)Controller Manager Service

      • e)Dashboard (Không bắt buộc)

      • 2.Node Server (Máy công nhân)

        • a)Pod

        • c)Persistent Volumes (PV)

        • d)Namespaces (Không gian tên)

        • h)ConfigMaps and Secrets

        • j)Helm - Trình quản lý gói của K8s

        • VI.Mô hình hệ thống được sử dụng:

        • VII.Tài liệu hướng dẫn sử dụng:

        • VIII.Vấn đề còn tồn tại:

Tài liệu cùng người dùng

Tài liệu liên quan