日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用ReadinessGate實現ALB Ingress后端Pod滾動升級時平滑上線

在Pod上線階段,需要確保Pod在接收流量之前真正達到可服務狀態,您可以通過配置ReadinessGate來保證Pod上線階段的可用性。ALB Ingress Controller支持啟用ReadinessGate功能,持續監控ACK集群Pod的狀態,等待Pod狀態變為可用狀態后再將完全啟動的Pod掛載到后端服務器組,并向該Pod轉發流量。

前提條件

原理解析

K8s可以通過三類可用性探針,包括存活(LivenessProbe)、就緒(ReadinessProbe)、啟動(StartupProbe),來檢查Pod的健康狀態、服務可用性和啟用條件,提高應用的可用性。您可以通過HTTP請求、TCP Socket連接或命令行方式配置這三類探針,設置執行探測的頻率、超時時間、健康閾值和不健康閾值等參數。更多信息,請參見配置存活/就緒和啟動探針

探針種類

作用

存活探針(LivenessProbe)

用于判斷容器是否存活,如果LivenessProbe探針探測到容器不健康,kubelet將kill掉該容器,并根據容器的重啟策略做相應的處理。如果一個容器不包含LivenessProbe探針,那么kubelet認為該容器的LivenessProbe探針返回的值永遠是Success,即容器存活。

就緒探針(ReadinessProbe)

用于判斷容器服務是否可用,達到Ready狀態的Pod才可以接收請求。Service與Endpoint的關聯關系也根據Pod的Ready狀態設置:

  • 當Pod的Ready狀態為False時,K8s將Pod IP從Service關聯的后端Endpoint列表中隔離。

  • 等待Pod的Ready狀態變更為True時,K8s將Pod IP重新加入到Service關聯的Endpoint列表中。

啟動探針(StartupProbe)

用于判斷容器何時開始啟動,可以控制容器在啟動成功后再進行存活性和就緒性檢查。可以使用該探針對慢啟動容器進行存活性檢測,避免它們在啟動運行之前被kill掉。

可用性探針模式下,Pod的Ready狀態僅由kubelet根據容器狀態判斷。然而,對于復雜應用程序來說,往往需要更精細地控制容器內服務的可用性,需要具備控制Pod的Ready狀態的能力。

通過ReadinessGate機制,您可以設置一個或多個自定義的Pod可用性探測來判斷Pod是否可用。新增的自定義Condition狀態將由外部Controller控制器設置,K8s將在判斷全部ReadinessGate條件都為true時,才將Pod設置為服務可用狀態。

ALB Ingress Controller支持配置ReadinessGate,使ACK集群持續監控Pod狀態,直到狀態為可用狀態才認為Pod已經啟動并掛載至后端服務器組上,并將流量轉發至該Pod節點。

說明

在Deployment中配置ReadinessGate自定義Condition:target-health.alb.k8s.alibabacloud后,ACK集群持續監控Pod狀態。當ALB Ingress Controller將Pod成功添加到ALB后端服務器組后,集群才標記Pod狀態可用并向Pod轉發流量。

操作步驟

  1. 創建tea-service.yaml,配置ReadinessGate自定義Condition。

    創建tea-service.yaml文件并拷貝以下內容到文件中,用于部署名稱為tea的Deployment以及名稱為tea-svc的Service。在Deployment中配置ReadinessGate自定義Condition:target-health.alb.k8s.alibabacloud,使ACK集群持續監控Pod的狀態,直到狀態為可用狀態才認為Pod已經啟動并掛載到后端服務器組上。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tea
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    # 配置readinessGate
          readinessGates:
            - conditionType: target-health.alb.k8s.alibabacloud
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: tea
      type: NodePort
  2. 執行以下命令,部署Deployment和Service。

    kubectl apply -f tea-service.yaml
  3. 執行以下命令,檢查ReadinessGate配置是否生效。

    kubectl get pods -o yaml |grep 'target-health'

    預期輸出:

        -conditionType:target-health.alb.k8s.alibabacloud 
         message:correspondingconditionofpodreadinessgate"target-health.alb.k8s.alibabacLoud" 

相關文檔