部署部署后如何知道Kubernetes服务何时准备就绪?

我正在尝试与服务一起创建部署,然后在部署完成后立即立即访问服务:

> kubectl create -f my-deployment.yaml
> kubectl create -f my-service.yaml
> kubectl rollout status deployment/my-deployment --watch --timeout 10m # This usually takes ~30 seconds

deployment "my-deployment" successfully rolled out

> curl "my-service" # This happens inside a pod,so the service DNS name should be available

有时这是可行的,但是似乎存在竞争情况-如果curl命令执行得太快,则似乎套接字无法连接,并且我得到了连接超时。

根据以下问题,这似乎是如果没有准备好的豆荚时我会得到的行为:What happens when a service receives a request but has no ready pods?

我期望推出的完成意味着可以保证该服务已经准备就绪。不是这样吗?是否有一些Kubernetes命令“等待”服务可用? (我注意到服务没有条件,所以您不能kubectl wait ...)

dhy9062 回答:部署部署后如何知道Kubernetes服务何时准备就绪?

要知道服务是否准备就绪,可以检查是否存在带有服务名称的终结点对象以及该终结点对象是否具有IP。如果有IP,则意味着服务已准备就绪。但是不能保证它仍然不会失败,因为您的基础架构中可能存在网络问题。

管理Pod的K8s原语(例如Deployment)仅考虑Pod的状态以做出决策,例如滚动更新过程中的进展。

例如,在部署滚动更新期间,一个新的容器准备就绪。另一方面,由于任何原因(例如api机器,端点控制器,kube-proxy,iptables或基础结构编程的速度缓慢),服务,网络策略和负载平衡器尚未为新的pod准备就绪。这可能会导致服务中断或后端容量丢失。在极端情况下,如果滚动更新在任何新的替换吊舱实际开始为流量提供服务之前完成,则会导致服务中断。

这是proposal,它是由于上述问题而导致的准备就绪状态。

,

我的答案与您的要求略有不同,但是可能对您有用。 我建议使用Helm来改善您的部署体验。

如何为您提供帮助?

Helm有几个像--wait这样的标志,可以在更新期间应用。继续操作之前,它将确保所有资源都已成功创建。

本文链接:https://www.f2er.com/2779266.html

大家都在问