如何检测Kubernetes应用程序是否真正;准备好了吗;?

如何检测Kubernetes应用程序是否真正;准备好了吗;?,kubernetes,Kubernetes,我在Kubernetes上有一个web应用程序,可以通过用户操作“旋转”。该用户操作触发应用部署、服务和入口的python脚本。前端显示一个微调器,直到应用程序准备好进行连接。我目前正在检查部署的状态,并检查“可用”状态是否为“真”,此时我隐藏微调器并加载应用程序 问题是,每隔一段时间,用户就会遇到503:暂时不可用错误。浏览器快速刷新修复了问题,因此这似乎是某种竞争条件 我的问题是,如果部署被标记为“可用”,为什么会出现503错误?这是否意味着入口或服务有时需要更长的时间来初始化 我当前在部署

我在Kubernetes上有一个web应用程序,可以通过用户操作“旋转”。该用户操作触发应用部署、服务和入口的python脚本。前端显示一个微调器,直到应用程序准备好进行连接。我目前正在检查部署的状态,并检查“可用”状态是否为“真”,此时我隐藏微调器并加载应用程序

问题是,每隔一段时间,用户就会遇到
503:暂时不可用
错误。浏览器快速刷新修复了问题,因此这似乎是某种竞争条件

我的问题是,如果部署被标记为“可用”,为什么会出现503错误?这是否意味着入口或服务有时需要更长的时间来初始化

我当前在部署的应用程序容器上有以下探测器:

      readinessProbe:
        httpGet:
          path: /
          port: 3000
          periodSeconds: 5
          initialDelaySeconds: 5
      livenessProbe:
        httpGet:
          path: /
          port: 3000
          periodSeconds: 5
          initialDelaySeconds: 5

我正在为新创建的部署使用Azure AKS和ingress nginx

,请检查这些。两者都应该是正确的,秩序并不重要

  • kubectl get deployment-ojson | jq”.status.availableReplicas“
    等于所需的值,或
    =1
    ,由您选择
  • kubectl get-ingres-ojson | jq“.status.loadBalancer”
    不是空的。这意味着为您的主机初始化了入口控制器
用于更新部署(任何需要重新创建POD的内容)。两者都应该是正确的,秩序并不重要

  • kubectl get deployment-ojson | jq“.status.availableReplicas”
    等于所需

  • kubectl get deployment-ojson | jq“.status.updatedReplicas”
    等于所需

    入口已在此处初始化


缺少上下文:您使用什么类型的CNI,什么类型的入口?我使用的是Azure AKS和入口Nginx下一次(或相反)部署时是否可以选择检查pod状态?此外,入口可能不会立即更新,所以您可以得出结论,在健康检查成功后仅5秒,服务就启动并运行了。HC历史记录也可以通过k8s api获得。目前我正在检查部署状态。如果“可用”条件为“True”,则我假设应用程序已准备好接受连接。是否有更好的方法通过API手动执行“健康检查”?可能与此相关-仅检查
.conditions
type=“Available”
?它肯定不包括进入状态。我不确定更新流程,它可能会一直可用,因为会一直有健康的播客,但同时会有一个旧版本或新旧混合版本。保证随时接受流量。2.保证所有版本都已更新并准备好接受流量。