91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kubernetes gRPC負載均衡分析

發布時間:2021-11-16 15:02:00 來源:億速云 閱讀:193 作者:iii 欄目:編程語言

本篇內容主要講解“Kubernetes gRPC負載均衡分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“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 邊車

具體邏輯,請查看 Makefile 文件。

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  # 在集群中部署服務

查看 Pod:

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

查看 client-http Pod 的日志:

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

查看 client-grpc Pod 的日志:

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

可以看出,HTTP 請求在進行有效負載,而 RPC 請求在進行無效負載。

測試 Envoy(Istio)

我們在集群中已經部署了一個 Istio,但是沒有設置自動注入的命令空間,所以我們在這里進行手動注入。

手動注入:

make istio-inject # 注入 Istio 邊車

查看 Pod:

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

查看 client-http Pod 的日志:

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

查看 client-grpc Pod 的日志:

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

可以看出,HTTP 請求 和 RPC 請求均在進行有效負載。

清理

make kube-delete
istioctl experimental uninstall --purge

到此,相信大家對“Kubernetes gRPC負載均衡分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石首市| 渭南市| 利川市| 古交市| 阿鲁科尔沁旗| 盐津县| 平利县| 龙陵县| 错那县| 邳州市| 奎屯市| 南京市| 禄丰县| 黄骅市| 德昌县| 北京市| 林口县| 合山市| 南丹县| 日喀则市| 梨树县| 博兴县| 汤阴县| 丽江市| 资中县| 龙川县| 长垣县| 北宁市| 方山县| 霍城县| 阳江市| 乐安县| 盐山县| 九寨沟县| 星子县| 循化| 克拉玛依市| 黄大仙区| 松滋市| 会宁县| 嘉禾县|