Pod健康檢查

探針

探針有兩種:

  • livenessProbe:周期性檢查 Pod 資源是否存活,若失敗將重啟容器。
  • readinessProbe:周期性檢查服務(wù)是否可用,若不可用將從 Service 資源中移除。

探針的檢測方法

  • exec:執(zhí)行一段命令。
  • httpGet:發(fā)起一個(gè) http 請求,檢測狀態(tài)碼。2xx 或 3xx 為可用狀態(tài)。
  • tcpSocket:測試某端口是否可以連接。

使用 exec 檢測健康狀態(tài)

如下配置文件,使用 exec 的方式使用 cat /tmp/healthy 檢查容器的存活性。

apiVersion: v1
kind: Pod
metadata:
  name: exec-healthy
spec:
  containers:
    - name: nginx
      image: 172.16.156.128:5000/nginx:1.13
      ports:
        - containerPort: 80
      args: # 執(zhí)行命令,先創(chuàng)建文件,隔 30s 后刪除文件。
        - /bin/bash
        - -c
        - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 60
      livenessProbe:
        exec:
          command:
            - cat
            - /tmp/healthy
        initialDelaySeconds: 5 # 健康檢查的初始間隔
        periodSeconds: 5 # 每 5s 檢查一次

忘了截圖,通過 describe 命令可以看到一些信息,容器在檢測到異常后會(huì)進(jìn)行重啟。

使用 httpGet 檢查健康狀態(tài)

apiVersion: v1
kind: Pod
metadata:
  name: httpget-healthy
spec:
  containers:
    - name: nginx
      image: 172.16.156.128:5000/nginx:1.13
      ports:
        - containerPort: 80
      livenessProbe:
        httpGet:
          path: /index.html
          port: 80
        initialDelaySeconds: 3
        periodSeconds: 3

在容器中移除 /usr/share/nginx/html/index.html 文件后,可通過 kubectl describe 命令看到容器重啟。

image.png

通過 tcpSocket 檢測健康狀態(tài)

      ...
      livenessProbe:
        tcpSocket:
          port: 80
        initialDelaySeconds: 3
        periodSecond: 3

這種形式只是檢測端口存在,演示略。

readiness 探針

如果 readiness 探針沒準(zhǔn)備好,不會(huì)加入到 endpoints 中。

apiVersion: v1
kind: ReplicationController
metadata:
 name: readiness
spec:
 replicas: 2
 selector:
   app: readiness
 template:
   metadata:
     labels:
       app: readiness
   spec:
     containers:
       - name: readiness
         image: 172.16.156.128:5000/nginx:1.13
         ports:
           - containerPort: 80
         readinessProbe:
           httpGet:
             port: 80
             path: /abc.html
           initialDelaySeconds: 3
           periodSeconds: 3

可以發(fā)現(xiàn)兩個(gè)實(shí)例仍然不是 READY 狀態(tài)(READY 0/1)

通過如下命令快速創(chuàng)建一個(gè) svc,通過 describe 查看兩個(gè) Pod 有沒有自動(dòng)掛到 svc endpoints 下。

kubectl expose rc readiness --port 80

通過創(chuàng)建一個(gè)容器中的 nginx 文件,再次查看,如下為兩次的結(jié)果。

image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容