1. Trang chủ
  2. » Công Nghệ Thông Tin

TÌM HIỂU KUBERNETES TRIỂN KHAI MICROSERVICES với DOCKER

50 29 0

Đ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

Nội dung

ĐỒ ÁN MÔN HỌC BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HCM KHOA CÔNG NGHỆ THÔNG TIN  BÁO CÁO ĐỒ ÁN ĐỀ TÀI : TÌM HIỂU KUBERNETES TRIỂN KHAI MICROSERVICES VỚI DOCKER Giảng viên hướng dẫn: Trần Thị Bích Vân Sinh viên thực hiện: Nguyễn Đăng Hiếu - 2033181023 Nguyễn Thành Dương - 2033181013 TP HỒ CHÍ MINH – 2021 ĐỒ ÁN MƠN HỌC LỜI CẢM ƠN Tụi em xin chân thành gửi lời cảm ơn đến trường Đại Học Công Nghiệp Thực Phẩm TP.Hồ Chí Minh, thầy khoa Cơng Nghệ Thông Tin đào tạo, trau dồi, cung cấp cho chúng em kiến thức hữu ích để học tập rèn luyện Xin cảm ơn Cô Trần Thị Bích Vân hướng dẫn chúng em hồn thành đồ án thời gian vừa qua Cô định hướng, hướng dẫn, truyền đạt lại kiến thức bổ ích, cung cấp tài liệu cần thiết để em hoàn thành đồ án Cuối cùng, chúng em chưa có nhiều kinh nghiệm hạn chế mặt kiến thức trải nghiệm thức tế nên chắn khơng tránh khỏi sai sót đề tài Chúng em mong nhận phản hồi, đánh giá đóng góp ý kiến thầy để đề tài chúng em hoàn thiện Chúng em xin chân thành cảm ơn! Trân trọng! ĐỒ ÁN MÔN HỌC MỤC LỤC LỜI CẢM ƠN DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT CHƯƠNG 1: TỔNG QUAN 1.1 GIỚI THIỆU 1.2 MỤC TIÊU VÀ PHẠM VI ĐỀ TÀI CHƯƠNG 2:TÌM HIỂU CHI TIẾT 2.1 TÌM HIỂU VỀ KUBERNETES 2.1.1 Kubernetes k8s 2.1.2 Nên sử dụng Kubernetes : 2.1.3 Kubernetes giải vấn đề : 2.1.4 Những khái niệm Kubernetes Master node Worker node Kubectl Pod Image Deployment Replicas Controller Service 10 Label 10 2.1.5 Các tính Kubernetes 10 2.2 TÌM HIỂU VỀ MICROSERVICES (kiến trúc nhiều dịch vụ nhỏ ): 11 2.2.1 Kiến trúc Microservices 11 Micro-service 12 Tính độc lập 12 Tính chuyên biệt 12 Phòng chống lỗi 13 2.2.2 Các ưu điểm Kiến trúc Microservices 13 2.2.3 Nhược điểm 14 ĐỒ ÁN MÔN HỌC 2.3 TÌM HIỂU VỀ DOCKER 14 2.3.1 Docker gì? 15 2.3.2 Nền tảng Docker 15 2.3.3 Containers 16 2.3.4 Cách thức hoạt động Docker 17 2.3.5 Lý nên sử dụng Docker 17 2.3.6 Các thành phần Docker 18 The Docker daemon 18 The Docker client 18 The Docker image 18 The Docker container 19 Dockerfile 19 CHƯƠNG 3:XÂY DỰNG MƠ HÌNH 19 3.1 GIỚI THIỆU MƠ HÌNH 19 Cài đặt Docker 19 Chuẩn bị Dockerfile 19 Build Docker 19 Thực chạy (run) Docker container 20 Run RabbitMQ 20 Docker Registry 20 3.2 NÊU Ý TƯỞNG 23 Mơ hình triển khai 23 Giải thích sơ lượt demo 24 Viết asp.net , html 24 CHƯƠNG 4: DEMO MƠ HÌNH 27 4.1 DEMO PHẦN MƠ HÌNH ĐÃ XÂY DỰNG 27 4.2 TRÌNH BÀY CHI TIẾT MƠ HÌNH 27 KẾT LUẬN 48 TÀI LIỆU THAM KHẢO 48 ĐỒ ÁN MÔN HỌC DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT Viết tắt K8s Tiếng anh Tiếng Việt tự động hoá việc quản lý, scaling Kubernetes triển khai ứng dụng dạng container API Application Programming Interface ứng dụng hay thành phần tương tác với ứng dụng hay thành phần khác REST REpresentational State Transfer dạng chuyển đổi cấu trúc liệu, kiểu kiến trúc để viết API ĐỒ ÁN MÔN HỌC CHƯƠNG 1: TỔNG QUAN 1.1 GIỚI THIỆU – Hiện nay, nhiều ứng dụng thực container hoá cách sử dụng docker sử dụng môi trường production ngày tăng Trên môi trường production, việc cấu trúc hệ thống chạy container sử dụng docker khó khăn Cho nên việc sử dụng tảng Container orchestration engine k8s phổ biến – Tìm hiểu kubernetes – Có kịch bản, lúc phát triển ứng dụng môi trường mục tiêu cuối release sản phẩm, chạy ứng dụng mơi trường production Nhưng có vấn đề nảy sinh mơi trường phát triển khơng giống với môi trường thử nghiệm khác biệt với mơi trường production, khó đảm bảo code chạy mượt môi trường dev , môi trường testing production ? Vì Docker đời để giúp giải toán – Triển khai microservices với docker tối ưu hóa thứ Nó khơng giống máy ảo phải đầy đủ hệ điều hành khách Việc riêng lẻ container thực cấp độ hạt nhân mà không cần hệ điều hành khách Ngồi ra, thư viện nằm container Giúp loại bỏ thư viện máy chủ, nhằm tiết kiệm không gian 1.2 MỤC TIÊU VÀ PHẠM VI ĐỀ TÀI – Hiểu biết Kubernetes – Triển khai Microservices với Docker ĐỒ ÁN MÔN HỌC CHƯƠNG 2:TÌM HIỂU CHI TIẾT 2.1 TÌM HIỂU VỀ KUBERNETES 2.1.1 Kubernetes k8s tảng mã nguồn mở tự động hoá việc quản lý, scaling triển khai ứng dụng dạng container hay gọi Container orchestration engine Nó loại bỏ nhiều quy trình thủ cơng liên quan đến việc triển khai mở rộng containerized applications Kubernetes orchestration cho phép bạn xây dựng dịch vụ ứng dụng mở rộng nhiều containers Nó lên lịch containers cụm, mở rộng containers quản lý tình trạng containers theo thời gian Các containers phải triển khai nhiều server hosts Kubernetes cung cấp khả phối hợp quản lý cần thiết để triển khai containers theo quy mơ cho workloads 2.1.2 Nên sử dụng Kubernetes : • Các doanh nghiệp lớn, có nhu cầu thực phải scaling hệ thống nhanh chóng, sử dụng container (Docker) ĐỒ ÁN MƠN HỌC • Các dự án cần chạy lớn container loại cho dịch vụ • Các startup tân tiến, chịu đầu tư vào công nghệ để dễ dàng auto scale sau 2.1.3 Kubernetes giải vấn đề : Bằng việc sử dụng docker, host bạn tạo nhiều container Tuy nhiên bạn có ý định sử dụng mơi trường production phải bắt buộc phải nghĩ đến vấn đề đây: • Việc quản lý hàng loạt docker host • Container Scheduling • Rolling update • Scaling/Auto Scaling • Monitor vịng đời tình trạng sống chết container • Self-hearing trường hợp có lỗi xãy (Có khả phát tự correct lỗi) • Service discovery • Load balancing • Quản lý data, work node, log • Infrastructure as Code • Sự liên kết mở rộng với hệ thống khác Bằng việc sử dụng Container orchestration engine K8s giải vấn đề Trong trường hợp không sử dụng k8s, Thì phải cần thiết tạo chế tự động hố cho kể trên, tốn thời gian không khả thi K8s có chức tương tự Service Service k8s cung cấp chức load balancing cho hàng loạt container định Việc tự động thêm, xoá container thời điểm scale điều hiển nhiên, container xảy cố tự động cách ly K8s Platform có khả liên kết tốt với hệ sinh thái bên ngồi, có nhiều middleware chạy service k8s, tương lai chắn nhiều ĐỒ ÁN MƠN HỌC • Ansible: Deploy container tới Kubernetes • Apache Ignite: Sử dụng Service Discovery Kubernetes, tự động tạo scaling k8s clkuster • Fluentd: gửi log container Kubernetes • Jenkins: Deploy container đến Kubernetes • OpenStack:Cấu trúc k8s liên kết với Cloud • Prometheus: Monitor Kubernetes • Spark: Thực thi native job Kubernetes(thay cho YARN) Spinnaker:Deploy container đến Kubernetes K8s chuẩn bị vài chế để mở rộng, thực thi chức độc lập, sử dụng platform framework Bằng cách sử dụng khả mở rộng, thực release ReplicaSet mà k8s cung cấp • 2.1.4 Những khái niệm Kubernetes Master node Là server điều khiển máy Worker chạy ứng dụng Master node bao gồm thành phần chính: • Kubernetes API Server: thành phần giúp thành phần khác liên lạc nói chuyện với Lập trình viên triển khai ứng dụng gọi API Kubernetes API Server • Scheduler: Thành phần lập lịch triển khai cho ứng dụng, ưng dụng đặt vào Worker để chạy • Controler Manager: Thành phần đảm nhiệm phần quản lý Worker, kiểm tra Worker sống hay chết, đảm nhận việc nhân ứng dụng… • Etcd: Đây sở liệu Kubernetes, tất thông tin Kubernetes lưu trữ cố định vào Worker node Là server chạy ứng dụng Bao gồm thành phần chính: ĐỒ ÁN MƠN HỌC • Container runtime: Là thành phần giúp chạy ứng dụng dạng Container Thông thường người ta sử dụng Docker • Kubelet: thành phần giao tiếp với Kubernetes API Server, quản lý container • Kubernetes Service Proxy: Thành phần đảm nhận việc phân tải ứng dụng Kubectl Tool quản trị Kubernetes, cài đặt máy trạm, cho phép lập trình viên đẩy ứng dụng mơ tả triển khai vào cụm Kubernetes, cho phép quản trị viên quản trị cụm Kubernetes Pod Pod khái niệm quan trọng Kubernetes Bản thân Pod chứa nhiều container Pod nơi ứng dụng chạy Pod tiến trình nằm Worker Node Bản thân Pod có tài nguyên riêng file system, cpu, ram, volumes, địa network… Image Là phần mềm chạy ứng dụng gói lại thành chương trình để chạy dạng container Các Pod sử dụng Image để chạy Các Image thông thường quản lý nơi lưu trữ tập trung, ví dụ có Docker Hub nơi chứa Images nhiều ứng dụng phổ biến nginx, mysql, wordpress… Deployment Là cách thức để giúp triển khai, cập nhật, quản trị Pod Replicas Controller Là thành phần quản trị Pod, giúp nhân giảm số lượng Pod ĐỒ ÁN MÔN HỌC "url": "http://192.168.0.106:3000", }).Post("http://localhost:8001/services/") fmt.Println(res) fmt.Println("=======START KONG=======") } Tạo dockerfile cho service foder chứa code golang FROM golang:1.12-alpine RUN apk update && apk add git ENV GO111MODULE=on ENV GOPATH /go ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" WORKDIR $GOPATH/src/user-service COPY RUN go mod init user-service WORKDIR $GOPATH/src/user-service RUN GOOS=linux go build -o user-service ENTRYPOINT ["./user-service"] EXPOSE 3000 Tạo thêm file docker-compose.yml foder chứa code golang version: '3' services: user-service: container_name: user-service build: 35 ĐỒ ÁN MƠN HỌC image: user-service:1.0 ports: - "3000:3000" Sau ta cd vào foder user-service gõ lệnh docker compose up Ta tao container cho order-service Kiểm tra web xem service hoạt động chưa Kiểm tra liệu nhập vào cho service 36 ĐỒ ÁN MÔN HỌC - Tao oder-service ngôn ngữ Golang vs post 3001 - package main import ( "encoding/json" "fmt" "log" "net/http" "os" consulapi "github.com/hashicorp/consul/api" "github.com/labstack/echo" "gopkg.in/resty.v1" ) func main() { // Echo instance e := echo.New() // Routes e.GET("/", hello) e.GET("/healthcheck", healthcheck) e.GET("/order/list/:userId", orderList) 37 ĐỒ ÁN MÔN HỌC - registerServiceWithConsul() // Start server e.Logger.Fatal(e.Start(":3001")) } +Tạo lời mở đầu truy cập vào vervice web func hello(c echo.Context) error { return c.JSON(http.StatusOK, echo.Map{ "code": http.StatusOK, "message": "Welcome to Order Service", }) } func healthcheck(c echo.Context) error { return c.String(http.StatusOK, "Good!") } +Thêm liệu đơn giản vào service type Item struct { OrderId string `json:"orderId"` Price int `json:"price"` } type User struct { FullName string `json:"fullName"` } type Order struct { User User `json:"user"` Items []Item `json:"items"` } item1 := Item{ OrderId: "123", Price: 100000, 38 ĐỒ ÁN MÔN HỌC } item2 := Item{ OrderId: "456", Price: 200000, } order := Order{} order.Items = append(order.Items, item1) order.Items = append(order.Items, item2) // call user service - get user info from user service add, _ := LookupServiceWithConsul("user-service") client := resty.New() res, _ := client.R() Get(fmt.Sprintf("%s%s", add, "/user/info")) json.Unmarshal([]byte(res.String()), &order.User) fmt.Println(order.User) return c.JSON(http.StatusOK, order) } func hostname() string { hn, err := os.Hostname() if err != nil { log.Fatalln(err) } return hn } func LookupServiceWithConsul(serviceID string) (string, error) { config := consulapi.DefaultConfig() client, err := consulapi.NewClient(config) if err != nil { return "", err } services, err := client.Agent().Services() // array, slice if err != nil { return "", err 39 ĐỒ ÁN MÔN HỌC } fmt.Sprint(services) srvc := services[serviceID] address := srvc.Address port := srvc.Port return fmt.Sprintf("http://%s:%v", address, port), nil } +Đăng ký service cho registry để quản lý kết nối service vs func registerServiceWithConsul() { config := consulapi.DefaultConfig() consul, err := consulapi.NewClient(config) if err != nil { log.Fatalln(err) } registration := new(consulapi.AgentServiceRegistration) registration.ID = "order-service" //replace with service id registration.Name = "order-service" //replace with service name address := hostname() registration.Address = address if err != nil { log.Fatalln(err) } registration.Port = 3001 registration.Check = new(consulapi.AgentServiceCheck) registration.Check.HTTP = fmt.Sprintf("http://%s:%v/healthcheck", address, 3001) registration.Check.Interval = "5s" registration.Check.Timeout = "3s" consul.Agent().ServiceRegister(registration) } +Đăng ký service cho kong getway func registerKong() { fmt.Println("=======START KONG=======") 40 ĐỒ ÁN MÔN HỌC client := resty.New() res, _ := client.R() SetFormData(map[string]string{ "name": "order-service", "path": "/order-service", "url": "http://192.168.0.106:3001", }).Post("http://localhost:8001/services/") fmt.Println(res) fmt.Println("=======START KONG=======") } Tạo dockerfile cho service foder chứa code golang FROM golang:1.12-alpine RUN apk update && apk add git ENV GO111MODULE=on ENV GOPATH /go ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" WORKDIR $GOPATH/src/order-service COPY RUN go mod init order-service WORKDIR $GOPATH/src/order-service RUN GOOS=linux go build -o order-service ENTRYPOINT ["./order-service"] EXPOSE 3001 Tạo thêm file docker-compose.yml foder chứa code golang version: '3' 41 ĐỒ ÁN MÔN HỌC services: user-service: container_name: order-service build: image: order-service:1.0 ports: - "3001:3001" Sau ta cd vào foder oder-service gõ lệnh docker compose up Ta tao container cho order-service Kiêm tra web xem service hoạt động chưa Kiểm tra liệu 42 ĐỒ ÁN MÔN HỌC Bước 4: đăng tải lên dockerhub để chia lưu trữ sau +Dùng lệnh để tải lên dockerhub docker push duong1234/oder-service Sau tải xong ta vào dockerhub kiểm tra với tài khoản dung đăng ký dokerhub 43 ĐỒ ÁN MÔN HỌC +Dùng lệnh pull để tải lại máy muốn sử dụng Kiểm tra images tải máy chưa 44 ĐỒ ÁN MƠN HỌC Sau ta gõ lệnh docker run để chạy chương trinh 45 ĐỒ ÁN MÔN HỌC ứng dụng chạy Tiếp theo ta kiểm tra web 46 ĐỒ ÁN MÔN HỌC 47 ĐỒ ÁN MÔN HỌC Ta thực xong việc lưu lên docker tải ứng dụng máy cần sửa dụng KẾT LUẬN – Trình bày tóm tắt kết thực + Hiểu kubernetes , microservices với Docker + Thực tải sử dụng docker để phục vụ cho đề tài +Tạo demo đơn giản mô hinh + Sử dụng docker để lưu trữ lại mô hinh demo chia cho người khác sử dụng TÀI LIỆU THAM KHẢO Tiếng Anh [1] Deepak Vohra (auth.) - Kubernetes Microservices with Docker-Apress (2016) Website [2] https://kubernetes.io/vi/docs/concepts/overview/what-is-kubernetes/ [3] https://fullstackstation.com/docker-la-gi/ 48 ĐỒ ÁN MÔN HỌC [4]https://bizflycloud.vn/tin-tuc/docker-la-gi-nhung-khai-niem-co-ban-can-biet-vedocker-20210324163532355.htm [5] https://viblo.asia/p/microservices-la-gi-gAm5yjD8Kdb [6] https://www.vimentor.com/vi/lesson/docker-container-va-cac-ung-dung-trong-kientruc-microservice [7] https://quantrimang.com/kubernetes-la-gi-162769 [8]https://xuanthulab.net/su-dung-dockerfile-de-tu-dong-tao-cac-image-trongdocker.html [9] http://bloghoctap.com/technology/trien-khai-moi-truong-web-bang-docker.html [10]https://smartfactoryvn.com/technical-article/microservices-tu-thiet-ke-den-trienkhai/ [11] https://www.giaosucan.com/2019/09/huong-dan-tao-containerizing.html [12]https://phambinh.net/bai-viet/kien-truc-microservice-la-gi-cung-tim-hieu-trong10-phut/ [13] https://master-engineer.com/2020/11/04/kubernetesk8/ 49 ... MỤC TIÊU VÀ PHẠM VI ĐỀ TÀI – Hiểu biết Kubernetes – Triển khai Microservices với Docker ĐỒ ÁN MƠN HỌC CHƯƠNG 2:TÌM HIỂU CHI TIẾT 2.1 TÌM HIỂU VỀ KUBERNETES 2.1.1 Kubernetes k8s tảng mã nguồn... TÀI CHƯƠNG 2:TÌM HIỂU CHI TIẾT 2.1 TÌM HIỂU VỀ KUBERNETES 2.1.1 Kubernetes k8s 2.1.2 Nên sử dụng Kubernetes : 2.1.3 Kubernetes giải vấn đề... hướng ngược lại • 2.3 TÌM HIỂU VỀ DOCKER 14 ĐỒ ÁN MƠN HỌC 2.3.1 Docker gì? Docker công cụ thiết kế để giúp tạo, triển khai chạy ứng dụng dễ dàng cách sử dụng containers Docker tảng phần mềm cho

Ngày đăng: 24/12/2021, 21:53

TỪ KHÓA LIÊN QUAN

w