天天看點

容器化問題與解決

問題1: 服務發版等導緻的服務間接性不可用問題

原因1:請求需要10s完成,但是服務所在pod在第8秒被幹掉 

解決:設定preStop和延遲銷毀pod, sleep時間要小于terminationGracePeriodSeconds.且sleep之後不會再有請求進入該pod

          imagePullPolicy: Always

          lifecycle:

            preStop:

              exec:

                command:

                  - sleep

                  - '30'

.......

      restartPolicy: Always

      terminationGracePeriodSeconds: 40

原因2:pod啟動時,是running狀态(即容器建立成功),running 後被加入到 Endpoints ,但是其中的業務服務并沒有起來,無法正常處理請求

解決:添加就緒探針,服務可用後再将pod加入服務清單中

http請求:

          name: coding-cloud-platform-cron

          readinessProbe:

            failureThreshold: 1

            httpGet:

              path: >-

                /api/cron/stats/stu/review?key=idnehmC68npnUXDU&startTime=2021-06-08%2000:00:00&endTime=2021-06-08%2000:00:00

              port: 8080

              scheme: HTTP

            initialDelaySeconds: 5

            periodSeconds: 2

            successThreshold: 2

            timeoutSeconds: 1

端口監控(開啟isito邊車有問題):

          name: coding-cloud-platform-api

          readinessProbe:

            failureThreshold: 3

            initialDelaySeconds: 30

            periodSeconds: 10

            successThreshold: 1

            tcpSocket:

              port: 8080

            timeoutSeconds: 1

在幫助田老師進行skywalking的的容器化的過程中發現如下問題:

k8s+isito,配置tcp存活或就緒指針,如果開啟了envoy自動注入,那麼所有的端口都可以被檢測到,進而導緻指針會存在失效問題。該問題可以通過增加如下配置解決:

traffic.sidecar.istio.io/excludeInboundPorts: '12800'

但是會影響後期isito相關流量治理功能的使用,是以推薦的存活或就緒指針還是http請求方式比較靠譜。

開啟了envoy自動注入,那麼所有的端口都可以被檢測到 怎麼立即呢?

pod中java服務提供的端口是1280,無論java服務是否起來,

telnet podIP 1280 總是通的;

注意如果java服務沒有啟動,那麼在pod内執行telnet localhost 1280是不通的,原因如下:

istio的邊車開啟後,會攔截所有端口對應的所有流量

問題2:因isito配置導緻的websocket關閉變慢問題,增加如下envoyfilter即可

apiVersion: networking.istio.io/v1alpha3

kind: EnvoyFilter

metadata:

  name: delayed-close-timeout

  namespace: istio-system

spec:

  configPatches:

    - applyTo: NETWORK_FILTER

      match:

        listener:

          filterChain:

            filter:

              name: envoy.http_connection_manager

      patch:

        operation: MERGE

        value:

          typed_config:

            '@type': >-

              type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager

            delayed_close_timeout: 0s

繼續閱讀