Merge pull request #118910 from dims/better-url-for-scraping-metrics-from-kubelet

Better URL for scraping metrics from kubelet in node e2e tests
This commit is contained in:
Kubernetes Prow Robot 2023-06-27 16:00:41 -07:00 committed by GitHub
commit 470889278f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 4 deletions

View File

@ -164,7 +164,7 @@ var _ = SIGDescribe("CPU Manager Metrics [Serial][Feature:CPUManager]", func() {
func getKubeletMetrics(ctx context.Context) (e2emetrics.KubeletMetrics, error) { func getKubeletMetrics(ctx context.Context) (e2emetrics.KubeletMetrics, error) {
ginkgo.By("getting Kubelet metrics from the metrics API") ginkgo.By("getting Kubelet metrics from the metrics API")
return e2emetrics.GrabKubeletMetricsWithoutProxy(ctx, framework.TestContext.NodeName+":10255", "/metrics") return e2emetrics.GrabKubeletMetricsWithoutProxy(ctx, nodeNameOrIP()+":10255", "/metrics")
} }
func makeGuaranteedCPUExclusiveSleeperPod(name string, cpus int) *v1.Pod { func makeGuaranteedCPUExclusiveSleeperPod(name string, cpus int) *v1.Pod {

View File

@ -965,7 +965,7 @@ func waitForTopologyUnawareResources(ctx context.Context, f *framework.Framework
func getPodResourcesMetrics(ctx context.Context) (e2emetrics.KubeletMetrics, error) { func getPodResourcesMetrics(ctx context.Context) (e2emetrics.KubeletMetrics, error) {
// we are running out of good names, so we need to be unnecessarily specific to avoid clashes // we are running out of good names, so we need to be unnecessarily specific to avoid clashes
ginkgo.By("getting Pod Resources metrics from the metrics API") ginkgo.By("getting Pod Resources metrics from the metrics API")
return e2emetrics.GrabKubeletMetricsWithoutProxy(ctx, framework.TestContext.NodeName+":10255", "/metrics") return e2emetrics.GrabKubeletMetricsWithoutProxy(ctx, nodeNameOrIP()+":10255", "/metrics")
} }
func timelessSampleAtLeast(lower interface{}) types.GomegaMatcher { func timelessSampleAtLeast(lower interface{}) types.GomegaMatcher {

View File

@ -131,7 +131,7 @@ var _ = SIGDescribe("ResourceMetricsAPI [NodeFeature:ResourceMetrics]", func() {
func getResourceMetrics(ctx context.Context) (e2emetrics.KubeletMetrics, error) { func getResourceMetrics(ctx context.Context) (e2emetrics.KubeletMetrics, error) {
ginkgo.By("getting stable resource metrics API") ginkgo.By("getting stable resource metrics API")
return e2emetrics.GrabKubeletMetricsWithoutProxy(ctx, framework.TestContext.NodeName+":10255", "/metrics/resource") return e2emetrics.GrabKubeletMetricsWithoutProxy(ctx, nodeNameOrIP()+":10255", "/metrics/resource")
} }
func nodeID(element interface{}) string { func nodeID(element interface{}) string {

View File

@ -40,6 +40,7 @@ import (
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
apiequality "k8s.io/apimachinery/pkg/api/equality" apiequality "k8s.io/apimachinery/pkg/api/equality"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
utilnet "k8s.io/apimachinery/pkg/util/net"
"k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
@ -304,7 +305,7 @@ func logKubeletLatencyMetrics(ctx context.Context, metricNames ...string) {
for _, key := range metricNames { for _, key := range metricNames {
metricSet.Insert(kubeletmetrics.KubeletSubsystem + "_" + key) metricSet.Insert(kubeletmetrics.KubeletSubsystem + "_" + key)
} }
metric, err := e2emetrics.GrabKubeletMetricsWithoutProxy(ctx, fmt.Sprintf("%s:%d", framework.TestContext.NodeName, ports.KubeletReadOnlyPort), "/metrics") metric, err := e2emetrics.GrabKubeletMetricsWithoutProxy(ctx, fmt.Sprintf("%s:%d", nodeNameOrIP(), ports.KubeletReadOnlyPort), "/metrics")
if err != nil { if err != nil {
framework.Logf("Error getting kubelet metrics: %v", err) framework.Logf("Error getting kubelet metrics: %v", err)
} else { } else {
@ -638,3 +639,22 @@ func WaitForPodInitContainerToFail(ctx context.Context, c clientset.Interface, n
return false, nil return false, nil
}) })
} }
func nodeNameOrIP() string {
// Check if the node name in test context can be resolved
if ips, err := net.LookupIP(framework.TestContext.NodeName); err != nil {
if dnsErr, ok := err.(*net.DNSError); ok && dnsErr.IsNotFound {
// if it can't be resolved, pick a host interface
if ip, err := utilnet.ChooseHostInterface(); err == nil {
return ip.String()
}
}
} else {
if len(ips) > 0 {
// yay, node name resolved correctly, pick the first
return ips[0].String()
}
}
// fallback to node name in test context
return framework.TestContext.NodeName
}