簡體   English   中英

Jenkins 中的 Kubernetes 部署狀態

[英]Kubernetes deployment status in Jenkins

我正在編寫一個 Jenkins Global 管道庫,在那里我有一個階段可以將我的 docker 映像部署到 K8s 集群。 因此,在 CI 過程中構建我的 docker 鏡像后,我將鏡像提升(部署)到多個環境(按順序從低到高)。 所以,要在運行后獲得正確的部署狀態

kubectl apply -f Application-k8s-file.yaml

我在 shell 步驟中使用了以下命令。

kubectl rollout status deployment deployment_name

如果我的部署沒有錯誤但如果我的部署有一些錯誤(可能是一些代碼錯誤,應用程序沒有啟動)那么這個命令kubectl rollout status deployment <deployment name>無限運行(因為 k8s 一次又一次地重試重新部署)並且我的 Jenkins 作業無限運行(直到作業超時)。

因此,為了找到一個 hack,我嘗試了一種邏輯,將超時置於此命令上,計算如下:

超時 =(pod 數 * 活性探測時間 + pod 數 * 10)秒

不確定這個計算是否正確。

我的代碼片段看起來像這樣

        sh(returnStdout: true,script:"#!/bin/sh +e\n timeout --preserve-status ${timeout_value} kubectl rollout status deployment ${deploymentName} --kubeconfig='/opt/kubernetes-secrets/${env}/kubeconfig' 2>tmpfile; echo \$? > tmpfile1")
    def readThisFile = readFile "tmpfile1.txt"

def var=readThisFile.toInteger()

           if(var==0)
           {
             echo "deployment successful"
           }
       else{"do something else"}

這最初效果很好,但后來我發現 k8s“kubectl rollout status deployment”命令不會給出退出代碼 0,直到所有 pod 都被安排好並且舊的 pod 完全終止,這有時需要時間。

我基本上想要的是一個最小的計算超時值。

我的 K8s 文件有這樣的參數:

   spec:
     minReadySeconds: 30

    livenessProbe:
      httpGet:
        path: /ping
        port: 80
      initialDelaySeconds: 45
      periodSeconds: 5
      timeoutSeconds: 60
    name: test-dummyservice
    ports:
    - containerPort: 80
    readinessProbe:
      httpGet:
        path: /health
        port: 80
      initialDelaySeconds: 60
      periodSeconds: 120
      timeoutSeconds: 60

我在 K8s 文檔中沒有找到任何與此相關的特定內容。 有人面臨同樣的挑戰嗎?

你應該看看progressDeadlineSeconds 一旦超過最后期限, rollout status將退出。

kubectl rollout status deployment ng                                                                                                                      
Waiting for rollout to finish: 2 out of 7 new replicas have been updated...
error: deployment "ng" exceeded its progress deadline

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#progress-deadline-seconds

您可以添加如下timeout標志,這是文檔https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

kubectl rollout status deployment deployment_name --watch --timeout=5m

如果您不想等待部署完成,則可以使用--watch=false

kubectl rollout status deployment deployment_name --watch=false

現在,您可以使用此命令檢查具有特定間隔的持續時間。

暫無
暫無

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

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