Maison >développement back-end >Golang >Analyse de l'équilibrage de charge Kubernetes gRPC (L4 vs L7)
Cet article est introduit par la colonne tutoriel go language pour introduire l'équilibrage de charge gRPC dans Kubernetes. J'espère qu'il sera utile aux amis dans le besoin !
Téléchargez et installez Docker Desktop et démarrez le cluster Kubernetes intégré.
# 安装 Gobrew install go# 安装 Protobufbrew install protobuf# 安装 Istiobrew install istioctl kubectl config use-context docker-desktop istioctl install -y
github.com/jxlwqq/grpc-lb
Code d'extraction :
git clone git@github.com:jxlwqq/grpc-lb.gitcd grpc-lb
Command | Instructions |
---|---|
make init make init
|
安装 protoc-gen-go 和 protoc-gen-grpc |
make protoc |
基于 proto 文件,生成 *_pb.go 和 *_grpc.pb.go |
make docker-build |
构建 docker 镜像 |
make kube-deploy |
在集群中部署服务 |
make kube-delete |
删除服务 |
make istio-inject | Installez protoc-gen-go et protoc-gen-grpc
En fonction du fichier proto, générez *_pb.go et *_grpc.pb. allez
make docker-build
Construisez l'image docker
make kube-deploy
Déployez le service dans le clustermake istio-inject
cmd/server/main.go : serveur, fournissant à la fois les services HTTP et RPC. Les données de réponse sont le nom du pod où se trouve le conteneur de serveur (basé sur l'API descendante).
cmd/client-http/main.go : le client HTTP, via la méthode HTTP, appelle cycliquement l'interface du serveur et imprime la valeur de retour.
cmd/client-grpc/main.go : le client gRPC, via RPC, appelle à distance la méthode serveur en boucle et imprime la valeur de retour.
Principe du testmake docker-build # 构建镜像(构建好的镜像,不 push 到远程仓库中)Voir l'image :
docker images lsRetour :
REPOSITORY TAG IMAGE ID CREATED SIZE grpc-lb/client-grpc latest 95d32ead8d9b 12 seconds ago 16.6MB grpc-lb/client-http latest dbf0341206f6 22 seconds ago 11.5MB grpc-lb/server latest 1ef346785b2a 29 seconds ago 18.2MBDéployer sur le cluster :
make kube-deploy # 在集群中部署服务Voir le pod :
kubectl get podsRetour :
NAME READY STATUS RESTARTS AGE client-grpc-6c565594f4-tdf75 1/1 Running 0 2m48s client-http-55d95c744d-f7nx4 1/1 Running 0 2m49s server-7c4bfd74d-29c69 1/1 Running 0 2m51s server-7c4bfd74d-4btvw 1/1 Running 0 2m51s server-7c4bfd74d-fk8zf 1/1 Running 0 2m51sVoir le Journal du pod client-http :
export CLIENT_HTTP_POD=$(kubectl get pod -l app=client-http -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_HTTP_POD}"Retour :
#1: server-7c4bfd74d-4btvw#2: server-7c4bfd74d-4btvw#3: server-7c4bfd74d-29c69#4: server-7c4bfd74d-fk8zf#5: server-7c4bfd74d-fk8zf#6: server-7c4bfd74d-29c69#7: server-7c4bfd74d-fk8zf#8: server-7c4bfd74d-4btvw#9: server-7c4bfd74d-fk8zfAfficher le journal du pod client-grpc :
export CLIENT_GRPC_POD=$(kubectl get pod -l app=client-grpc -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_GRPC_POD}"
#1: server-7c4bfd74d-fk8zf#2: server-7c4bfd74d-fk8zf#3: server-7c4bfd74d-fk8zf#4: server-7c4bfd74d-fk8zf#5: server-7c4bfd74d-fk8zf#6: server-7c4bfd74d-fk8zf#7: server-7c4bfd74d-fk8zf#8: server-7c4bfd74d-fk8zf#9: server-7c4bfd74d-fk8zf🎜On peut voir que la requête HTTP transporte une charge utile, tandis que la requête RPC contient une charge non valide charger. 🎜🎜🎜🎜Testing Envoy(Istio)🎜🎜Nous avons déployé un Istio dans le cluster, mais il n'y a pas d'espace de commande pour l'injection automatique, nous effectuons donc une injection manuelle ici. 🎜🎜Injection manuelle : 🎜
make istio-inject # 注入 Istio 边车🎜Voir le pod : 🎜
kubectl get pods🎜Retour : 🎜
NAME READY STATUS RESTARTS AGE client-grpc-7864f57779-f6blx 2/2 Running 0 17s client-http-f8964854c-jclkd 2/2 Running 0 21s server-7846bd6bb4-bcfws 2/2 Running 0 27s server-7846bd6bb4-fv29s 2/2 Running 0 40s server-7846bd6bb4-hzqj6 2/2 Running 0 34s🎜Voir le journal du pod client-http : 🎜
export CLIENT_HTTP_POD=$(kubectl get pod -l app=client-http -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_HTTP_POD}"🎜Retour : 🎜
#1: server-7846bd6bb4-hzqj6#2: server-7846bd6bb4-fv29s#3: server-7846bd6bb4-hzqj6#4: server-7846bd6bb4-hzqj6#5: server-7846bd6bb4-hzqj6#6: server-7846bd6bb4-hzqj6#7: server-7846bd6bb4-hzqj6#8: server-7846bd6bb4-bcfws#9: server-7846bd6bb4-fv29s🎜Voir le journal du pod client-grpc : 🎜
export CLIENT_GRPC_POD=$(kubectl get pod -l app=client-grpc -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_GRPC_POD}"🎜Retour : 🎜
#1: server-7846bd6bb4-fv29s#2: server-7846bd6bb4-hzqj6#3: server-7846bd6bb4-fv29s#4: server-7846bd6bb4-bcfws#5: server-7846bd6bb4-fv29s#6: server-7846bd6bb4-hzqj6#7: server-7846bd6bb4-fv29s#8: server-7846bd6bb4-bcfws#9: server-7846bd6bb4-fv29s🎜C'est On peut voir que les requêtes HTTP et les requêtes RPC transportent une charge utile. 🎜🎜🎜🎜Nettoyer🎜
make kube-delete istioctl experimental uninstall --purge
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!