Ứng dụng ví dụ Emoji.voto với Service Mesh Linkerd

Một ứng dụng microservice cho phép người dùng bỏ phiếu cho biểu tượng cảm xúc yêu thích của họ (emoji) và theo dõi bảng xếp hạng số phiếu đã nhận được. Hãy để emoji tốt nhất chiến thắng.

Ứng dụng này bao gồm 3 dịch vụ sau:

  • emojivoto-web: Giao diện web và API REST.
  • emojivoto-emoji-svc: API gRPC để tìm kiếm và liệt kê các emoji.
  • emojivoto-voting-svc: API gRPC để thực hiện việc bỏ phiếu và cập nhật bảng xếp hạng.

Thực hành triển khai

Triển khai trên Minikube với Linkerd2

  1. Cài đặt CLI của Linkerd:
curl https://run.linkerd.io/install | sh
  1. Cài đặt Linkerd2:
linkerd install | kubectl apply -f -
  1. Kiểm tra bảng điều khiển:
linkerd dashboard
  1. Triển khai ứng dụng:
kubectl kustomize kustomize/deployment | \
    linkerd inject - | \
    kubectl apply -f -
  1. Truy cập ứng dụng:
minikube -n emojivoto service web-svc

Triển khai bằng Docker Compose

Bạn cũng có thể chạy ứng dụng bằng Docker Compose mà không cần Linkerd2:

make deploy-to-docker-compose

Ứng dụng web sẽ chạy trên cổng 8080 của máy chủ Docker.

Triển khai độc lập lên cụm hiện có

kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment

Tạo lưu lượng truy cập

Dịch vụ VoteBot có thể tạo ra một số lưu lượng truy cập tự động bằng cách "bình chọn ngẫu nhiên" cho các emoji:

  • 15% phiếu bầu cho 🍩.
  • Khi không chọn 🍩, nó sẽ chọn ngẫu nhiên một emoji khác.

Để chạy thủ công bot bỏ phiếu:

export WEB_HOST=localhost:8080 # Thay thế bằng địa chỉ web của bạn
go run emojivoto-web/cmd/vote-bot/main.go

Xây dựng phiên bản mới

Để xây dựng và đẩy hình ảnh đa kiến trúc Docker:

  1. Cập nhật tên thẻ trong common.mk.
  2. Tạo một instance Builder Buildx:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker buildx create --name=multiarch-builder --driver=docker-container --use
docker buildx inspect multiarch-builder --bootstrap
  1. Xây dựng và đẩy hình ảnh đa kiến trúc lên hub.docker.com:
docker login
make multi-arch
  1. Cập nhật các tệp cấu hình:
  • docker-compose.yml
  • Các tệp YAML trong thư mục kustomize/deployment.
  1. Phân phối tới kho lưu trữ website của Linkerd:
kubectl kustomize kustomize/deployment > ../website/run.linkerd.io/public/emojivoto.yml
kubectl kustomize kustomize/daemonset > ../website/run.linkerd.io/public/emojivoto-daemonset.yml
kubectl kustomize kustomize/statefulset > ../website/run.linkerd.io/public/emojivoto-statefulset.yml

Chỉ báo Prometheus

Mặc định, dịch vụ bỏ phiếu cung cấp các chỉ báo Prometheus về số lượng phiếu bầu hiện tại trên cổng 8801. Điều này có thể bị vô hiệu hóa bằng cách xóa biến môi trường PROM_PORT.

Phát triển cục bộ

Ứng dụng Web Emojivoto

Ứng dụng này được viết bằng React và đóng gói bằng Webpack. Dưới đây là cách chạy các dịch vụ Go và phát triển giao diện trước.

Thiết lập và khởi chạy dịch vụ

  1. Xây dựng ứng dụng:
make build
  1. Khởi chạy dịch vụ bỏ phiếu:
GRPC_PORT=8081 go run emojivoto-voting-svc/cmd/server.go
  1. [Trong cửa sổ terminal riêng] Khởi chạy dịch vụ emoji:
GRPC_PORT=8082 go run emojivoto-emoji-svc/cmd/server.go
  1. [Trong cửa sổ terminal riêng] Đóng gói tài nguyên frontend:
cd emojivoto-web/webapp
yarn install
yarn webpack-dev-server --port 8083 # Phục vụ tài nguyên với tính năng reload
  1. [Trong cửa sổ terminal riêng] Khởi chạy dịch vụ web:
export WEB_PORT=8080
export VOTINGSVC_HOST=localhost:8081
export EMOJISVC_HOST=localhost:8082
export WEBPACK_DEV_SERVER=http://localhost:8083
go run emojivoto-web/cmd/server.go
  1. [Tùy chọn] Khởi chạy bot bỏ phiếu:
export WEB_HOST=localhost:8080
go run emojivoto-web/cmd/vote-bot/main.go
  1. Truy cập ứng dụng:
open http://localhost:8080

Kiểm tra cấu hình dịch vụ Linkerd

Các Service Profiles của Linkerd cung cấp thông tin chi tiết về từng tuyến đường (route), chẳng hạn như telemetries, thời gian chờ và retry.

Tạo định nghĩa ServiceProfile từ tệp .proto

Các dịch vụ emojivoting sử dụng Protocol Buffers (protobuf). Bạn có thể tạo định nghĩa ServiceProfile bằng lệnh sau:

linkerd profile --proto proto/Emoji.proto emoji-svc -n emojivoto
linkerd profile --proto proto/Voting.proto voting-svc -n emojivoto

Viết vào file hoặc áp dụng trực tiếp:

linkerd profile --proto proto/Emoji.proto emoji-svc -n emojivoto > emoji-sp.yaml
linkerd profile --proto proto/Voting.proto voting-svc -n emojivoto | kubectl apply -f -

Tạo ServiceProfile cho dịch vụ web

Đối với dịch vụ web, bạn có thể tự động tạo ServiceProfile:

linkerd profile -n emojivoto web-svc --tap deploy/web --tap-duration 10s | kubectl apply -f -

Bây giờ bạn có thể quan sát các chỉ số cho mỗi tuyến đường trên bảng điều khiển của Linkerd hoặc bằng lệnh:

linkerd -n emojivoto routes deploy/web-svc --to svc/emoji-svc

Thẻ: Linkerd Kubernetes DockerCompose

Đăng vào ngày 19 tháng 6 lúc 18:06