菜单
开源

发现Kubelet

discovery.kubelet 在指定的 Kubelet 上发现运行的 Kubernetes pod,并将它们作为抓取目标暴露。

用法

alloy
discovery.kubelet "LABEL" {
}

要求

  • Kubelet 必须可以从 alloy pod 网络访问。
  • 按照 Kubelet 授权 文档配置对 Kubelet API 的身份验证。

参数

以下参数受支持

名称类型描述默认必需
url字符串Kubelet 服务器的 URL。“https://127.0.0.1:10250”
refresh_interval持续时间Kubelet 应多久轮询一次以获取抓取目标5s
namespaces列表(string)从其中提取目标 pod 的命名空间列表
bearer_token_file字符串包含身份验证令牌的文件
bearer_token秘密用于身份验证的令牌
enable_http2布尔值是否支持 HTTP2 用于请求
follow_redirects布尔值服务器返回的重定向是否应该被遵循。
proxy_url字符串用于发送请求的HTTP代理。
no_proxy字符串逗号分隔的IP地址、CIDR表示法和域名列表,用于排除代理。
proxy_from_environment布尔值使用环境变量指定的代理URL。false
proxy_connect_headermap(list(secret))指定在CONNECT请求期间发送到代理的头信息。

《namespaces》列表限制了发现资源的命名空间。如果省略,则搜索所有命名空间。

discovery.kubeleturl后附加一个/pods路径,以请求可用的pods。可以在url中添加额外的路径。例如,如果urlhttps://kubernetes.default.svc.cluster.local:443/api/v1/nodes/cluster-node-1/proxy,则discovery.kubelet将在https://kubernetes.default.svc.cluster.local:443/api/v1/nodes/cluster-node-1/proxy/pods上发送请求

最多只能提供以下之一

no_proxy可以包含IP、CIDR表示法和域名。IP和域名可以包含端口号。proxy_url必须配置,如果no_proxy被配置。

proxy_from_environment使用环境变量HTTP_PROXY、HTTPS_PROXY和NO_PROXY(或其小写版本)。除非由NO_PROXY排除,否则请求将使用与它们的方案匹配的环境变量中的代理。如果配置了proxy_from_environment,则不得配置proxy_urlno_proxy

如果配置了proxy_urlproxy_from_environment,则应仅配置proxy_connect_header

以下块支持在discovery.kubelet的定义内部

层次结构描述必需
basic_authbasic_auth为端点身份验证配置basic_auth。
authorizationauthorization为端点配置通用身份验证。
oauth2oauth2为端点身份验证配置OAuth2。
oauth2 > tls_configtls_config配置连接到端点的TLS设置。
tls_configtls_config配置连接到端点的TLS设置。

《>》符号表示更深的嵌套层次。例如,oauth2 > tls_config指的是在oauth2块内定义的tls_config块。

basic_auth块

名称类型描述默认必需
password_file字符串包含基本认证密码的文件。
password秘密基本认证密码。
username字符串基本认证用户名。

passwordpassword_file是互斥的,且在basic_auth块内只能提供其中一个。

authorization块

名称类型描述默认必需
credentials_file字符串包含秘密值的文件。
credentials秘密秘密值。
type字符串授权类型,例如,“Bearer”。

credentialcredentials_file是互斥的,且在authorization块内只能提供其中一个。

oauth2块

名称类型描述默认必需
client_id字符串OAuth2客户端ID。
client_secret_file字符串包含OAuth2客户端秘密的文件。
client_secret秘密OAuth2客户端秘密。
endpoint_paramsmap(string)附加到令牌URL的可选参数。
proxy_url字符串用于发送请求的HTTP代理。
no_proxy字符串逗号分隔的IP地址、CIDR表示法和域名列表,用于排除代理。
proxy_from_environment布尔值使用环境变量指定的代理URL。false
proxy_connect_headermap(list(secret))指定在CONNECT请求期间发送到代理的头信息。
scopes列表(string)用于认证的域列表。
token_url字符串从该URL获取令牌的URL。

client_secretclient_secret_file是互斥的,且在oauth2块内只能提供其中一个。

《oauth2》块还可以包含一个独立的《tls_config》子块。

no_proxy可以包含IP、CIDR表示法和域名。IP和域名可以包含端口号。proxy_url必须配置,如果no_proxy被配置。

proxy_from_environment使用环境变量HTTP_PROXY、HTTPS_PROXY和NO_PROXY(或其小写版本)。除非由NO_PROXY排除,否则请求将使用与它们的方案匹配的环境变量中的代理。如果配置了proxy_from_environment,则不得配置proxy_urlno_proxy

如果配置了proxy_urlproxy_from_environment,则应仅配置proxy_connect_header

tls_config块

名称类型描述默认必需
ca_pem字符串用于验证服务器的CA PEM编码文本。
ca_file字符串用于验证服务器的CA证书。
cert_pem字符串客户端认证的PEM编码证书文本。
cert_file字符串客户端认证的证书文件。
insecure_skip_verify布尔值禁用服务器证书的验证。
key_file字符串客户端认证的密钥文件。
key_pem秘密客户端认证的密钥PEM编码文本。
min_version字符串可接受的最小TLS版本。
server_name字符串用于指示服务器名称的ServerName扩展。

