分析Kubernetes gRPC負載平衡(L4 vs L7 )
本文由go語言教學專欄為大家介紹Kubernetes中的gRPC負載平衡 ,希望對需要的朋友有幫助!
安裝環境依賴
- docker-desktop >= 4.1.1
- kubernetes >= 1.21.5
- go >= 1.17
- protobuf >= 3.17.3
- istioctl >= 1.11.4
下載安裝Docker Desktop ,並啟動內建的Kubernetes 叢集。
# 安装 Gobrew install go# 安装 Protobufbrew install protobuf# 安装 Istiobrew install istioctl kubectl config use-context docker-desktop istioctl install -y
專案位址
github.com/jxlwqq/grpc-lb
拉取程式碼:
git clone git@github.com:jxlwqq/grpc-lb.gitcd grpc-lb
Makefile 介紹
指令 | 說明 |
---|---|
##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
| #注入Istio 邊車
L4 vs L7 負載平衡
所謂的四層就是基於IP 連接埠的負載平衡,而七層就是基於URL 等應用層資訊的負載平衡;Kubernetes內建的Service 負載平衡基於iptables/ipvs 實現,僅支援L4。換句話說, Service 支援 HTTP/1.1 協議,不支援 HTTP/2 協定。 而 Envoy(Istio) 則更為全能,支援被 gRPC 請求和回應的所有作為路由和負載平衡底層的 HTTP/2 功能。專案架構
本專案分別測試 Service 和 Envoy(Istio) 對 HTTP/RPC 負載平衡的支援情況。- cmd/server/main.go: 服務端,同時提供 HTTP 和 RPC 服務。回應的資料為服務端容器所在的 Pod 名稱,(基於 Downward API)。
- cmd/client-http/main.go: HTTP 用戶端,透過 HTTP 方式,循環呼叫服務端接口,並列印返回值。
- cmd/client-grpc/main.go: gRPC 用戶端,透過 RPC 方式,循環遠端呼叫服務端方法,並列印回傳值。
測試原理
服務端server 在Kubernetes 叢集中以Deployment 的方式部署3 個副本,3 個副本的Pod 名稱各不相同,而client-http 和client-grpc 則會每秒呼叫一次服務端,並列印回傳值。如果傳回值中,三個 Pod 的名稱都存在,則表示正在進行有效的負載平衡,否則,則表示未進行有效的負載平衡。測試Service
建置映像:make docker-build # 构建镜像(构建好的镜像,不 push 到远程仓库中)
docker images ls
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.2MB
make kube-deploy # 在集群中部署服务
kubectl get pods
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 2m51s
export CLIENT_HTTP_POD=$(kubectl get pod -l app=client-http -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_HTTP_POD}"
#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-fk8zf
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
測試 Envoy(Istio)
我們在叢集中已經部署了一個 Istio,但沒有設定自動注入的命令空間,所以我們在這裡進行手動注入。 手動注入:make istio-inject # 注入 Istio 边车
kubectl get pods
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
export CLIENT_HTTP_POD=$(kubectl get pod -l app=client-http -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_HTTP_POD}"
#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
export CLIENT_GRPC_POD=$(kubectl get pod -l app=client-grpc -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_GRPC_POD}"
#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
清理make kube-delete
istioctl experimental uninstall --purge
登入後複製
make kube-delete istioctl experimental uninstall --purge
以上是分析Kubernetes gRPC負載平衡(L4 vs L7 )的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Golang中使用gRPC實現並發資料傳輸的最佳實踐引言:隨著雲端運算和大數據技術的發展,資料傳輸的需求越來越迫切。而gRPC作為Google開源的高效能遠端過程呼叫框架,以其高效、靈活和跨語言的特性,成為了許多開發者選擇的首選。本文將介紹如何在Golang中使用gRPC實現並發資料傳輸的最佳實踐,包括工程結構的搭建、連接池的使用和錯誤處理等。一、搭建工程結構在開始使

如何使用gRPC實作檔案上傳?建立配套服務定義,包括請求和回應訊息。在客戶端,開啟要上傳的檔案並將其分成區塊,然後透過gRPC串流傳輸到服務端。在服務端,接收文件區塊並將其儲存到文件中。服務端在文件上傳完成後發送回應,指示上傳是否成功。

Golang中使用gRPC實現資料加密的最佳實踐引言:在當今資訊安全高度重視的時代,保護資料的安全性變得越來越重要。而在分散式系統中,如何確保資料在網路傳輸過程中的安全性,是必須關注的問題。 gRPC是一種高效能、跨語言的遠端過程呼叫框架,它透過使用ProtocolBuffers進行資料序列化和傳輸,並支援TLS/SSL加密傳輸,從而可以提供更高的資料安

隨著網路規模的不斷擴大以及用戶需求的不斷增加,微服務架構的優勢越來越受到重視。隨之而來的是,容器化的微服務架構也變得特別重要,它可以更好地滿足高可用性、高效能、高擴充性等方面的需求。而在這個趨勢下,go-zero和Kubernetes成為了最受歡迎的容器化微服務框架。本文將介紹如何使用go-zero框架和Kubernetes容器編排工具來建構高可用性、高效能

隨著網路的快速發展,越來越多的企業開始將應用程式遷移到雲端平台。而在雲端平台上進行應用程式的部署和管理,Docker和Kubernetes已經成為了兩種非常流行且強大的工具。 Beego是使用Golang開發的Web框架,它提供了諸如HTTP路由、MVC分層、日誌記錄、設定管理、Session管理等豐富的功能。在本文中,我們將介紹如何使用Docker和Kub

如何利用React和Kubernetes建立可靠的容器化應用隨著雲端原生技術的快速發展,容器化應用成為了當今軟體開發的熱門趨勢。而React作為一個流行的前端框架,它的靈活性和高效性使得它成為了許多開發者首選。本文將介紹如何利用React和Kubernetes來建立可靠的容器化應用,並提供一些具體的程式碼範例。在創建React應用程式首先,我們需要建立一個基本的Reac

前言:grpc(grpcRemoteProcedureCalls)是一種現代化的高效能遠端過程呼叫框架,廣泛應用於微服務架構和分散式系統的通訊。如果你已經對gRPC的基礎知識有所了解,那麼這篇進階指南將帶你深入探討其核心機制,幫助你掌握gRPC的精髓,充分發揮其效能優勢。服務端串流處理:gRPC支援服務端串流處理,允許伺服器端向客戶端傳送一系列訊息流。在PHP中,可以使用ServerWriter或ServerCallWriter建立服務端串流式。以下是一個示範發送5個訊息的程式碼:namespace

Kubernetes是一個現代化的容器編排系統,其強大的伸縮性和可靠性對於開發和維運人員來說無疑是非常重要的。其中一個關鍵的應用是Redis,作為一個高效能快取和資料庫的組合,Redis在Kubernetes的應用也越來越受到重視。本文將詳細介紹Redis在Kubernetes中的應用,透過實際案例來說明如何在Kubernetes平台上部署、管理、監控Re
