首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins中的Kubernetes部署状态

Jenkins中的Kubernetes部署状态
EN

Stack Overflow用户
提问于 2018-02-05 16:49:52
回答 3查看 8.7K关注 0票数 3

我正在编写一个Jenkins Global pipeline库,在那里我有一个阶段可以将我的docker镜像部署到K8s集群。因此,在CI过程中构建docker映像后,我将映像提升(部署)到多个环境(从低到高)。因此,为了在运行后获得正确的部署状态

代码语言:javascript
复制
kubectl apply -f Application-k8s-file.yaml

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

代码语言:javascript
复制
kubectl rollout status deployment deployment_name

如果我的部署没有错误,但如果我的部署有一些错误(可能是代码错误,应用程序没有启动),那么这个命令Jenkins会无限地运行(因为k8s会一次又一次地重试重新部署),并且我的Jenkins作业会无限地运行(直到作业超时)。

因此,为了找到一个漏洞,我尝试了一种逻辑,将该命令的超时时间设置为如下所示:

超时=(实例数*活跃度探测时间+实例数* 10)秒

不确定这个计算是否正确。

我的代码片段如下所示

代码语言:javascript
复制
        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“命令直到所有pod都被调度并且旧的pod被完全终止才会给出退出代码0,这有时需要时间。

我基本上想要的是一个最小的计算超时值。

我的K8s文件的参数如下:

代码语言:javascript
复制
   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文档中没有找到任何与此相关的具体内容。有没有人面临同样的挑战?

EN

回答 3

Stack Overflow用户

发布于 2018-06-04 23:15:58

你应该看看progressDeadlineSeconds。一旦超过最后期限,rollout status将退出。

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2020-05-20 16:41:04

您可以像下面这样添加timeout标志,这是文档的https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

代码语言:javascript
复制
kubectl rollout status deployment deployment_name --watch --timeout=5m
票数 2
EN

Stack Overflow用户

发布于 2018-02-05 17:04:50

如果您不想等待卷展栏完成,则可以使用--watch=false

代码语言:javascript
复制
kubectl rollout status deployment deployment_name --watch=false

现在,您可以使用此命令检查特定时间间隔的持续时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48618692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档