// TODO: remove this function after 1.6 // returns if the user agent is is kubectl older than v1.4.0 func isOldKubectl(userAgent string) bool { // example userAgent string: kubectl-1.3/v1.3.8 (linux/amd64) kubernetes/e328d5b if !strings.Contains(userAgent, "kubectl") { return false } userAgent = strings.Split(userAgent, " ")[0] subs := strings.Split(userAgent, "/") if len(subs) != 2 { return false } kubectlVersion, versionErr := version.Parse(subs[1]) if versionErr != nil { return false } return kubectlVersion.LT(version.MustParse("v1.4.0")) }
"fmt" "time" "k8s.io/kubernetes/pkg/api" apierrors "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/util/uuid" "k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/plugin/pkg/admission/serviceaccount" "k8s.io/kubernetes/test/e2e/framework" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var serviceAccountTokenNamespaceVersion = version.MustParse("v1.2.0") var _ = framework.KubeDescribe("ServiceAccounts", func() { f := framework.NewDefaultFramework("svcaccounts") It("should ensure a single API token exists", func() { // wait for the service account to reference a single secret var secrets []api.ObjectReference framework.ExpectNoError(wait.Poll(time.Millisecond*500, time.Second*10, func() (bool, error) { By("waiting for a single token reference") sa, err := f.Client.ServiceAccounts(f.Namespace.Name).Get("default") if apierrors.IsNotFound(err) { framework.Logf("default service account was not found") return false, nil } if err != nil {
// getCondition returns a condition object for the specific condition // type, nil if the condition is not set. func (nc *NodeController) getCondition(status *api.NodeStatus, conditionType api.NodeConditionType) *api.NodeCondition { if status == nil { return nil } for i := range status.Conditions { if status.Conditions[i].Type == conditionType { return &status.Conditions[i] } } return nil } var gracefulDeletionVersion = version.MustParse("v1.1.0") // maybeDeleteTerminatingPod non-gracefully deletes pods that are terminating // that should not be gracefully terminated. func (nc *NodeController) maybeDeleteTerminatingPod(obj interface{}) { pod, ok := obj.(*api.Pod) if !ok { return } // consider only terminating pods if pod.DeletionTimestamp == nil { return } // delete terminating pods that have not yet been scheduled
return true, 0 } glog.V(2).Infof("Pods terminating since %s on %q, estimated completion %s", value.AddedAt, value.Value, remaining) // clamp very short intervals if remaining < nodeEvictionPeriod { remaining = nodeEvictionPeriod } return false, remaining }) }, nodeEvictionPeriod, wait.NeverStop) go wait.Until(nc.cleanupOrphanedPods, 30*time.Second, wait.NeverStop) } var gracefulDeletionVersion = version.MustParse("v1.1.0") var gracefulDeletionVersionAlpha = version.MustParse("v1.1.0-alpha") // maybeDeleteTerminatingPod non-gracefully deletes pods that are terminating // that should not be gracefully terminated. func (nc *NodeController) maybeDeleteTerminatingPod(obj interface{}) { pod, ok := obj.(*api.Pod) if !ok { return } // consider only terminating pods if pod.DeletionTimestamp == nil { return }
utilnode "k8s.io/kubernetes/pkg/util/node" utilruntime "k8s.io/kubernetes/pkg/util/runtime" "k8s.io/kubernetes/pkg/util/system" "k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/pkg/watch" ) func init() { // Register prometheus metrics Register() } var ( ErrCloudInstance = errors.New("cloud provider doesn't support instances.") gracefulDeletionVersion = version.MustParse("v1.1.0") // The minimum kubelet version for which the nodecontroller // can safely flip pod.Status to NotReady. podStatusReconciliationVersion = version.MustParse("v1.2.0") ) const ( // nodeStatusUpdateRetry controls the number of retries of writing NodeStatus update. nodeStatusUpdateRetry = 5 // controls how often NodeController will try to evict Pods from non-responsive Nodes. nodeEvictionPeriod = 100 * time.Millisecond // Burst value for all eviction rate limiters evictionRateLimiterBurst = 1 // The amount of time the nodecontroller polls on the list nodes endpoint. apiserverStartupGracePeriod = 10 * time.Minute
guestbookResponseTimeout = 3 * time.Minute simplePodSelector = "name=nginx" simplePodName = "nginx" nginxDefaultOutput = "Welcome to nginx!" simplePodPort = 80 runJobTimeout = 5 * time.Minute ) var ( proxyRegexp = regexp.MustCompile("Starting to serve on 127.0.0.1:([0-9]+)") // Extended pod logging options were introduced in #13780 (v1.1.0) so we don't expect tests // that rely on extended pod logging options to work on clusters before that. // // TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively in v1.3). extendedPodLogFilterVersion = version.MustParse("v1.1.0") // NodePorts were made optional in #12831 (v1.1.0) so we don't expect tests that used to // require NodePorts but no longer include them to work on clusters before that. // // TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively in v1.3). nodePortsOptionalVersion = version.MustParse("v1.1.0") // Jobs were introduced in v1.1, so we don't expect tests that rely on jobs to work on // clusters before that. // // TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively in v1.3). jobsVersion = version.MustParse("v1.1.0") ) var _ = Describe("Kubectl client", func() {
"k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/test/e2e/framework" . "github.com/onsi/ginkgo" ) const ( podName = "pfpod" ) // TODO support other ports besides 80 var ( portForwardRegexp = regexp.MustCompile("Forwarding from 127.0.0.1:([0-9]+) -> 80") portForwardPortToStdOutV = version.MustParse("v1.3.0-alpha.4") ) func pfPod(expectedClientData, chunks, chunkSize, chunkIntervalMillis string) *v1.Pod { return &v1.Pod{ ObjectMeta: v1.ObjectMeta{ Name: podName, Labels: map[string]string{"name": podName}, }, Spec: v1.PodSpec{ Containers: []v1.Container{ { Name: "portforwardtester", Image: "gcr.io/google_containers/portforwardtester:1.0", Env: []v1.EnvVar{ {
summaryRequestLatency = prometheus.NewSummaryVec( prometheus.SummaryOpts{ Namespace: "heapster", Subsystem: "kubelet_summary", Name: "request_duration_microseconds", Help: "The Kubelet summary request latencies in microseconds.", }, []string{"node"}, ) ) // Prefix used for the LabelResourceID for volume metrics. const VolumeResourcePrefix = "Volume:" // Earliest kubelet version that serves the summary API. var minSummaryKubeletVersion = version.MustParse("v1.2.0-alpha.8") func init() { prometheus.MustRegister(summaryRequestLatency) } type NodeInfo struct { kubelet.Host NodeName string HostName string HostID string KubeletVersion string } // Kubelet-provided metrics for pod and system container. type summaryMetricsSource struct {
simplePodSelector = "name=nginx" simplePodName = "nginx" nginxDefaultOutput = "Welcome to nginx!" simplePodPort = 80 runJobTimeout = 5 * time.Minute nginxImage = "gcr.io/google_containers/nginx:1.7.9" ) var ( proxyRegexp = regexp.MustCompile("Starting to serve on 127.0.0.1:([0-9]+)") // Extended pod logging options were introduced in #13780 (v1.1.0) so we don't expect tests // that rely on extended pod logging options to work on clusters before that. // // TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively in v1.3). extendedPodLogFilterVersion = version.MustParse("v1.1.0") // NodePorts were made optional in #12831 (v1.1.0) so we don't expect tests that used to // require NodePorts but no longer include them to work on clusters before that. // // TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively in v1.3). nodePortsOptionalVersion = version.MustParse("v1.1.0") // Jobs were introduced in v1.1, so we don't expect tests that rely on jobs to work on // clusters before that. // // TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively in v1.3). jobsVersion = version.MustParse("v1.1.0") // Deployments were introduced by default in v1.2, so we don't expect tests that rely on // deployments to work on clusters before that.
const ( testDaemonHttpPort = 11301 testDaemonTcpPort = 11302 timeoutSeconds = 10 postFinTimeoutSeconds = 5 ) fr := framework.NewDefaultFramework("network") It("should set TCP CLOSE_WAIT timeout", func() { nodes := framework.GetReadySchedulableNodesOrDie(fr.Client) ips := collectAddresses(nodes, api.NodeInternalIP) // The matching change is not present in kube-proxy 1.4.5 // release which will causes this test to always fail. framework.SkipUnlessServerVersionGTE(version.MustParse("v1.4.6"), fr.Client) if len(nodes.Items) < 2 { framework.Skipf( "Test requires >= 2 Ready nodes, but there are only %v nodes", len(nodes.Items)) } type NodeInfo struct { node *api.Node name string nodeIp string } clientNodeInfo := NodeInfo{ node: &nodes.Items[0],