簡體   English   中英

Kubernetes,活力探測失敗但是pod處於Running狀態

[英]Kubernetes , liveness probe is failing but pod in Running state

我正在嘗試用kubernetes進行藍綠色部署,我已經按照它, https: //www.ianlewis.org/en/bluegreen-deployments-kubernetes,沒關系。 我添加了一個活動探針來執行健康檢查,

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: flask-1.3
spec:
  replicas: 2
  template:
    metadata:
      labels:
        name: app
        version: "1.3"
    spec:
      containers: 
        - name: appflask
          image: 192.168.99.100:5000/fapp:1.2
          livenessProbe:
            httpGet:
             path: /index2
             port: 5000
            failureThreshold: 1
            periodSeconds: 1
            initialDelaySeconds: 1
          ports:
            - name: http
              containerPort: 5000

路徑“index2”不存在,我想測試失敗的部署。 問題是我執行時:

 kubectl get pods -o wide

幾秒鍾之一其中一個豆莢狀態為“RUNNING”

NAME                         READY   STATUS             RESTARTS   AGE     IP             NODE    NOMINATED NODE   READINESS GATES

flask-1.3-6c644b8648-878qz   0/1     CrashLoopBackOff   6          6m19s   10.244.1.250   node    <none>           <none>
flask-1.3-6c644b8648-t6qhv   0/1     CrashLoopBackOff   7          6m19s   10.244.2.230   nod2e   <none>           <none>

幾秒鍾后,當一個生命失敗時,一個吊艙正在運行:

NAME                         READY   STATUS             RESTARTS   AGE 

    IP             NODE    NOMINATED NODE   READINESS GATES

   flask-1.3-6c644b8648-878qz   1/1     Running            7          6m20s   10.244.1.250   node    <none>           <none>
    flask-1.3-6c644b8648-t6qhv   0/1     CrashLoopBackOff   7          6m20s   10.244.2.230   nod2e   <none>           <none>

在運行它回到CrashLoopBackOff后,問題是,為什么如果livenesprobe總是失敗,它會在幾秒鍾內保持運行?

提前致謝

你應該看看Readiness探針 ,或者兩者都看。

准備和活性探針可以並行用於同一容器。 使用兩者可以確保流量不會到達未准備好的容器,並且容器在失敗時重新啟動。

活動探針會檢查您的應用程序是否在您已經運行的pod中處於健康狀態。

准備情況探測器將實際檢查您的pod是否已准備好接收流量。 因此,如果沒有/ index2端點,它將永遠不會顯示為正在運行

發生在你身上的是:

當您第一次啟動pod(或容器)時,它將啟動並進入“運行”狀態。 現在,如果容器中沒有進程正在運行,或者存在非連續進程(比如sleep 100),則當此進程完成時,kubernetes將考慮完成此pod。

現在,由於您有一個部署,即將保持一定數量的副本運行,它會重新創建pod。 但同樣,沒有進程在運行,所以再次完成。 這是一個無限循環。

如果要保持pod正常運行,即使內部沒有進程,也可以在yaml文件中傳遞參數tty: true

apiVersion: v1
kind: Pod
metadata:
  name: debian
  labels:
    app: debian
spec:
  containers:
  - name: debian
    image: debian
    tty: true       # this line will keep the terminal open

如果您在沒有tty: true情況下運行上面的pod,那么這將會發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM