kubernetes - 有没有办法从 Kubernetes 中的服务对象获取活动日志?
问题描述
我有以下情况(这是我提出问题的动机,而不是问题本身):
- 我有一个接受用户上传的网络应用程序。
- 用户通过 Ingress 访问应用程序,
- 然后是服务,
- 然后是具有两个 Pod 的部署。
- 每个 Pod 中包含的应用程序。
- 有时上传失败:
- 我可以在 Pod 的日志中看到上传一切正常。
- 我什至可以看到用户上传的数据。
- Pod 中只有正常的日志。
- 但入口报告 HTTP 500 错误。
- 并且用户会看到 HTTP 500 错误 - 对等方重置连接。
如果 Pod 看起来一切正常,但 ingress 抱怨,那么我应该检查中间人,即服务。然后我意识到没有简单的方法可以从服务中获取日志。
所以这是我的问题:
- 如何从 Service 对象读取日志?我的意思是活动日志,而不是部署事件。
- 它们存在吗?
解决方案
K8s 中唯一产生日志的资源是 Pod!Pod 导致容器的创建,而容器本身又导致在 K8s 节点上创建 Linux 进程。这些进程写入由容器运行时“获取”并可供 K8s 使用的日志,例如,当您运行kubectl logs
.
因此,只有 Pod 支持的 K8s 资源会产生日志,例如 Deployment、Daemonsets、StatefulSets 和 Jobs。
服务只是配置网络流量如何路由到 Pod 的逻辑资源。因此,在某种程度上,它们具有底层 Pod,但不会产生任何额外的日志输出。Service 资源唯一有形的结果是 K8s 节点上的 iptables 规则,它定义了流量必须如何从 Service IP 路由到底层 Pod 的 IP。
要解决与 Ingress 相关的问题,您可能会从通常作为部署部署并因此由 Pod 支持的入口控制器的日志中获得进一步的见解。
推荐阅读
- json - 根据条件从数组中删除对象
- swift - SwiftUI - 使用带有枚举的选择器和提供的值并返回正确的 tag()
- php - 如何使用 Nestbost/Carbon 将日期时间字符串解析为日期?
- python - 如何创建可在 python 中选择的动态装饰(包装)函数?
- javascript - Ionic Reactjs 解析错误:基于选择框渲染元素时需要表达式
- node.js - Express 中间件如何获取 post 请求以编写逻辑
- data-structures - 日志搜索服务的数据结构?
- precision - 程序分析精度
- java - 如何处理由于 Selenium Webdriver 中的服务器响应时间而导致的脚本失败?
- html - Css - 按钮上的悬停效果不起作用