目前我正在我的管道中使用它
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 是否会影响部署时间
其标准是在
kubectl
源中。如果满足以下条件,则部署“完成”:
您可以使用
kubectl get deployment -w
或 kubectl get pod -w
来实时观看部署的实际情况; kubectl get -w
选项监视给定的资源并在它们发生更改时打印出新行。您将看到发生以下序列(使用默认部署设置,一次一个用于“小型”部署):
因此,要完成
kubectl rollout status deployment/...
,对于部署中的每个副本,所有这些步骤都必须发生 - 创建新 Pod,新 Pod 全部通过健康检查,旧 Pod 被销毁。
有关此内容的另一个参考位于 kubectl 源代码中: https://github.com/kubernetes/kubectl/blob/197123726db24c61aa0f78d1f0ba6e91a2ec2f35/pkg/polymorphichelpers/rollout_status.go#L89
如果您查看日志消息,这是非常不言自明的。
截至 2024 年 5 月,它已记录在官方 Kubernetes 文档中,位于 Kubernetes / 文档 / 概念 / 工作负载 / 工作负载管理 / 部署,位于 “完整部署”部分:
当 Deployment 具有以下特征时,Kubernetes 将其标记为完成:
- 与部署关联的所有副本均已更新至您指定的最新版本,这意味着您请求的所有更新均已完成。
- 与部署关联的所有副本均可用。
- 部署的旧副本没有正在运行。