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

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

49 123 3

Đ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

Thông tin cơ bản

Định dạng
Số trang 49
Dung lượng 4,1 MB
File đính kèm 50_TranThiBichVan.rar (7 MB)

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 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 Kubernetes tự động hoá việc quản lý, scaling 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 cịn 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 hoá 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 ĐỒ ÁN MƠN HỌC 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 • 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… ĐỒ ÁN MƠN HỌC • 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: • 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… ĐỒ ÁN MÔN HỌC 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 Service Là phần mạng (network) Kubernetes giúp cho Pod gọi ổn định hơn, để Load Balancing nhiều Pod, dùng để dẫn traffic từ người dùng vào ứng dụng (Pod), giúp người dùng sử dụng ứng dụng Label Label đời để phân loại quản lý Pod, Ví dụ đánh nhãn Pod chạy theo chức frontend, backend, chạy mơi trường dev, qc, uat, production… 2.1.5 Các tính Kubernetes -Phát hành khôi phục tự động Kubernetes tiến hành thay đổi ứng dụng cấu hình ứng dụng, đồng thời theo dõi tình trạng ứng dụng để đảm bảo không giết tất phiên bạn lúc Nếu có vấn đề xảy ra, Kubernetes hoàn trả thay đổi cho bạn Tận dụng hệ sinh thái giải pháp triển khai phát triển -Khám phá dịch vụ cân tải Không cần phải sửa đổi ứng dụng bạn để sử dụng chế khám phá dịch vụ không quen thuộc Kubernetes cung cấp cho Pods địa IP riêng họ tên DNS cho nhóm Pod cân tải nhóm -Điều phối lưu trữ ĐỒ ÁN MƠN HỌC Tự động gắn kết hệ thống lưu trữ mà bạn chọn, cho dù từ nhớ cục bộ, nhà cung cấp đám mây công cộng GCP AWS , hay hệ thống lưu trữ mạng NFS, iSCSI, Gluster, Ceph, Cinder Flocker -Quản lý cấu hình bí mật Triển khai cập nhật bí mật cấu hình ứng dụng mà khơng cần xây dựng lại hình ảnh bạn khơng để lộ bí mật cấu hình ngăn xếp bạn -Đóng gói thùng rác tự động Tự động đặt thùng chứa dựa yêu cầu tài nguyên ràng buộc khác chúng, khơng làm tính khả dụng Kết hợp khối lượng công việc quan trọng nỗ lực cao để tăng hiệu sử dụng tiết kiệm nhiều tài nguyên -Thực hàng loạt Kubernetes quản lý khối lượng công việc theo lô CI bạn, thay vùng chứa bị lỗi, muốn -Ngăn xếp kếp Ipv4 / Ipv6 -Phân bổ địa IPv4 IPv6 cho nhóm dịch vụ -Chia tỉ lệ ngang -Mở rộng ứng dụng bạn lên xuống lệnh đơn giản, với giao diện người dùng tự động dựa mức sử dụng CPU -Tự sửa chửa -Khởi động lại vùng chứa bị lỗi, thay lên lịch lại vùng chứa nút chết, loại bỏ vùng chứa không phản hồi với kiểm tra tình trạng người dùng xác định không quảng cáo chúng cho khách hàng chúng sẵn sàng phân phát -Được thiết kế để mở rộng -Thêm tính vào cụm Kubernetes bạn mà không cần thay đổi mã nguồn ngược dịng 10 ĐỒ ÁN MƠN HỌC "name": "user-service", "path": "/user-service", "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: 35 ĐỒ ÁN MÔN HỌC container_name: user-service build: 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=======") client := resty.New() 40 ĐỒ ÁN MÔN HỌC 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' services: 41 ĐỒ ÁN MÔN HỌC 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-ve-docker20210324163532355.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-trong-docker.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-trien-khai/ [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-trong-10phut/ [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... 2.3 TÌM HIỂU VỀ DOCKER 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 phép bạn dựng, kiểm thử triển khai. .. triển khải container cho Docker theo bước đây: Cài đặt Docker Để triển khai microservices Docker, bạn phải cài đặt Docker từ (www .docker. com) làm theo dẫn đưa cài đặt Chuẩn bị Dockerfile Giả sử bạn

Ngày đăng: 22/12/2021, 21:29

TỪ KHÓA LIÊN QUAN

w