kubernetes之健康狀態檢測


1.說明
容器探針: kubelet 對容器執行的定期診斷
探針執行方式:

LivenessProbe:  判斷容器是否存活 running狀態, 如果不健康kubelet就會殺掉pod,根據重啟策略RestartPolicy進行相應的處理
ReadinessProbe: 判斷容器是否處於可用Ready狀態, 達到ready狀態表示pod可以接受請求,  如果不健康, 從service的后端endpoint列表中把pod隔離出去

診斷的三種方式:

ExecAction:在容器內執行指定命令。如果命令退出時返回碼為 0 則認為診斷成功。
TCPSocketAction:對指定端口上的容器的 IP 地址進行 TCP 檢查。如果端口打開,則診斷被認為是成功的。
HTTPGetAction:對指定的端口和路徑上的容器的 IP 地址執行 HTTP Get 請求。如果響應的狀態碼大於等於200 且小於 400,則診斷被認為是成功的。

為什么會存在兩種探針, 兩種探測探測失敗的方式不同, 一個是重啟容器 一個是不提供服務
2.定義exec執行命令的liveness和readiness探針

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox-deployment
  namespace: default 
  labels:
    app: busybox
spec:
  selector:
    matchLabels:
      app: busybox
  replicas: 1
  template:
    metadata:
      labels:
        app: busybox

    spec:
      containers:
      - name: busybox
        image: busybox:1.28.4
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        args: ["/bin/sh","-c","touch /tmp/healthy;sleep 30; rm -f /tmp/healthy; sleep 3600"]
        livenessProbe:
          exec:
            command: ["cat","/tmp/healthy"]
          initialDelaySeconds: 5
          periodSeconds: 5
        readinessProbe:
          exec:
            command: ["cat","/tmp/healthy"]
          initialDelaySeconds: 5
          periodSeconds: 5

說明: periodSeconds 規定kubelet要每隔5秒執行一次liveness probe。 initialDelaySeconds 告訴kubelet在第一次執行probe之前要的等待5秒鍾。
探針檢測命令是在容器中執行 cat /tmp/healthy 命令。如果命令執行成功,將返回0,kubelet就會認為該容器是活着的並且很健康。如果返回非0值,kubelet就會殺掉這個容器並重啟它。
容器啟動時,執行該命令:/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
在容器生命的最初30秒內有一個 /tmp/healthy 文件,在這30秒內 cat /tmp/healthy命令會返回一個成功的返回碼。30秒后, cat /tmp/healthy 將返回失敗的返回碼。
3.定義HTTP liveness和readiness探針

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default 
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx

    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /index.html
            port: 80
            httpHeaders:
            - name: X-Custom-Header
              value: hello
          initialDelaySeconds: 5
          periodSeconds: 3
        readinessProbe:
          httpGet:
            path: /index.html
            port: 80
            httpHeaders:
            - name: X-Custom-Header
              value: hello
          initialDelaySeconds: 5
          periodSeconds: 3        

4.定義TCP liveness和readiness探針

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default 
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx

    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        livenessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 3
        readinessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 3

5.Probe詳細配置:

initialDelaySeconds:容器啟動后第一次執行探測是需要等待多少秒。
periodSeconds:執行探測的頻率。默認是10秒,最小1秒。
timeoutSeconds:探測超時時間。默認1秒,最小1秒。
successThreshold:探測失敗后,最少連續探測成功多少次才被認定為成功。默認是1。對於liveness必須是1。最小值是1。
failureThreshold:探測成功后,最少連續探測失敗多少次才被認定為失敗。默認是3。最小值是1。
HTTP probe 中可以給 httpGet設置其他配置項:

6.httpget其它配置項

host:連接的主機名,默認連接到pod的IP。你可能想在http header中設置"Host"而不是使用IP。
scheme:連接使用的schema,默認HTTP。
path: 訪問的HTTP server的path。
httpHeaders:自定義請求的header。HTTP運行重復的header。
port:訪問的容器的端口名字或者端口號。端口號必須介於1和65535之間。

參考文檔:https://www.jianshu.com/p/1919f8e2f12d


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM