全部產品
Search
文件中心

Elastic Container Instance:使用探針對容器進行健全狀態檢查

更新時間:Jul 06, 2024

Liveness Probe和Readiness Probe是用於檢測容器狀態的機制,其中Liveness Probe用於檢測容器是否正常運行,Readiness Probe用於檢測容器是否已經就緒。本文介紹如何配置Liveness Probe和Readiness Probe對容器進行健全狀態檢查,以便Kubernetes可以更好地監控和管理容器的運行狀態,確保服務的高可用性和穩定性。

功能說明

在Kubernetes中,容器的健全狀態檢查由kubelet定期執行。kubelet通過Liveness Probe和Readiness Probe來檢查容器的狀態和運行情況。

探針

說明

應用情境

應用存活探針( Liveness Probe)

用於檢查容器是否正常運行。如果檢查成功,則表示容器正常運行。如果檢查失敗,系統會根據配置的容器重啟策略進行相應的處理。如果未配置該探針,則預設容器一直正常運行。

  • 當應用程式處於運行狀態但無法進行進一步操作時,Liveness Probe將捕獲到deadlock,重啟對應的容器,使得應用程式在存在bug的情況下依然能夠運行。

  • 長時間啟動並執行應用程式最終可能會轉換到broken狀態,此時除了重新啟動,無法恢複。Liveness Probe可以檢測並補救這種情況。

應用業務探針(Readiness Probe)

用於檢查容器是否已經就緒,可以為請求提供服務。如果檢查成功,則表示容器已經準備就緒,可以接收業務請求。如果檢查失敗,則表示容器沒有準備就緒,系統將停止向該容器發送任何請求,直至重新檢查成功。

如果應用程式暫時無法對外部流量提供服務,例如應用程式需要在啟動期間載入大量資料或設定檔,此時,如果不想終止應用程式,也不想向其發送請求,可以通過Readiness Probe來檢測和緩解這種情況。

配置樣本

您可以通過容器的livenessProbereadinessProbe欄位來設定Liveness Probe或者Readiness Probe。更多資訊,請參見配置存活、就緒和啟動探測器

樣本一:設定Liveness Probe

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80
        args:
        - /bin/sh
        - -c
        - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
       # 設定Liveness Probe,通過命令列方式進行檢查
        livenessProbe:    
          exec:           
            command:
            - cat
            - /tmp/healthy
          initialDelaySeconds: 5    # 容器啟動5秒後開始檢查
          periodSeconds: 5     # 每5秒執行一次檢查

樣本二:設定Readiness Probe

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80
        args:
        - /bin/sh
        - -c
        - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
        # 設定Readiness Probe,通過命令列方式進行檢查
        readinessProbe:
          exec:           
            command:
            - cat
            - /tmp/healthy
          initialDelaySeconds: 5    # 容器啟動5秒後開始檢查
          periodSeconds: 5     # 每5秒執行一次檢查