kubectl 推出状态 - 命令何时完成?

问题描述 投票:0回答:3

目前我正在我的管道中使用它

kubectl apply -f deployment.yaml && kubectl rollout status -f deployment.yaml

在 yaml 中使用这个

      readinessProbe:
        tcpSocket:
          port: 90
        initialDelaySeconds: 120
        periodSeconds: 10
        timeoutSeconds: 10
        failureThreshold: 1
        successThreshold: 1
      livenessProbe:
        tcpSocket:
          port: 90
        initialDelaySeconds: 120
        periodSeconds: 20
        timeoutSeconds: 2
        failureThreshold: 1
        successThreshold: 1

对我来说,kubectl rollout 运行了很长时间,阻塞了部署管道。来自文档

默认情况下,“推出状态”将监视最新推出的状态,直到完成

我的问题:

1/ 哪些操作是有助于部署“直到完成”的部分(资源创建、资源拆卸?...)

2/ readinessProbe 和 livenessProbe 是否会影响部署时间

kubernetes kubectl
3个回答
7
投票

其标准是

kubectl
中。如果满足以下条件,则部署“完成”:

  • 还没有超时
  • 其更新的副本数量至少是其所需的副本数量(每个新 Pod 均已创建)
  • 其当前副本数最多为其更新副本数(每个旧 Pod 已被销毁)
  • 其可用副本数至少是其更新副本数(每个新 Pod 都在运行)

您可以使用

kubectl get deployment -w
kubectl get pod -w
来实时观看部署的实际情况;
kubectl get -w
选项监视给定的资源并在它们发生更改时打印出新行。您将看到发生以下序列(使用默认部署设置,一次一个用于“小型”部署):

  1. 创建了一个新的 Pod
  2. 新 Pod 通过探测器并准备就绪
  3. 旧 Pod 已终止
  4. 旧的 pod 实际上退出并被删除了

因此,要完成

kubectl rollout status deployment/...
,对于部署中的每个副本,所有这些步骤都必须发生 - 创建新 Pod,新 Pod 全部通过健康检查,旧 Pod 被销毁。


0
投票

有关此内容的另一个参考位于 kubectl 源代码中: https://github.com/kubernetes/kubectl/blob/197123726db24c61aa0f78d1f0ba6e91a2ec2f35/pkg/polymorphichelpers/rollout_status.go#L89

如果您查看日志消息,这是非常不言自明的。


0
投票

截至 2024 年 5 月,它已记录在官方 Kubernetes 文档中,位于 Kubernetes / 文档 / 概念 / 工作负载 / 工作负载管理 / 部署,位于 “完整部署”部分

当 Deployment 具有以下特征时,Kubernetes 将其标记为完成:

  • 与部署关联的所有副本均已更新至您指定的最新版本,这意味着您请求的所有更新均已完成。
  • 与部署关联的所有副本均可用。
  • 部署的旧副本没有正在运行。
© www.soinside.com 2019 - 2024. All rights reserved.