亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Kubernetes 集群中只有 1 個 pod 處理所有請求

Kubernetes 集群中只有 1 個 pod 處理所有請求

Go
慕村9548890 2023-07-31 16:11:12
以下是 minikube Kubernetes 的清單文件,用于部署和服務:apiVersion: apps/v1kind: Deploymentmetadata:  name: hello-deploymentspec:  selector:    matchLabels:      app: hello  replicas: 3  template:    metadata:      labels:        app: hello    spec:      containers:      - name: hello        image: hello_hello        imagePullPolicy: Never        ports:        - containerPort: 4001          protocol: TCP---apiVersion: v1kind: Servicemetadata:  name: hellospec:  selector:    app: hello  ports:  - port: 4001    nodePort: 30036    protocol: TCP  type: NodePort以及一個用 Golang 編寫的簡單 HTTP 服務器package mainimport (    http "net/http"    "github.com/gin-gonic/gin")func main() {    r := gin.Default()    r.GET("/ping", func(c *gin.Context) {        c.JSON(200, gin.H{            "message": "pong",        })    })    server := &http.Server{        Addr:    ":4001",        Handler: r,    }    server.ListenAndServe()}當我向IP:30036/ping發出多個請求,然后打開 pod 的日志時,我可以看到 3 個 pod 中只有 1 個處理所有請求。如何讓其他 Pod 響應請求?
查看完整描述

3 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

您正在使用 NodePort 公開服務,因此沒有反向代理,但您直接連接到您的 Pod。這是一個不錯的選擇。(稍后您可能想使用 Ingress)

您看到的是只有一個 Pod 處理您的請求。您希望每個請求都負載均衡到不同的 pod。你的假設是正確的,但是負載均衡不是發生在HTTP請求層,而是發生在TCP層。

因此,當您擁有持久的 TCP 連接并重新使用它時,您將不會體驗到您期望的負載平衡。由于建立 TCP 連接的延遲時間相當昂貴,因此通常會進行優化以避免重復打開新的 TCP 連接:HTTP keep-alive。

大多數框架和客戶端默認啟用 Keep Alive,Go 也是如此。嘗試s.SetKeepAlivesEnabled(false)看看是否可以解決您的問題。(僅推薦用于測試?。?/p>

您還可以使用多個不同的客戶端,通過命令行使用curl 或在Postman 中禁用keep-alive。


查看完整回答
反對 回復 2023-07-31
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

在 Kubernetes 集群中,發送到 k8s 服務的請求通過kube-proxy進行路由。

默認kube-proxy模式是Iptalbles從 Kubernetes v1.2 開始的,它允許服務和后端 Pod 之間更快的數據包解析。后端 Pod 之間的負載平衡直接通過iptables rules.

也許您沒有生成足夠的負載,而一個 pod 無法處理,這就是您從 路由到同一個 pod 的原因kube-proxy。


查看完整回答
反對 回復 2023-07-31
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

我嘗試使用請求標頭,它解決了負載平衡問題,其中所有請求僅命中單個副本,而對于演示或測試,能夠將請求分發到所有副本非常有用

連接:保持活動 連接:關閉

該請求總是到達同一個 pod

curl?-H?"Connection:?keep-alive"?http://your-service:port/path

但是,使用close,請求會平衡到所有 pod

curl?-H?"Connection:?close"?http://your-service:port/path


查看完整回答
反對 回復 2023-07-31
  • 3 回答
  • 0 關注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號