如何配置 Kubernetes 就緒和活動探測器

本文介紹了 Kubernetes 中的就緒和活動探測器,以及如何為容器配置它們。

Kubernetes 中的探針是什麼?

由於多種原因,應用程序可能會變得不可靠。 您需要確保應用程序處於所需狀態。 Kubernetes 提供了一種檢查容器狀態的方法。 這種健康診斷稱為探測。

輪詢容器的方法

kubelet 使用以下方式之一探測您的容器:

1.行政人員

Kubelet 在容器內運行一個命令。 結果取決於命令的退出代碼。 退出代碼 0 表示診斷成功。

2.http獲取

Kubelet 發送一個 GET 請求到容器IP地址的指定端口。 200 到 400(含)之間的響應代碼表示診斷成功。

3.TCP套接字

Kubelet 嘗試在容器 IP 地址的指定端口上建立 TCP 連接。 已建立的連接表示診斷成功。

探頭類型

Kubernetes 中有三種類型的探針:

  1. 生命探測

  2. 準備探頭

  3. 開始探測

啟動探測是最近添加到此列表中的,本文不涉及。

生命探測

生命探測器檢測容器是否存活。 這用於確保 pod 的可用性。 如果活動探測成功,kubelet 將不執行任何操作,因為容器已經處於所需狀態。 如果失敗,kubelet 將刪除容器,後續操作取決於規範重置政策容器的

為什麼要使用 Liveness 探針?

Kubelet 通過查看容器的狀態來驗證容器的健康狀況 PID 1 . 問題是狀態 PID 1 它不反映容器子進程的狀態。 如果您只有一個流程容器,則無需指定活動探測器。 如果沒有,則必須使用生命探測器。

準備探頭

就緒探測器檢測容器是否準備好為傳入的網絡請求提供服務。 您不想將流量發送到尚未準備就緒的 pod。 如果就緒探測失敗,控制面板會停止到 pod 的網絡流量。 在 pod 上運行第一個就緒探測之前,默認就緒狀態設置為 Failure . 就緒探測在容器的整個生命週期中定期運行。

為什麼要使用準備探頭?

網絡流量應在所有子進程啟動後發送到容器。 如果沒有就緒探測,Kubernetes 會盡快將網絡流量發送到容器 PID 1 開始。 這並不意味著子進程已經啟動。 在此狀態下向容器發送網絡流量可能會導致錯誤。 每次重新啟動容器或創建應用程序的新實例時,應用程序都會遇到錯誤。

如何在 Kubernetes 中設置探針

探針定義在 pods.spec.containers 場地。 每個探針都有以下五個參數:

  1. 初始延遲秒:這指定了容器啟動後等待探測運行的時間(以秒為單位)。 默認值為 0。

  2. 期間秒:這指定了每個定期測試之間的時間間隔。 默認值為 10。

  3. 超時秒數:這指定了每個探測應等待響應的時間。 默認值為 0。

  4. 成功門檻:這指定指示成功診斷的成功探測的數量。 預定值為 1。

  5. 失敗閾值:這指定指示診斷失敗的失敗探測的計數。 默認值為 3。

所有這些參數都用於配置探測器。 要遵循本指南,您需要配置一個 Kubernetes 集群和一個 kubectl 客戶端。 您可以使用 Vultr Kubernetes Engine 在雲端部署 Kubernetes 集群並測試探針。 設置 kubectl 在你的機器上繼續前進。

創建生命探測器

看下面的配置文件:

                      
                        apiVersion: v1

kind: Pod

metadata:

  labels:

    test: liveness

  name: liveness-demo

spec:

  containers:

  - name: basic-container

    image: registry.k8s.io/busybox

    args:

    - /bin/sh

    - -c

    - touch /tmp/healthy; sleep 20; rm -f /tmp/healthy; sleep 1000

    livenessProbe:

      exec:

        command:

        - cat

        - /tmp/healthy

      initialDelaySeconds: 5

      periodSeconds: 10

                      
                    

此配置創建單個容器並定義活動探測器。 該探頭使用 exec 做出診斷。 創建容器後, touch /tmp/healthy; sleep 20; rm -f /tmp/healthy; sleep 100 命令被執行。 這個命令:

  • 創建一個 /tmp/healthy 程序

  • 等待 20 秒。

  • 刪除 /tmp/healthy 程序。

  • 讓容器再存活 1000 秒。

注意 livenessProbe 下的字段 containers 場地。 這是定義活動探測器的地方。 這裡,activity probe 會在容器創建後等待 5 秒,以 10 秒的時間間隔開始定期診斷。 使用 exec 形式執行探測。 如果命令 cat /tmp/healthy 返回0,探測成功。

創建吊艙:

                      
                        kubectl apply -f config.yaml

                      
                    

檢查 pod 事件:

                      
                        kubectl describe liveness-demo

                      
                    

在輸出的末尾,您可以看到類似以下內容:

                      
                        Events:

    Type    Reason     Age   From               Message

      ----    ------     ----  ----               -------

    Normal  Scheduled  25s   default-scheduler  Successfully assigned default/liveness-demo to probescluster-3a397dd3c5ec

    Normal  Pulling    25s   kubelet            Pulling image "registry.k8s.io/busybox"

    Normal  Pulled     22s   kubelet            Successfully pulled image "registry.k8s.io/busybox" in 3.292188263s

    Normal  Created    22s   kubelet            Created container basic-container

    Normal  Started    22s   kubelet            Started container basic-container

                      
                    

到目前為止,膠囊是健康的,可以正常工作。 25 秒後,再次查看 pod 事件:

                      
                        kubectl apply -f config.yaml

                      
                    

你可以期待看到類似的東西:

                      
                        Events:

    Type     Reason     Age               From               Message

      ----     ------     ----              ----               -------

    Normal   Scheduled  56s               default-scheduler  Successfully assigned default/liveness-demo to probescluster-3a397dd3c5ec

    Normal   Pulling    55s               kubelet            Pulling image "registry.k8s.io/busybox"

    Normal   Pulled     52s               kubelet            Successfully pulled image "registry.k8s.io/busybox" in 3.292188263s

    Normal   Created    52s               kubelet            Created container basic-container

    Normal   Started    52s               kubelet            Started container basic-container

    Warning  Unhealthy  5s (x3 over 25s)  kubelet            Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory

    Normal   Killing    5s                kubelet            Container basic-container failed liveness probe, will be restarted

                      
                    

在輸出中可以看到,5秒前,activity探測失敗,導致kubectl重啟容器。 現在檢查 pod 的狀態:

                      
                        kubectl get pod liveness-demo

                      
                    

預期表現:

                      
                        NAME            READY   STATUS    RESTARTS     AGE

liveness-demo   1/1     Running   1 (4s ago)   85s

                      
                    

請注意,重置現場表演 1 這確認容器已重新啟動。

設置準備探頭

就緒探測器設置類似於活動探測器設置。 您可以通過在配置文件中添加以下內容來為就緒檢查創建類似的探測器 pods.spec.containers 場地。

                      
                            readinessProbe:

      exec:

        command:

        - cat

        - /tmp/healthy

      initialDelaySeconds: 5

      periodSeconds: 10

                      
                    

結論

本文介紹了 Kubernetes 就緒和活動探測器、它們的使用以及如何配置它們。 有關詳細信息,請參閱配置活動、就緒和調試探測在 kubernetes.io 上。

文章標題 名稱(可選) 電子郵件(可選) 描述

發送建議

相關文章