【问题标题】:List all Kubelet path endpoints列出所有 Kubelet 路径端点
【发布时间】:2022-01-11 00:17:51
【问题描述】:

Kubelet 有多个它监听的端点路径,例如/metrics/metrics/cadvisor/logs 等。可以通过运行kubectl get --raw /api/v1/nodes/<node-name>/proxy/<path>(在运行kubectl proxy 之后)轻松查询这些端点。

我的问题是如何获得 Kubelet 所服务的所有这些路径的列表?在 Kubelet 自己的代码 here 中可以找到一个列表,但这只是一个子集。例如/pods 不在该列表中,但在the code as well 中进一步定义。但是还有其他一些没有在代码中明确列出,例如/healthz,可以通过查看other lines of the code 来猜测。我还敢于相信其他插件或 3rd 方产品可能会导致 Kubelet 暴露更多路径。

我尝试使用/healthz?verbose,但它只返回基本信息,在路径列表附近没有任何内容:

[+]ping ok
[+]log ok
[+]syncloop ok
healthz check passed

Kubernetes API 服务器使用kubectl get --raw / 返回一个非常漂亮的路径列表,如下所示(由于长度而被截断)。是否有与 Kubelet 自己的路径等效的东西?

{
  "paths": [
    "/.well-known/openid-configuration",
    "/api",
    "/api/v1",
    "/apis",
    "/apis/",
    "/apis/admissionregistration.k8s.io",
    "/apis/admissionregistration.k8s.io/v1",
    "/apis/admissionregistration.k8s.io/v1beta1",
    "/apis/apiextensions.k8s.io",
    "/apis/apiextensions.k8s.io/v1",
    "/apis/apiextensions.k8s.io/v1beta1",
    "/apis/apiregistration.k8s.io",
    "/apis/apiregistration.k8s.io/v1",
    "/apis/apiregistration.k8s.io/v1beta1",
    "/apis/apps",
    "/apis/apps/v1",
    "/apis/authentication.k8s.io",
    "/apis/authentication.k8s.io/v1",
    "/apis/authentication.k8s.io/v1beta1",
    "/apis/authorization.k8s.io",
    "/apis/authorization.k8s.io/v1",
    "/apis/authorization.k8s.io/v1beta1",
    "/apis/autoscaling",
    "/apis/autoscaling/v1",
    "/apis/autoscaling/v2beta1",
    "/apis/autoscaling/v2beta2",
    "/apis/batch",
    "/apis/batch/v1",
    "/apis/batch/v1beta1",
    "/apis/certificates.k8s.io",
....

【问题讨论】:

标签: kubernetes kubelet


【解决方案1】:

根据不同来源的信息,下面提供了一些 kubelet 的端点。

来自kubelet server的代码:

/metrics
/metrics/cadvisor
/metrics/resource
/metrics/probes
/stats/
/logs/
/debug/pprof/
/debug/flags/v

also:

/pods/*

and:

/run/*
/exec/*
/attach/*
/portForward/*
/containerLogs/*
/configz
/runningpods/

here:

"/attach/{podNamespace}/{podID}/{containerName}":       "proxy",
"/attach/{podNamespace}/{podID}/{uid}/{containerName}": "proxy",
"/configz": "proxy",
"/containerLogs/{podNamespace}/{podID}/{containerName}": "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":                   "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",
"/stats/":        "stats",
"/stats/summary": "stats"

星号表示应使用某些参数更新完整请求。例如/containerLogs/* 加上/{podNamespace}/{podID}/{containerName}:

kubectl get --raw /api/v1/nodes/<node-name>/proxy/containerLogs/{podNamespace}/{podID}/{containerName}

一些信息from kubernetes site about kubelet API

/stats/*
/metrics/*
/logs/*
/spec/*

您也可以从kubeletctl 查看此页面。它有点过时了,但可能会提供一些关于 kubelet API 和 HTTP 请求的有用信息。

这个article about the kubelet API也不错。

无论如何,建议在使用之前查看 kubernetes 文档,以了解当前/旧版本中不推荐使用的内容。

附言如果您对此主题感兴趣,可以在kubernetes GitHub page 上创建问题以提出对 kubelet 文档的改进。

【讨论】:

  • 你好@MihaiAlbert。这能回答你的问题吗?
猜你喜欢
  • 1970-01-01
  • 2021-12-07
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多