问题描述
在一大堆精心编排的 k8s pod 中,我有以下两个感兴趣的 pod:
- 附加到 PV 的 Elasticsearch pod
- 一个基于 tomcat 的应用程序 pod,作为所有其他 pod 的管理员
我希望能够在 pod #2 中运行的应用程序上查询和显示 PV(附加到 pod #1)的非常少/基本的磁盘可用性和使用统计数据
无需在我的 ES pod 中运行网络服务器,是否可以实现这一点?由于 ES 可能负载非常大,我不想在其中添加网络服务器。
附加到 ES pod 的 PV 也保存日志。所以我想避免任何基于日志提取的解决方案来实现将这些信息传递到 pod #2。
解决方法
无论您身在何处,都需要从 kubernetes 集群 API 获取 PV 详细信息。
从 Pod 内访问 Kubernetes 集群 API
从 Pod 内访问 API 时,对 API 服务器的定位和身份验证与上述外部客户端情况略有不同。
从 Pod 使用 Kubernetes API 的最简单方法是使用 official client libraries 之一。这些库可以自动发现 API 服务器并进行身份验证。
使用官方客户端库
从 Pod 内连接到 Kubernetes API 的推荐方法是:
-
对于 Go 客户端,请使用官方 Go client library。 rest.InClusterConfig() 函数自动处理 API 主机发现和身份验证。见an example here。
-
对于 Python 客户端,请使用官方 Python client library。 config.load_incluster_config() 函数自动处理 API 主机发现和身份验证。见an example here。
-
还有许多其他可用的库,请参阅 Client Libraries 页面。
在每种情况下,Pod 的服务帐户凭据都用于与 API 服务器安全通信。