Liveness:nginx
做用:用於判斷容器是否須要重啓。探測均是由kubelet執行。數據庫
場景:pod中有多個container,長時間的運行後,某個container異常了但仍是running狀態(例如,程序死鎖)致使總體服務不可用,可是pod狀態仍是running狀態,須要重啓一下container。後端
例如,pod中包含一個nginx container,一個business container,nginx負責接收客戶請求,business負責具體業務處理,當business container宕掉以後,pod運行狀態仍是正常,但服務已經不可用。此時應該重啓pod,因此liveness應該加兩個,分別給每一個container都加上。api
實現:緩存
apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness image: k8s.gcr.io/busybox args: - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5
http request: apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-http spec: containers: - name: liveness image: k8s.gcr.io/liveness args: - /server livenessProbe: httpGet: path: /healthz port: 8080 httpHeaders: - name: Custom-Header value: Awesome initialDelaySeconds: 3 periodSeconds: 3
TCP prob: apiVersion: v1 kind: Pod metadata: name: goproxy labels: app: goproxy spec: containers: - name: goproxy image: k8s.gcr.io/goproxy:0.1 ports: - containerPort: 8080 readinessProbe: tcpSocket: port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 15 periodSeconds: 20
Readiness:bash
做用:用於判斷pod是否已經能夠被訪問,若是請求失敗,會從service的後端服務列表中移除。app
場景:服務須要依賴大量的緩存數據,可是數據並無load完成,此時服務是不可用的;服務依賴另外一個進程的啓動完成,在徹底啓動完成以前,服務不可用;服務依賴數據庫等組件,依賴沒有所有啓動完成,服務不可用。tcp
實現:和Liveness同樣ide
readinessProbe:rest
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
通用參數解釋:
initialDelaySeconds: 在容器啓動後,liveness 或 readiness 初始化以前的延遲時間。
periodSeconds: 請求探針的頻率,默認10秒,最小1秒。
timeoutSeconds: 請求超時時長,默認1秒,最小1秒
successThreshold: 請求失敗後,須要最小的連續成功次數,默認一次. liveness 只能是一次(readiness能夠大於1),最小值是1.
failureThreshold: 當探針請求失敗後,嘗試重啓的最大次數. Giving up in case of liveness probe means restarting the Pod. In case of readiness probe the Pod will be marked Unready. Defaults to 3. Minimum value is 1.
Http request 類型獨有參數:
host: 要鏈接的主機名稱, 默認是pod的ip. You probably want to set 「Host」 in httpHeaders instead.
scheme: 使用哪一種協議(HTTP或HTTPS),默認HTTP
path: 訪問的服務地址
httpHeaders: 指定請求頭. HTTP allows repeated headers.
port: 訪問容器的端口號,[1,65535]
缺陷:
readiness和liveness,都不支持多端口(TCP方式),多請求地址驗證(http)的驗證,若是鏡像不規範,裏面打有多個應用程序,則不能進行多個進程的監聽,目前1.15版本是不支持的,不排除之後會fix。