azure - Azure 上的 Kubernetes - 活跃度和就绪度探测失败 - 活跃度探测失败并连接:连接被拒绝
问题描述
我是 Azure 部署、kubernetes 和 HA 实现的菜鸟。当我将运行状况探测作为应用程序部署的一部分实施时,运行状况探测失败,当我尝试通过 URL 访问应用程序时出现 503(内部服务器错误)或 502(错误网关)错误。当我删除运行状况探测时,我可以使用其 URL 成功访问该应用程序。
在实施 Azure devops 管道使用的运行状况探测时,我使用以下 yaml 部署配置。该应用程序在 5 分钟内即可使用,因此我将initialDelaySeconds
运行状况探测的设置为300s
.
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 时,我会在输出底部的“事件”下看到以下内容:
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 匹配,我Containers
在 pod 描述中看到了这一点:
Containers:
....
Port: 5000/TCP
liveness 和 readiness 探针的失败会导致 Pod 不断地被终止和重新启动。
该应用程序有一个默认index.html
页面,所以我相信如果健康探测能够连接,它应该会收到 200 响应。
由于运行状况探测失败,因此 pod IP 不会分配给端点对象,因此不会分配给服务。
如果我从部署中注释掉readinessProbe
and livenessProbe
,当我通过浏览器使用 URL 时,应用程序会成功运行,并且 pod IP 会成功分配为服务可以与之通信的端点。端点地址的格式为 10.123.1.23:5000 - 即端口 5000 似乎是 pod 的正确端口。
我不明白为什么健康探测器无法连接?对我来说,它应该尝试连接一个看起来像 10.123.1.23:5000 的 IP,这看起来是正确的。
端口可能需要超过 300 秒才能打开,但我不知道有什么方法可以检查。如果我在 pod 上输入 bash 会话,watch
则不可用(我读到它watch ss -lnt
可用于检查端口可用性)。
以下答案建议增加initialDelaySeconds
,但我已经尝试过 - https://stackoverflow.com/a/51932875/1549918
我看到了这个问题 - 但资源利用率(例如 CPU/RAM)不是问题 活跃度和就绪性探测连接被拒绝
更新
如果我从 pod 的副本 curl 到https://10.123.1.23:5000,我会收到类似的错误 ( Failed to connect to ...the IP.. port 5000: Connection refused
)。为什么这会失败?我读到了一些内容,表明尝试从另一个 pod 进行此连接也可能表明运行状况探测的可达性。
解决方案
推荐阅读
- c++ - C++:添加一个回调,将在 std::future 完成时执行
- mongodb - 如果我使用 MongoDB,如何 24/7 托管我的不和谐机器人
- c++ - 生成随机长长的正确方法?
- r - 如何从 csv 文件中获取数据?
- python - 使用 send_from_directory 和文件名从服务器位置下载文件
- javascript - 使用汇总导入 firebaseui
- reactjs - Cognito 访问令牌 + API 网关身份验证 - (React js 上的托管 UI 与 Auth 方法)从同一会话返回不同的值
- javascript - 即使我将所有文件都包含在其中,bootrap down 按钮也不起作用
- f# - 二维列表的递归函数
- arrays - How do I split a string in groups of 2 characters in powershell without delimiters?