以下参数对互斥,不能同时设置

  • ca_pemca_file
  • cert_pemcert_file
  • key_pemkey_file

配置客户端认证时,必须同时提供客户端证书(使用cert_pemcert_file)和客户端密钥(使用key_pemkey_file)。

如果没有提供min_version,则可接受的最小TLS版本继承自Go的默认最小版本,即TLS 1.2。如果提供了min_version,则必须将其设置为以下字符串之一

  • "TLS10" (TLS 1.0)
  • "TLS11" (TLS 1.1)
  • "TLS12" (TLS 1.2)
  • "TLS13" (TLS 1.3)

导出字段

以下字段被导出,并可由其他组件引用

名称类型描述
targetslist(map(string))从Kubelet API发现的目标集合。

每个目标包括以下标签

  • __address__:从pod IP和容器端口派生的目标地址。
  • __meta_kubernetes_namespace:pod对象的命名空间。
  • __meta_kubernetes_pod_name:pod对象的名称。
  • __meta_kubernetes_pod_ip:pod对象的pod IP。
  • __meta_kubernetes_pod_label_<labelname>:pod对象中的每个标签。
  • __meta_kubernetes_pod_labelpresent_<labelname>:对于pod对象中的每个标签,为true
  • __meta_kubernetes_pod_annotation_<annotationname>:pod对象中的每个注释。
  • __meta_kubernetes_pod_annotationpresent_<annotationname>:对于pod对象中的每个注释,为true
  • __meta_kubernetes_pod_container_init:如果容器是InitContainer,则为true
  • __meta_kubernetes_pod_container_name:目标地址指向的容器的名称。
  • __meta_kubernetes_pod_container_id:目标地址指向的容器的ID。ID的形式为<type>://<container_id>
  • __meta_kubernetes_pod_container_image:容器使用的镜像。
  • __meta_kubernetes_pod_container_port_name:容器端口的名称。
  • __meta_kubernetes_pod_container_port_number:容器端口号。
  • __meta_kubernetes_pod_container_port_protocol:容器端口的协议。
  • __meta_kubernetes_pod_ready:对于pod的ready状态,设置为truefalse
  • __meta_kubernetes_pod_phase:在生命周期中设置为PendingRunningSucceededFailedUnknown
  • __meta_kubernetes_pod_node_name:pod被调度到的节点的名称。
  • __meta_kubernetes_pod_host_ip:pod对象的当前主机IP。
  • __meta_kubernetes_pod_uid:pod对象的UID。
  • __meta_kubernetes_pod_controller_kind:pod控制器的对象类型。
  • __meta_kubernetes_pod_controller_name:pod控制器的名称。

注意

该组件使用的Kubelet API是一个内部API,因此无法保证从不同版本的Kubelet返回的API响应中的数据。

组件健康

discovery.kubelet 在配置无效时报告为不健康。在这种情况下,导出的字段保留其最后的健康值。

调试信息

discovery.kubelet 不暴露任何组件特定的调试信息。

调试度量

discovery.kubelet 不暴露任何组件特定的调试度量。

示例

携带令牌文件认证

本例使用携带令牌文件来认证Kubelet API

alloy
discovery.kubelet "k8s_pods" {
  bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
}

prometheus.scrape "demo" {
  targets    = discovery.kubelet.k8s_pods.targets
  forward_to = [prometheus.remote_write.demo.receiver]
}

prometheus.remote_write "demo" {
  endpoint {
    url = PROMETHEUS_REMOTE_WRITE_URL

    basic_auth {
      username = USERNAME
      password = PASSWORD
    }
  }
}

替换以下内容

  • PROMETHEUS_REMOTE_WRITE_URL:将度量发送到Prometheus remote_write兼容服务器的URL。
  • USERNAME:用于远程_write API认证的用户名。
  • PASSWORD:用于远程_write API认证的密码。

限制搜索命名空间

本例使用namespaces参数限制发现Pod的命名空间

alloy
discovery.kubelet "k8s_pods" {
  bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
  namespaces = ["default", "kube-system"]
}

prometheus.scrape "demo" {
  targets    = discovery.kubelet.k8s_pods.targets
  forward_to = [prometheus.remote_write.demo.receiver]
}

prometheus.remote_write "demo" {
  endpoint {
    url = PROMETHEUS_REMOTE_WRITE_URL

    basic_auth {
      username = USERNAME
      password = PASSWORD
    }
  }
}

替换以下内容

  • PROMETHEUS_REMOTE_WRITE_URL:将度量发送到Prometheus remote_write兼容服务器的URL。
  • USERNAME:用于远程_write API认证的用户名。
  • PASSWORD:用于远程_write API认证的密码。

兼容组件

discovery.kubelet 导出的内容可以被以下组件消费

注意

连接某些组件可能不合理,或者组件可能需要进一步的配置才能正确连接。有关更多详细信息,请参阅链接的文档。