溫馨提示×

溫馨提示×

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

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

kubernetes對服務(wù)滾動更新時出現(xiàn)連接異常怎么辦

發(fā)布時間:2021-10-19 17:56:54 來源:億速云 閱讀:175 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)kubernetes對服務(wù)滾動更新時出現(xiàn)連接異常怎么辦,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

當(dāng)kubernetes對服務(wù)滾動更新的期間,默認(rèn)配置的情況下可能會讓部分連接異常(比如連接被拒絕),我們來分析下原因并給出最佳實踐

滾動更新場景

使用 deployment 部署服務(wù)并關(guān)聯(lián) service

  • 修改 deployment 的 replica 調(diào)整副本數(shù)量來滾動更新

  • 升級程序版本(修改鏡像tag)觸發(fā) deployment 新建 replicaset 啟動新版本的 pod

  • 使用 HPA (HorizontalPodAutoscaler) 來對 deployment 自動擴(kuò)縮容更新過程連接異常的原因滾動更新時,service 對應(yīng)的 pod 會被創(chuàng)建或銷毀,也就是 service 對應(yīng)的 endpoint 列表會新增或移除endpoint,更新期間可能讓部分連接異常,主要原因是:

  • pod 被創(chuàng)建,還沒完全啟動就被 endpoint controller 加入到 service 的 endpoint 列表,然后 kube-proxy 配置對應(yīng)的路由規(guī)則(iptables/ipvs),如果請求被路由到還沒完全啟動完成的 pod,這時 pod 還不能正常處理請求,就會導(dǎo)致連接異常

  • pod 被銷毀,但是從 endpoint controller watch 到變化并更新 service 的 endpoint 列表到 kube-proxy 更新路由規(guī)則這期間有個時間差,pod可能已經(jīng)完全被銷毀了,但是路由規(guī)則還沒來得及更新,造成請求依舊還能被轉(zhuǎn)發(fā)到已經(jīng)銷毀的 pod ip,導(dǎo)致連接異常最佳實踐

  • 針對第一種情況,可以給 pod 里的 container 加 readinessProbe (就緒檢查),這樣可以讓容器完全啟動了才被endpoint controller加進(jìn) service 的 endpoint 列表,然后 kube-proxy 再更新路由規(guī)則,這時請求被轉(zhuǎn)發(fā)到的所有后端 pod 都是正常運行,避免了連接異常

  • 針對第二種情況,可以給 pod 里的 container 加 preStop hook,讓 pod 真正銷毀前先 sleep 等待一段時間,留點時間給 endpoint controller 和 kube-proxy 清理 endpoint 和路由規(guī)則,這段時間 pod 處于 Terminating 狀態(tài),在路由規(guī)則更新完全之前如果有請求轉(zhuǎn)發(fā)到這個被銷毀的 pod,請求依然可以被正常處理,因為它還沒有被真正銷毀

最佳實踐 yaml 示例:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      component: nginx
  template:
    metadata:
      labels:
        component: nginx
    spec:
      containers:
      - name: nginx
        image: "nginx"
        ports:
        - name: http
          hostPort: 80
          containerPort: 80
          protocol: TCP
        readinessProbe:
          httpGet:
            path: /healthz
            port: 80
            httpHeaders:
            - name: X-Custom-Header
              value: Awesome
          initialDelaySeconds: 15
          timeoutSeconds: 1
        lifecycle:
          preStop:
            exec:
              command: ["/bin/bash", "-c", "sleep 30"]

以上就是kubernetes對服務(wù)滾動更新時出現(xiàn)連接異常怎么辦,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI