我知道每个 Kubernetes 节点上的 Kubelet 进程都公开了一个简单的 API 服务器,但我找不到任何文档。
有人知道拥有它的资源吗?
它没有记录在任何地方(据我所知)。我总是最终阅读代码以找出存在哪些端点。
另请注意,与 apiserver 中的 API 不同,无法保证 kubelet API 在版本之间保持稳定。随着时间的推移,我希望它会得到适当的版本控制(并且可能会大摇大摆),届时我们将提供文档和对向后兼容性的承诺。
一些对 curl 有用的 kubelet API:
http://localhost:10255/pods
http://localhost:10255/stats/summary
http://localhost:10255/metrics
有一个名为kubeetctl的新开源项目。
它记录了所有 kubelet API(文档和非文档)。
你可以这样使用:
kubeletctl -s <node_ip> pods
kubeletctl -s <node_ip> metrics cadvisor
运行时,kubeletctl -h
您会看到所有可以使用的命令,它还有子命令,但您需要键入父命令,然后添加-h
,例如kubeletctl metrics -h
.
以下是kubelet 实现 的一些API :
testPaths := map[string]string{
"/attach/{podNamespace}/{podID}/{containerName}": "proxy",
"/attach/{podNamespace}/{podID}/{uid}/{containerName}": "proxy",
"/configz": "proxy",
"/containerLogs/{podNamespace}/{podID}/{containerName}": "proxy",
"/cri/": "proxy",
"/cri/foo": "proxy",
"/debug/flags/v": "proxy",
"/debug/pprof/{subpath:*}": "proxy",
"/exec/{podNamespace}/{podID}/{containerName}": "proxy",
"/exec/{podNamespace}/{podID}/{uid}/{containerName}": "proxy",
"/healthz": "proxy",
"/healthz/log": "proxy",
"/healthz/ping": "proxy",
"/healthz/syncloop": "proxy",
"/logs/": "log",
"/logs/{logpath:*}": "log",
"/metrics": "metrics",
"/metrics/cadvisor": "metrics",
"/metrics/probes": "metrics",
"/metrics/resource/v1alpha1": "metrics",
"/pods/": "proxy",
"/portForward/{podNamespace}/{podID}": "proxy",
"/portForward/{podNamespace}/{podID}/{uid}": "proxy",
"/run/{podNamespace}/{podID}/{containerName}": "proxy",
"/run/{podNamespace}/{podID}/{uid}/{containerName}": "proxy",
"/runningpods/": "proxy",
"/spec/": "spec",
"/stats/": "stats",
"/stats/container": "stats",
"/stats/summary": "stats",
"/stats/{namespace}/{podName}/{uid}/{containerName}": "stats",
"/stats/{podName}/{containerName}": "stats",
}
您可以运行此快速命令来列出所有 api 端点。您需要安装 jq
kubectl get --raw "/" | jq
不记录它是一种说法:不要依赖它,这是一个 wip。某些部分,例如当前作为 kubelet 二进制文件的一部分运行的 cadvisor,实际上更加标准化。如果您确实想使用某些功能但找不到文档,我建议您在 kubernetes sig-node slack channel或sig-node 邮件列表上询问