目前我在我的管道中使用这个
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运行了很长时间,阻塞了部署管道。从文档
默认情况下'rollout status'将监视最近一次rollout的状态,直到它完成
我的问题:
1/在部署完成之前,哪些动作是对部署做出贡献的部分;(创建资源,拆除资源?…)
2/readinessProbe和livessprobe对部署时间有贡献吗
这个标准在kubectl
源代码中。部署是"完成的"。如果:
- 未超时
- 它的更新副本计数至少是它想要的副本计数(每个新的pod已经创建)
- 它的当前副本计数最多是它的更新副本计数(每个旧pod已被销毁)
- 它的可用副本计数至少是它的更新副本计数(每个新pod正在运行)
您可以使用kubectl get deployment -w
或kubectl get pod -w
来实时观察实际发生的部署;kubectl get -w
选项监视给定的资源,并在资源发生变化时打印出新的一行。您将看到以下顺序发生(使用默认部署设置,一次一个用于"small";部署):
- 一个新的pod被创建
- 新pod通过探针并准备就绪
- 旧pod被终止
- 旧pod实际退出并被删除
所以要完成kubectl rollout status deployment/...
,所有这些步骤都必须发生-创建新pod,新pod都通过健康检查,旧pod被销毁-对于部署中的每个副本。
kubectl源代码中有另一个参考:https://github.com/kubernetes/kubectl/blob/197123726db24c61aa0f78d1f0ba6e91a2ec2f35/pkg/polymorphichelpers/rollout_status.go L89
如果你看一下日志消息,这是不言自明的。