当前位置: 首页 > 知识库问答 >
问题:

Azure上的Kubernetes-活性和就绪探针失败-活性探针失败,连接失败:连接被拒绝

巢宏富
2023-03-14
apiVersion: apps/v1
kind: Deployment
metadata:
   name: myApp
spec:
   ... 
   template:
     metadata:
       labels:
         app: myApp
     spec:
        ...
        containers:
          - name: myApp
            ...
            ports:
              - containerPort: 5000          
            ...
            readinessProbe:
              tcpSocket:
                  port: 5000
              initialDelaySeconds: 300
              periodSeconds: 5
              successThreshold: 1
              failureThreshold: 3
            livenessProbe:
               tcpSocket:
                  port: 5000
               periodSeconds: 30 
               initialDelaySeconds: 300
               successThreshold: 1
               failureThreshold: 3

...

当我执行部署并描述pod时,我看到在输出底部的'Events'下列出了以下内容:

  Type     Reason     Age                   From                             Message
  ----     ------     ----                  ----                             -------
  Warning  Unhealthy  2m1s (x288 over 86m)  kubelet, aks-vm-id-appears-here  Readiness probe failed: dial tcp 10.123.1.23:5000: connect: connection refused

(这是令人困惑的,因为它将年龄声明为2m1s-但initialdelayseconds大于这个值-所以我不确定它为什么将这个值报告为年龄)

就绪探测随后以相同错误失败。IP号与我的pod的IP匹配,我在pod描述中的containers下看到了这一点:

Containers:
....
Port:           5000/TCP

活性和就绪探针的失败导致pod不断终止和重新启动。

该应用程序有一个默认的index.html页面,所以我相信如果健康探测能够连接,它应该会收到200个响应。

因为健康探测失败,所以pod IP没有分配给endpoints对象,因此没有针对服务分配。

我不明白为什么健康探测器不能连接?在我看来,它应该尝试连接10.123.1.23:5000的IP。

这是可能的,端口需要很长的时间,超过300s成为开放,但我不知道一个方法,我可以检查。如果我在pod上输入bash会话,watch不可用(我读到watchss-lnt可用于检查端口可用性)。

下面的答案建议增加initialdelayseconds,但我已经尝试过了-https://stackoverflow.com/A/51932875/1549918

我看到了这个问题--但资源利用率(例如CPU/RAM)并不是问题的活跃度和准备状态探测连接被拒绝

更新

如果我从pod的副本卷曲到https://10.123.1.23:5000,我会得到一个类似的错误(无法连接到...the ip...port 5000:Connection refied)。为什么这会失败?我读到的一些东西表明,尝试从另一个pod连接可能也表明健康探针的可达性。

共有1个答案

雷方伟
2023-03-14

如果您不确定应用程序是否正确启动,请将其替换为已知的良好映像。例如httpd

将端口更改为80,将映像更改为httpd。

您可能还希望增加健康检查的超时,因为它默认为1秒到TimeoutSeconds=5

此外,如果您的映像是一个web应用程序,那么最好使用http探测

 类似资料:
  • 我使用的是标准的skydns RC/SVC YAMLS。 吊舱描述: (etcd) 我还将放入kube2sky容器中,ca.crt与服务器上的ca.crt匹配。

  • 当我试图为我的awx_web容器设置活跃度和就绪度prob时,我总是得到这个错误

  • 在上使用helm upgrade命令运行容器时,出现了以下错误: “准备探测失败:获取http://172.17.0.6:3003/:拨号tcp 172.17.0.6:3003:GetSockopt:连接拒绝”。

  • 我在k8s https://github.com/paveldemyanenko/kubernetes-keycloak/tree/master/kubernetes中准备了一些Keycloak的基本示例,在这里我遇到了一个问题,当我在部署结束时部署Keycloak Helm Chart时,我会出现这样一个错误: 配置有什么问题,为什么它不能检查就绪探测?

  • 我试图在Azure中新部署的aks Kuberbetes(1.9.6)集群中部署zalenium helm chart。但我不让它起作用。豆荚给出了下面的日志: 描述pod给出:警告不健康4M(x12超过6M)kubelet,aks-agentpool-93668098-0就绪探测失败:HTTP探测失败,状态代码:502 Zalenium图像版本:Dosel/Zalenium:3 如果使用Kube

  • 如何为我的spring boot应用程序编写kubernetes Readision probe(启动大约需要20秒)?我试着从配置活跃度、就绪和启动探测中学习,但我不知道Kubernetes是如何将状态代码200计算为成功的