Remove check for SubResourcePodProxyVersion and SubResourceServiceAndNodeProxyVersion

pull/6/head
xiangpengzhao 2017-11-03 17:14:30 +08:00
parent 026197fb04
commit 32675e6f62
7 changed files with 77 additions and 234 deletions

View File

@ -280,33 +280,17 @@ func HighLatencyKubeletOperations(c clientset.Interface, threshold time.Duration
// getStatsSummary contacts kubelet for the container information. // getStatsSummary contacts kubelet for the container information.
func getStatsSummary(c clientset.Interface, nodeName string) (*stats.Summary, error) { func getStatsSummary(c clientset.Interface, nodeName string) (*stats.Summary, error) {
subResourceProxyAvailable, err := ServerVersionGTE(SubResourceServiceAndNodeProxyVersion, c.Discovery())
if err != nil {
return nil, err
}
ctx, cancel := context.WithTimeout(context.Background(), SingleCallTimeout) ctx, cancel := context.WithTimeout(context.Background(), SingleCallTimeout)
defer cancel() defer cancel()
var data []byte data, err := c.CoreV1().RESTClient().Get().
if subResourceProxyAvailable { Context(ctx).
data, err = c.CoreV1().RESTClient().Get(). Resource("nodes").
Context(ctx). SubResource("proxy").
Resource("nodes"). Name(fmt.Sprintf("%v:%v", nodeName, ports.KubeletPort)).
SubResource("proxy"). Suffix("stats/summary").
Name(fmt.Sprintf("%v:%v", nodeName, ports.KubeletPort)). Do().Raw()
Suffix("stats/summary").
Do().Raw()
} else {
data, err = c.CoreV1().RESTClient().Get().
Context(ctx).
Prefix("proxy").
Resource("nodes").
Name(fmt.Sprintf("%v:%v", nodeName, ports.KubeletPort)).
Suffix("stats/summary").
Do().Raw()
}
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -406,30 +390,14 @@ func getOneTimeResourceUsageOnNode(
} }
func getNodeStatsSummary(c clientset.Interface, nodeName string) (*stats.Summary, error) { func getNodeStatsSummary(c clientset.Interface, nodeName string) (*stats.Summary, error) {
subResourceProxyAvailable, err := ServerVersionGTE(SubResourceServiceAndNodeProxyVersion, c.Discovery()) data, err := c.CoreV1().RESTClient().Get().
if err != nil { Resource("nodes").
return nil, err SubResource("proxy").
} Name(fmt.Sprintf("%v:%v", nodeName, ports.KubeletPort)).
Suffix("stats/summary").
SetHeader("Content-Type", "application/json").
Do().Raw()
var data []byte
if subResourceProxyAvailable {
data, err = c.CoreV1().RESTClient().Get().
Resource("nodes").
SubResource("proxy").
Name(fmt.Sprintf("%v:%v", nodeName, ports.KubeletPort)).
Suffix("stats/summary").
SetHeader("Content-Type", "application/json").
Do().Raw()
} else {
data, err = c.CoreV1().RESTClient().Get().
Prefix("proxy").
Resource("nodes").
Name(fmt.Sprintf("%v:%v", nodeName, ports.KubeletPort)).
Suffix("stats/summary").
SetHeader("Content-Type", "application/json").
Do().Raw()
}
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -443,11 +443,6 @@ func getSchedulingLatency(c clientset.Interface) (*SchedulingLatency, error) {
nodes, err := c.CoreV1().Nodes().List(metav1.ListOptions{}) nodes, err := c.CoreV1().Nodes().List(metav1.ListOptions{})
ExpectNoError(err) ExpectNoError(err)
subResourceProxyAvailable, err := ServerVersionGTE(SubResourcePodProxyVersion, c.Discovery())
if err != nil {
return nil, err
}
var data string var data string
var masterRegistered = false var masterRegistered = false
for _, node := range nodes.Items { for _, node := range nodes.Items {
@ -460,25 +455,14 @@ func getSchedulingLatency(c clientset.Interface) (*SchedulingLatency, error) {
defer cancel() defer cancel()
var rawData []byte var rawData []byte
if subResourceProxyAvailable { rawData, err = c.CoreV1().RESTClient().Get().
rawData, err = c.CoreV1().RESTClient().Get(). Context(ctx).
Context(ctx). Namespace(metav1.NamespaceSystem).
Namespace(metav1.NamespaceSystem). Resource("pods").
Resource("pods"). Name(fmt.Sprintf("kube-scheduler-%v:%v", TestContext.CloudConfig.MasterName, ports.SchedulerPort)).
Name(fmt.Sprintf("kube-scheduler-%v:%v", TestContext.CloudConfig.MasterName, ports.SchedulerPort)). SubResource("proxy").
SubResource("proxy"). Suffix("metrics").
Suffix("metrics"). Do().Raw()
Do().Raw()
} else {
rawData, err = c.CoreV1().RESTClient().Get().
Context(ctx).
Prefix("proxy").
Namespace(metav1.NamespaceSystem).
SubResource("pods").
Name(fmt.Sprintf("kube-scheduler-%v:%v", TestContext.CloudConfig.MasterName, ports.SchedulerPort)).
Suffix("metrics").
Do().Raw()
}
ExpectNoError(err) ExpectNoError(err)
data = string(rawData) data = string(rawData)

View File

@ -244,24 +244,8 @@ func GetPauseImageNameForHostArch() string {
return currentPodInfraContainerImageName + "-" + goruntime.GOARCH + ":" + currentPodInfraContainerImageVersion return currentPodInfraContainerImageName + "-" + goruntime.GOARCH + ":" + currentPodInfraContainerImageVersion
} }
// SubResource proxy should have been functional in v1.0.0, but SubResource
// proxy via tunneling is known to be broken in v1.0. See
// https://github.com/kubernetes/kubernetes/pull/15224#issuecomment-146769463
//
// TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively
// in v1.3).
var SubResourcePodProxyVersion = utilversion.MustParseSemantic("v1.1.0")
var SubResourceServiceAndNodeProxyVersion = utilversion.MustParseSemantic("v1.2.0")
func GetServicesProxyRequest(c clientset.Interface, request *restclient.Request) (*restclient.Request, error) { func GetServicesProxyRequest(c clientset.Interface, request *restclient.Request) (*restclient.Request, error) {
subResourceProxyAvailable, err := ServerVersionGTE(SubResourceServiceAndNodeProxyVersion, c.Discovery()) return request.Resource("services").SubResource("proxy"), nil
if err != nil {
return nil, err
}
if subResourceProxyAvailable {
return request.Resource("services").SubResource("proxy"), nil
}
return request.Prefix("proxy").Resource("services"), nil
} }
// unique identifier of the e2e run // unique identifier of the e2e run
@ -1672,34 +1656,19 @@ func (r podProxyResponseChecker) CheckAllResponses() (done bool, err error) {
if !isElementOf(pod.UID, currentPods) { if !isElementOf(pod.UID, currentPods) {
return false, fmt.Errorf("pod with UID %s is no longer a member of the replica set. Must have been restarted for some reason. Current replica set: %v", pod.UID, currentPods) return false, fmt.Errorf("pod with UID %s is no longer a member of the replica set. Must have been restarted for some reason. Current replica set: %v", pod.UID, currentPods)
} }
subResourceProxyAvailable, err := ServerVersionGTE(SubResourcePodProxyVersion, r.c.Discovery())
if err != nil {
return false, err
}
ctx, cancel := context.WithTimeout(context.Background(), SingleCallTimeout) ctx, cancel := context.WithTimeout(context.Background(), SingleCallTimeout)
defer cancel() defer cancel()
var body []byte body, err := r.c.CoreV1().RESTClient().Get().
if subResourceProxyAvailable { Context(ctx).
body, err = r.c.CoreV1().RESTClient().Get(). Namespace(r.ns).
Context(ctx). Resource("pods").
Namespace(r.ns). SubResource("proxy").
Resource("pods"). Name(string(pod.Name)).
SubResource("proxy"). Do().
Name(string(pod.Name)). Raw()
Do().
Raw()
} else {
body, err = r.c.CoreV1().RESTClient().Get().
Context(ctx).
Prefix("proxy").
Namespace(r.ns).
Resource("pods").
Name(string(pod.Name)).
Do().
Raw()
}
if err != nil { if err != nil {
if ctx.Err() != nil { if ctx.Err() != nil {
// We may encounter errors here because of a race between the pod readiness and apiserver // We may encounter errors here because of a race between the pod readiness and apiserver
@ -4404,29 +4373,16 @@ const proxyTimeout = 2 * time.Minute
func NodeProxyRequest(c clientset.Interface, node, endpoint string) (restclient.Result, error) { func NodeProxyRequest(c clientset.Interface, 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. // 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 // This will leak a goroutine if proxy hangs. #22165
subResourceProxyAvailable, err := ServerVersionGTE(SubResourceServiceAndNodeProxyVersion, c.Discovery())
if err != nil {
return restclient.Result{}, err
}
var result restclient.Result var result restclient.Result
finished := make(chan struct{}) finished := make(chan struct{})
go func() { go func() {
if subResourceProxyAvailable { result = c.CoreV1().RESTClient().Get().
result = c.CoreV1().RESTClient().Get(). Resource("nodes").
Resource("nodes"). SubResource("proxy").
SubResource("proxy"). Name(fmt.Sprintf("%v:%v", node, ports.KubeletPort)).
Name(fmt.Sprintf("%v:%v", node, ports.KubeletPort)). Suffix(endpoint).
Suffix(endpoint). Do()
Do()
} else {
result = c.CoreV1().RESTClient().Get().
Prefix("proxy").
Resource("nodes").
Name(fmt.Sprintf("%v:%v", node, ports.KubeletPort)).
Suffix(endpoint).
Do()
}
finished <- struct{}{} finished <- struct{}{}
}() }()
select { select {

View File

@ -66,42 +66,21 @@ var (
// Query sends a command to the server and returns the Response // Query sends a command to the server and returns the Response
func Query(c clientset.Interface, query string) (*influxdb.Response, error) { func Query(c clientset.Interface, query string) (*influxdb.Response, error) {
subResourceProxyAvailable, err := framework.ServerVersionGTE(framework.SubResourceServiceAndNodeProxyVersion, c.Discovery())
if err != nil {
return nil, err
}
ctx, cancel := context.WithTimeout(context.Background(), framework.SingleCallTimeout) ctx, cancel := context.WithTimeout(context.Background(), framework.SingleCallTimeout)
defer cancel() defer cancel()
var result []byte result, err := c.CoreV1().RESTClient().Get().
if subResourceProxyAvailable { Context(ctx).
result, err = c.CoreV1().RESTClient().Get(). Namespace("kube-system").
Context(ctx). Resource("services").
Namespace("kube-system"). Name(influxdbService+":api").
Resource("services"). SubResource("proxy").
Name(influxdbService+":api"). Suffix("query").
SubResource("proxy"). Param("q", query).
Suffix("query"). Param("db", influxdbDatabaseName).
Param("q", query). Param("epoch", "s").
Param("db", influxdbDatabaseName). Do().
Param("epoch", "s"). Raw()
Do().
Raw()
} else {
result, err = c.CoreV1().RESTClient().Get().
Context(ctx).
Prefix("proxy").
Namespace("kube-system").
Resource("services").
Name(influxdbService+":api").
Suffix("query").
Param("q", query).
Param("db", influxdbDatabaseName).
Param("epoch", "s").
Do().
Raw()
}
if err != nil { if err != nil {
if ctx.Err() != nil { if ctx.Err() != nil {

View File

@ -1990,34 +1990,19 @@ func getUDData(jpgExpected string, ns string) func(clientset.Interface, string)
// getUDData validates data.json in the update-demo (returns nil if data is ok). // getUDData validates data.json in the update-demo (returns nil if data is ok).
return func(c clientset.Interface, podID string) error { return func(c clientset.Interface, podID string) error {
framework.Logf("validating pod %s", podID) framework.Logf("validating pod %s", podID)
subResourceProxyAvailable, err := framework.ServerVersionGTE(framework.SubResourcePodProxyVersion, c.Discovery())
if err != nil {
return err
}
ctx, cancel := context.WithTimeout(context.Background(), framework.SingleCallTimeout) ctx, cancel := context.WithTimeout(context.Background(), framework.SingleCallTimeout)
defer cancel() defer cancel()
var body []byte body, err := c.CoreV1().RESTClient().Get().
if subResourceProxyAvailable { Namespace(ns).
body, err = c.CoreV1().RESTClient().Get(). Resource("pods").
Namespace(ns). SubResource("proxy").
Resource("pods"). Name(podID).
SubResource("proxy"). Suffix("data.json").
Name(podID). Do().
Suffix("data.json"). Raw()
Do().
Raw()
} else {
body, err = c.CoreV1().RESTClient().Get().
Prefix("proxy").
Namespace(ns).
Resource("pods").
Name(podID).
Suffix("data.json").
Do().
Raw()
}
if err != nil { if err != nil {
if ctx.Err() != nil { if ctx.Err() != nil {
framework.Failf("Failed to retrieve data from container: %v", err) framework.Failf("Failed to retrieve data from container: %v", err)

View File

@ -169,35 +169,20 @@ func assertFilesContain(fileNames []string, fileDir string, pod *v1.Pod, client
framework.ExpectNoError(wait.Poll(time.Second*10, time.Second*600, func() (bool, error) { framework.ExpectNoError(wait.Poll(time.Second*10, time.Second*600, func() (bool, error) {
failed = []string{} failed = []string{}
subResourceProxyAvailable, err := framework.ServerVersionGTE(framework.SubResourcePodProxyVersion, client.Discovery())
if err != nil {
return false, err
}
ctx, cancel := context.WithTimeout(context.Background(), framework.SingleCallTimeout) ctx, cancel := context.WithTimeout(context.Background(), framework.SingleCallTimeout)
defer cancel() defer cancel()
var contents []byte
for _, fileName := range fileNames { for _, fileName := range fileNames {
if subResourceProxyAvailable { contents, err := client.CoreV1().RESTClient().Get().
contents, err = client.CoreV1().RESTClient().Get(). Context(ctx).
Context(ctx). Namespace(pod.Namespace).
Namespace(pod.Namespace). Resource("pods").
Resource("pods"). SubResource("proxy").
SubResource("proxy"). Name(pod.Name).
Name(pod.Name). Suffix(fileDir, fileName).
Suffix(fileDir, fileName). Do().Raw()
Do().Raw()
} else {
contents, err = client.CoreV1().RESTClient().Get().
Context(ctx).
Prefix("proxy").
Resource("pods").
Namespace(pod.Namespace).
Name(pod.Name).
Suffix(fileDir, fileName).
Do().Raw()
}
if err != nil { if err != nil {
if ctx.Err() != nil { if ctx.Err() != nil {
framework.Failf("Unable to read %s from pod %s: %v", fileName, pod.Name, err) framework.Failf("Unable to read %s from pod %s: %v", fileName, pod.Name, err)

View File

@ -121,34 +121,20 @@ func testPreStop(c clientset.Interface, ns string) {
// Validate that the server received the web poke. // Validate that the server received the web poke.
err = wait.Poll(time.Second*5, time.Second*60, func() (bool, error) { err = wait.Poll(time.Second*5, time.Second*60, func() (bool, error) {
subResourceProxyAvailable, err := framework.ServerVersionGTE(framework.SubResourcePodProxyVersion, c.Discovery())
if err != nil {
return false, err
}
ctx, cancel := context.WithTimeout(context.Background(), framework.SingleCallTimeout) ctx, cancel := context.WithTimeout(context.Background(), framework.SingleCallTimeout)
defer cancel() defer cancel()
var body []byte var body []byte
if subResourceProxyAvailable { body, err = c.CoreV1().RESTClient().Get().
body, err = c.CoreV1().RESTClient().Get(). Context(ctx).
Context(ctx). Namespace(ns).
Namespace(ns). Resource("pods").
Resource("pods"). SubResource("proxy").
SubResource("proxy"). Name(podDescr.Name).
Name(podDescr.Name). Suffix("read").
Suffix("read"). DoRaw()
DoRaw()
} else {
body, err = c.CoreV1().RESTClient().Get().
Context(ctx).
Prefix("proxy").
Namespace(ns).
Resource("pods").
Name(podDescr.Name).
Suffix("read").
DoRaw()
}
if err != nil { if err != nil {
if ctx.Err() != nil { if ctx.Err() != nil {
framework.Failf("Error validating prestop: %v", err) framework.Failf("Error validating prestop: %v", err)