mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +00:00
Merge pull request #22510 from gmarek/proxy
Auto commit by PR queue bot
This commit is contained in:
commit
1b9abdc920
@ -42,6 +42,11 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// timeout for proxy requests.
|
||||||
|
proxyTimeout = 2 * time.Minute
|
||||||
|
)
|
||||||
|
|
||||||
// KubeletMetric stores metrics scraped from the kubelet server's /metric endpoint.
|
// KubeletMetric stores metrics scraped from the kubelet server's /metric endpoint.
|
||||||
// TODO: Get some more structure around the metrics and this type
|
// TODO: Get some more structure around the metrics and this type
|
||||||
type KubeletMetric struct {
|
type KubeletMetric struct {
|
||||||
@ -339,11 +344,15 @@ type usageDataPerContainer struct {
|
|||||||
|
|
||||||
// Performs a get on a node proxy endpoint given the nodename and rest client.
|
// Performs a get on a node proxy endpoint given the nodename and rest client.
|
||||||
func nodeProxyRequest(c *client.Client, node, endpoint string) (restclient.Result, error) {
|
func nodeProxyRequest(c *client.Client, node, endpoint string) (restclient.Result, error) {
|
||||||
|
// proxy tends to hang in some cases when Node is not ready. Add an artificial timeout for this call.
|
||||||
|
// This will leak a goroutine if proxy hangs. #22165
|
||||||
subResourceProxyAvailable, err := serverVersionGTE(subResourceServiceAndNodeProxyVersion, c)
|
subResourceProxyAvailable, err := serverVersionGTE(subResourceServiceAndNodeProxyVersion, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return restclient.Result{}, err
|
return restclient.Result{}, err
|
||||||
}
|
}
|
||||||
var result restclient.Result
|
var result restclient.Result
|
||||||
|
finished := make(chan struct{})
|
||||||
|
go func() {
|
||||||
if subResourceProxyAvailable {
|
if subResourceProxyAvailable {
|
||||||
result = c.Get().
|
result = c.Get().
|
||||||
Resource("nodes").
|
Resource("nodes").
|
||||||
@ -360,7 +369,14 @@ func nodeProxyRequest(c *client.Client, node, endpoint string) (restclient.Resul
|
|||||||
Suffix(endpoint).
|
Suffix(endpoint).
|
||||||
Do()
|
Do()
|
||||||
}
|
}
|
||||||
|
finished <- struct{}{}
|
||||||
|
}()
|
||||||
|
select {
|
||||||
|
case <-finished:
|
||||||
return result, nil
|
return result, nil
|
||||||
|
case <-time.After(proxyTimeout):
|
||||||
|
return restclient.Result{}, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retrieve metrics from the kubelet server of the given node.
|
// Retrieve metrics from the kubelet server of the given node.
|
||||||
|
Loading…
Reference in New Issue
Block a user