framework

package
v1.3.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 20, 2016 License: Apache-2.0 Imports: 84 Imported by: 0

Documentation

Overview

This is a utility for prometheus pushing functionality.

Index

Constants

View Source
const (
	// How long to wait for the pod to be listable
	PodListTimeout = time.Minute
	// Initial pod start can be delayed O(minutes) by slow docker pulls
	// TODO: Make this 30 seconds once #4566 is resolved.
	PodStartTimeout = 5 * time.Minute

	// If there are any orphaned namespaces to clean up, this test is running
	// on a long lived cluster. A long wait here is preferably to spurious test
	// failures caused by leaked resources from a previous test run.
	NamespaceCleanupTimeout = 15 * time.Minute

	// How long to wait for a service endpoint to be resolvable.
	ServiceStartTimeout = 1 * time.Minute

	// How often to Poll pods, nodes and claims.
	Poll = 2 * time.Second

	// service accounts are provisioned after namespace creation
	// a service account is required to support pod creation in a namespace as part of admission control
	ServiceAccountProvisionTimeout = 2 * time.Minute

	// How long to try single API calls (like 'get' or 'list'). Used to prevent
	// transient failures from failing tests.
	// TODO: client should not apply this timeout to Watch calls. Increased from 30s until that is fixed.
	SingleCallTimeout = 5 * time.Minute

	// How long nodes have to be "ready" when a test begins. They should already
	// be "ready" before the test starts, so this is small.
	NodeReadyInitialTimeout = 20 * time.Second

	// How long pods have to be "ready" when a test begins.
	PodReadyBeforeTimeout = 5 * time.Minute

	ServiceRespondingTimeout = 2 * time.Minute
	EndpointRegisterTimeout  = time.Minute

	// How long claims have to become dynamically provisioned
	ClaimProvisionTimeout = 5 * time.Minute

	// How long each node is given during a process that restarts all nodes
	// before the test is considered failed. (Note that the total time to
	// restart all nodes will be this number times the number of nodes.)
	RestartPerNodeTimeout = 5 * time.Minute

	// How often to Poll the statues of a restart.
	RestartPoll = 20 * time.Second

	// How long a node is allowed to become "Ready" after it is restarted before
	// the test is considered failed.
	RestartNodeReadyAgainTimeout = 5 * time.Minute

	// How long a pod is allowed to become "running" and "ready" after a node
	// restart before test is considered failed.
	RestartPodReadyAgainTimeout = 5 * time.Minute
)
View Source
const (
	// NodeStartupThreshold is a rough estimate of the time allocated for a pod to start on a node.
	NodeStartupThreshold = 4 * time.Second
)

Variables

View Source
var (
	// Label allocated to the image puller static pod that runs on each node
	// before e2es.
	ImagePullerLabels = map[string]string{"name": "e2e-image-puller"}
)
View Source
var InterestingApiServerMetrics = []string{
	"apiserver_request_count",
	"apiserver_request_latencies_summary",
	"etcd_helper_cache_entry_count",
	"etcd_helper_cache_hit_count",
	"etcd_helper_cache_miss_count",
	"etcd_request_cache_add_latencies_summary",
	"etcd_request_cache_get_latencies_summary",
	"etcd_request_latencies_summary",
}
View Source
var InterestingKubeletMetrics = []string{
	"kubelet_container_manager_latency_microseconds",
	"kubelet_docker_errors",
	"kubelet_docker_operations_latency_microseconds",
	"kubelet_generate_pod_status_latency_microseconds",
	"kubelet_pod_start_latency_microseconds",
	"kubelet_pod_worker_latency_microseconds",
	"kubelet_pod_worker_start_latency_microseconds",
	"kubelet_sync_pods_latency_microseconds",
}
View Source
var MasterUpgrade = func(v string) error {
	switch TestContext.Provider {
	case "gce":
		return masterUpgradeGCE(v)
	case "gke":
		return masterUpgradeGKE(v)
	default:
		return fmt.Errorf("MasterUpgrade() is not implemented for provider %s", TestContext.Provider)
	}
}

The following upgrade functions are passed into the framework below and used to do the actual upgrades.

View Source
var NodeUpgrade = func(f *Framework, v string, img string) error {
	// Perform the upgrade.
	var err error
	switch TestContext.Provider {
	case "gce":

		err = nodeUpgradeGCE(v)
	case "gke":
		err = nodeUpgradeGKE(v, img)
	default:
		err = fmt.Errorf("NodeUpgrade() is not implemented for provider %s", TestContext.Provider)
	}
	if err != nil {
		return err
	}

	Logf("Waiting up to %v for all nodes to be ready after the upgrade", RestartNodeReadyAgainTimeout)
	if _, err := CheckNodesReady(f.Client, RestartNodeReadyAgainTimeout, TestContext.CloudConfig.NumNodes); err != nil {
		return err
	}
	return nil
}
View Source
var ProvidersWithSSH = []string{"gce", "gke", "aws"}

ProvidersWithSSH are those providers where each node is accessible with SSH

View Source
var RunId = util.NewUUID()

unique identifier of the e2e run

View Source
var SubResourcePodProxyVersion = version.MustParse("v1.1.0")

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).

Functions

func AllNodesReady

func AllNodesReady(c *client.Client, timeout time.Duration) error

checks whether all registered nodes are ready

func ApiCallToPerfData

func ApiCallToPerfData(apicalls APIResponsiveness) *perftype.PerfData

ApiCallToPerfData transforms APIResponsiveness to PerfData.

func AssertCleanup

func AssertCleanup(ns string, selectors ...string)

Asserts that cleanup of a namespace wrt selectors occurred.

func BadEvents

func BadEvents(events []*api.Event) int

Prints the histogram of the events and returns the number of bad events.

func BlockNetwork

func BlockNetwork(from string, to string)

The following helper functions can block/unblock network from source host to destination host by manipulating iptable rules. This function assumes it can ssh to the source host.

Caution: Recommend to input IP instead of hostnames. Using hostnames will cause iptables to do a DNS lookup to resolve the name to an IP address, which will slow down the test and cause it to fail if DNS is absent or broken.

Suggested usage pattern:

func foo() {
	...
	defer UnblockNetwork(from, to)
	BlockNetwork(from, to)
	...
}

func CPUUsageToPerfData

func CPUUsageToPerfData(usagePerNode NodesCPUSummary) *perftype.PerfData

CPUUsageToPerfData transforms NodesCPUSummary to PerfData.

func CheckConnectivityToHost

func CheckConnectivityToHost(f *Framework, nodeName, podName, host string, timeout int) error

CheckConnectivityToHost launches a pod running wget on the specified node to test connectivity to the specified host. An error will be returned if the host is not reachable from the pod.

func CheckInvariants

func CheckInvariants(events []watch.Event, fns ...InvariantFunc) error

func CheckNewRSAnnotations

func CheckNewRSAnnotations(c clientset.Interface, ns, deploymentName string, expectedAnnotations map[string]string) error

CheckNewRSAnnotations check if the new RS's annotation is as expected

func CheckNodesReady

func CheckNodesReady(c *client.Client, nt time.Duration, expect int) ([]string, error)

CheckNodesReady waits up to nt for expect nodes accessed by c to be ready, returning an error if this doesn't happen in time. It returns the names of nodes it finds.

func CheckPodHashLabel

func CheckPodHashLabel(pods *api.PodList) error

func CheckPodsCondition

func CheckPodsCondition(c *client.Client, ns string, podNames []string, timeout time.Duration, condition podCondition, desc string) bool

CheckPodsCondition returns whether all pods whose names are listed in podNames in namespace ns are in the condition, using c and waiting at most timeout.

func CheckPodsRunningReady

func CheckPodsRunningReady(c *client.Client, ns string, podNames []string, timeout time.Duration) bool

CheckPodsRunningReady returns whether all pods whose names are listed in podNames in namespace ns are running and ready, using c and waiting at most timeout.

func CheckPodsRunningReadyOrSucceeded

func CheckPodsRunningReadyOrSucceeded(c *client.Client, ns string, podNames []string, timeout time.Duration) bool

CheckPodsRunningReadyOrSucceeded returns whether all pods whose names are listed in podNames in namespace ns are running and ready, or succeeded; use c and waiting at most timeout.

func CheckRSHashLabel

func CheckRSHashLabel(rs *extensions.ReplicaSet) error

func CheckTestingNSDeletedExcept

func CheckTestingNSDeletedExcept(c *client.Client, skip string) error

CheckTestingNSDeletedExcept checks whether all e2e based existing namespaces are in the Terminating state and waits until they are finally deleted. It ignores namespace skip.

func Cleanup

func Cleanup(filePath, ns string, selectors ...string)

Stops everything from filePath from namespace ns and checks if everything matching selectors from the given namespace is correctly stopped.

func ContainerInitInvariant

func ContainerInitInvariant(older, newer runtime.Object) error

func CoreDump

func CoreDump(dir string)

CoreDump SSHs to the master and all nodes and dumps their logs into dir. It shells out to cluster/log-dump.sh to accomplish this.

func CreateTestingNS

func CreateTestingNS(baseName string, c *client.Client, labels map[string]string) (*api.Namespace, error)

CreateTestingNS should be used by every test, note that we append a common prefix to the provided test name. Please see NewFramework instead of using this directly.

func DeleteNamespaces

func DeleteNamespaces(c *client.Client, deleteFilter, skipFilter []string) ([]string, error)

DeleteNamespaces deletes all namespaces that match the given delete and skip filters. Filter is by simple strings.Contains; first skip filter, then delete filter. Returns the list of deleted namespaces or an error.

func DeleteRC

func DeleteRC(c *client.Client, ns, name string) error

Delete a Replication Controller and all pods it spawned

func DeleteReplicaSet

func DeleteReplicaSet(c *client.Client, ns, name string) error

Delete a ReplicaSet and all pods it spawned

func DumpAllNamespaceInfo

func DumpAllNamespaceInfo(c *client.Client, namespace string)

func DumpNodeDebugInfo

func DumpNodeDebugInfo(c *client.Client, nodeNames []string)

func EnsureLoadBalancerResourcesDeleted

func EnsureLoadBalancerResourcesDeleted(ip, portRange string) error

EnsureLoadBalancerResourcesDeleted ensures that cloud load balancer resources that were created are actually cleaned up. Currently only implemented for GCE/GKE.

func ExpectNoError

func ExpectNoError(err error, explain ...interface{})

func FailedContainers

func FailedContainers(pod *api.Pod) map[string]ContainerFailures

FailedContainers inspects all containers in a pod and returns failure information for containers that have failed or been restarted. A map is returned where the key is the containerID and the value is a struct containing the restart and failure information

func Failf

func Failf(format string, args ...interface{})

func FilterNodes

func FilterNodes(nodeList *api.NodeList, fn func(node api.Node) bool)

Filters nodes in NodeList in place, removing nodes that do not satisfy the given condition TODO: consider merging with pkg/client/cache.NodeLister

func FormatRuntimeOperationErrorRate

func FormatRuntimeOperationErrorRate(nodesResult map[string]NodeRuntimeOperationErrorRate) string

FormatRuntimeOperationErrorRate formats the runtime operation error rate to string.

func GetHostExternalAddress

func GetHostExternalAddress(client *client.Client, p *api.Pod) (externalAddress string, err error)

GetHostExternalAddress gets the node for a pod and returns the first External address. Returns an error if the node the pod is on doesn't have an External address.

func GetKubeletHeapStats

func GetKubeletHeapStats(c *client.Client, nodeName string) (string, error)

func GetKubeletPods

func GetKubeletPods(c *client.Client, node string) (*api.PodList, error)

GetKubeletPods retrieves the list of pods on the kubelet

func GetKubeletRunningPods

func GetKubeletRunningPods(c *client.Client, node string) (*api.PodList, error)

GetKubeletRunningPods retrieves the list of running pods on the kubelet. The pods includes necessary information (e.g., UID, name, namespace for pods/containers), but do not contain the full spec.

func GetMasterHost

func GetMasterHost() string

func GetNodePortURL

func GetNodePortURL(client *client.Client, ns, name string, svcPort int) (string, error)

GetNodePortURL returns the url to a nodeport Service.

func GetPauseImageName

func GetPauseImageName(c *client.Client) string

GetPauseImageName fetches the pause image name for the same architecture as the apiserver.

func GetPauseImageNameForHostArch

func GetPauseImageNameForHostArch() string

GetPauseImageNameForHostArch fetches the pause image name for the same architecture the test is running on.

func GetPodLogs

func GetPodLogs(c *client.Client, namespace, podName, containerName string) (string, error)

func GetPodsInNamespace

func GetPodsInNamespace(c *client.Client, ns string, ignoreLabels map[string]string) ([]*api.Pod, error)

func GetReadySchedulableNodesOrDie

func GetReadySchedulableNodesOrDie(c *client.Client) (nodes *api.NodeList)

GetReadySchedulableNodesOrDie addresses the common use case of getting nodes you can do work on. 1) Needs to be schedulable. 2) Needs to be ready. If EITHER 1 or 2 is not true, most tests will want to ignore the node entirely.

func GetServerArchitecture

func GetServerArchitecture(c *client.Client) string

GetServerArchitecture fetches the architecture of the cluster's apiserver.

func GetServicesProxyRequest

func GetServicesProxyRequest(c *client.Client, request *restclient.Request) (*restclient.Request, error)

func GetSigner

func GetSigner(provider string) (ssh.Signer, error)

GetSigner returns an ssh.Signer for the provider ("gce", etc.) that can be used to SSH to their nodes.

func GetValidDNSSubdomainName

func GetValidDNSSubdomainName(name string) (string, error)

GetValidDNSSubdomainName massages the given name to be a valid dns subdomain name. Most resources (such as secrets, clusters) require the names to be valid dns subdomain. This is a generic function (not specific to federation). Should be moved to a more generic location if others want to use it.

func HighLatencyRequests

func HighLatencyRequests(c *client.Client) (int, error)

Prints top five summary metrics for request types with latency and returns number of such request types above threshold.

func IsNodeConditionSetAsExpected

func IsNodeConditionSetAsExpected(node *api.Node, conditionType api.NodeConditionType, wantTrue bool) bool

func IsNodeConditionSetAsExpectedSilent

func IsNodeConditionSetAsExpectedSilent(node *api.Node, conditionType api.NodeConditionType, wantTrue bool) bool

func IsNodeConditionUnset

func IsNodeConditionUnset(node *api.Node, conditionType api.NodeConditionType) bool

func IssueSSHCommand

func IssueSSHCommand(cmd, provider string, node *api.Node) error

func KubeDescribe

func KubeDescribe(text string, body func()) bool

Wrapper function for ginkgo describe. Adds namespacing. TODO: Support type safe tagging as well https://github.com/kubernetes/kubernetes/pull/22401.

func KubectlCmd

func KubectlCmd(args ...string) *exec.Cmd

KubectlCmd runs the kubectl executable through the wrapper script.

func KubectlVersion

func KubectlVersion() (semver.Version, error)

KubectlVersion gets the version of kubectl that's currently being used (see --kubectl-path in e2e.go to use an alternate kubectl).

func KubectlVersionGTE

func KubectlVersionGTE(v semver.Version) (bool, error)

KubectlVersionGTE returns true if the kubectl version is greater than or equal to v.

func LaunchHostExecPod

func LaunchHostExecPod(client *client.Client, ns, name string) *api.Pod

LaunchHostExecPod launches a hostexec pod in the given namespace and waits until it's Running

func LaunchWebserverPod

func LaunchWebserverPod(f *Framework, podName, nodeName string) (ip string)

LaunchWebserverPod launches a pod serving http on port 8080 to act as the target for networking connectivity checks. The ip address of the created pod will be returned if the pod is launched successfully.

func LoadClient

func LoadClient() (*client.Client, error)

func LoadConfig

func LoadConfig() (*restclient.Config, error)

func LoadFederatedConfig

func LoadFederatedConfig() (*restclient.Config, error)

func LoadFederationClient

func LoadFederationClient() (*unversionedfederation.FederationClient, error)

func LoadFederationClientset

func LoadFederationClientset() (*federation_internalclientset.Clientset, error)

func LoadFederationClientset_1_3

func LoadFederationClientset_1_3() (*federation_release_1_3.Clientset, error)

func LogContainersInPodsWithLabels

func LogContainersInPodsWithLabels(c *client.Client, ns string, match map[string]string, containerSubstr string)

func LogFailedContainers

func LogFailedContainers(c *client.Client, ns string)

func LogPodsWithLabels

func LogPodsWithLabels(c *client.Client, ns string, match map[string]string)

func LogSSHResult

func LogSSHResult(result SSHResult)

func LogSuspiciousLatency

func LogSuspiciousLatency(latencyData []PodLatencyData, latencyDataLag []PodLatencyData, nodeCount int, c *client.Client)

LogSuspiciousLatency logs metrics/docker errors from all nodes that had slow startup times If latencyDataLag is nil then it will be populated from latencyData

func Logf

func Logf(format string, args ...interface{})

func LookForString

func LookForString(expectedString string, timeout time.Duration, fn func() string) (result string, err error)

Looks for the given string in the output of fn, repeatedly calling fn until the timeout is reached or the string is found. Returns last log and possibly error if the string was not found.

func LookForStringInFile

func LookForStringInFile(ns, podName, container, file, expectedString string, timeout time.Duration) (result string, err error)

Looks for the given string in a file in a specific pod container

func LookForStringInLog

func LookForStringInLog(ns, podName, container, expectedString string, timeout time.Duration) (result string, err error)

Looks for the given string in the log of a specific pod container

func LookForStringInPodExec

func LookForStringInPodExec(ns, podName string, command []string, expectedString string, timeout time.Duration) (result string, err error)

Looks for the given string in the output of a command executed in a specific pod container

func MigRollingUpdate

func MigRollingUpdate(tmpl string, nt time.Duration) error

MigRollingUpdate starts a MIG rolling update, upgrading the nodes to a new instance template named tmpl, and waits up to nt times the number of nodes for it to complete.

func MigTemplate

func MigTemplate() (string, error)

MigTemplate (GCE-only) returns the name of the MIG template that the nodes of the cluster use.

func NewHostExecPodSpec

func NewHostExecPodSpec(ns, name string) *api.Pod

NewHostExecPodSpec returns the pod spec of hostexec pod

func NewKubectlCommand

func NewKubectlCommand(args ...string) *kubectlBuilder

func NewResourceUsageGatherer

func NewResourceUsageGatherer(c *client.Client, options ResourceGathererOptions) (*containerResourceGatherer, error)

func NodeAddresses

func NodeAddresses(nodelist *api.NodeList, addrType api.NodeAddressType) []string

NodeAddresses returns the first address of the given type of each node.

func NodeProxyRequest

func NodeProxyRequest(c *client.Client, node, endpoint string) (restclient.Result, error)

NodeProxyRequest performs a get on a node proxy endpoint given the nodename and rest client.

func NodeSSHHosts

func NodeSSHHosts(c *client.Client) ([]string, error)

NodeSSHHosts returns SSH-able host names for all schedulable nodes - this excludes master node. It returns an error if it can't find an external IP for every node, though it still returns all hosts that it found in that case.

func OpenWebSocketForURL

func OpenWebSocketForURL(url *url.URL, config *restclient.Config, protocols []string) (*websocket.Conn, error)

OpenWebSocketForURL constructs a websocket connection to the provided URL, using the client config, with the specified protocols.

func ParseKVLines

func ParseKVLines(output, key string) string

ParseKVLines parses output that looks like lines containing "<key>: <val>" and returns <val> if <key> is found. Otherwise, it returns the empty string.

func PodNotReady

func PodNotReady(p *api.Pod) (bool, error)

PodNotReady checks whether pod p's has a ready condition of status false.

func PodProxyResponseChecker

func PodProxyResponseChecker(c *client.Client, ns string, label labels.Selector, controllerName string, respondName bool, pods *api.PodList) podProxyResponseChecker

func PodRunningReady

func PodRunningReady(p *api.Pod) (bool, error)

PodRunningReady checks whether pod p's phase is running and it has a ready condition of status true.

func PodRunningReadyOrSucceeded

func PodRunningReadyOrSucceeded(p *api.Pod) (bool, error)

func PodsCreated

func PodsCreated(c *client.Client, ns, name string, replicas int32) (*api.PodList, error)

func PodsResponding

func PodsResponding(c *client.Client, ns, name string, wantName bool, pods *api.PodList) error

func PrettyPrintJSON

func PrettyPrintJSON(metrics interface{}) string

func PrintAllKubeletPods

func PrintAllKubeletPods(c *client.Client, nodeName string)

func PrintLatencies

func PrintLatencies(latencies []PodLatencyData, header string)

func PrintPerfData

func PrintPerfData(p *perftype.PerfData)

PrintPerfData prints the perfdata in json format with PerfResultTag prefix. If an error occurs, nothing will be printed.

func ProviderIs

func ProviderIs(providers ...string) bool

func ReadOrDie

func ReadOrDie(filePath string) []byte

ReadOrDie reads a file from gobindata. To generate gobindata, run

# Install the program go get -u github.com/jteeuwen/go-bindata/...

Generate the bindata file.

go-bindata \
  -pkg generated -ignore .jpg -ignore .png -ignore .md \
  ./examples/* ./docs/user-guide/* test/e2e/testing-manifests/kubectl/* test/images/*

# Copy it into the generated directory if the results are what you expected. cp bindata.go test/e2e/generated

# Don't forget to gofmt it gofmt -s -w test/e2e/generated/bindata.go

func RegisterFlags

func RegisterFlags()

func RemoveCleanupAction

func RemoveCleanupAction(p CleanupActionHandle)

RemoveCleanupAction removes a function that was installed by AddCleanupAction.

func ResetMetrics

func ResetMetrics(c *client.Client) error

Resets latency metrics in apiserver.

func ResourceUsageToPerfData

func ResourceUsageToPerfData(usagePerNode ResourceUsagePerNode) *perftype.PerfData

ResourceUsageToPerfData transforms ResourceUsagePerNode to PerfData. Notice that this function only cares about memory usage, because cpu usage information will be extracted from NodesCPUSummary.

func RestartApiserver

func RestartApiserver(c *client.Client) error

func RestartKubeProxy

func RestartKubeProxy(host string) error

func RunCleanupActions

func RunCleanupActions()

RunCleanupActions runs all functions installed by AddCleanupAction. It does not remove them (see RemoveCleanupAction) but it does run unlocked, so they may remove themselves.

func RunCmd

func RunCmd(command string, args ...string) (string, string, error)

RunCmd runs cmd using args and returns its stdout and stderr. It also outputs cmd's stdout and stderr to their respective OS streams.

func RunDeployment

func RunDeployment(config DeploymentConfig) error

RunDeployment Launches (and verifies correctness) of a Deployment and will wait for all pods it spawns to become "Running". It's the caller's responsibility to clean up externally (i.e. use the namespace lifecycle for handling Cleanup).

func RunHostCmd

func RunHostCmd(ns, name, cmd string) (string, error)

RunHostCmd runs the given cmd in the context of the given pod using `kubectl exec` inside of a shell.

func RunHostCmdOrDie

func RunHostCmdOrDie(ns, name, cmd string) string

RunHostCmdOrDie calls RunHostCmd and dies on error.

func RunKubectl

func RunKubectl(args ...string) (string, error)

RunKubectl is a convenience wrapper over kubectlBuilder

func RunKubectlOrDie

func RunKubectlOrDie(args ...string) string

RunKubectlOrDie is a convenience wrapper over kubectlBuilder

func RunKubectlOrDieInput

func RunKubectlOrDieInput(data string, args ...string) string

RunKubectlOrDieInput is a convenience wrapper over kubectlBuilder that takes input to stdin

func RunKubernetesServiceTestContainer

func RunKubernetesServiceTestContainer(c *client.Client, repoRoot string, ns string)

Run a test container to try and contact the Kubernetes api-server from a pod, wait for it to flip to Ready, log its output and delete it.

func RunRC

func RunRC(config RCConfig) error

RunRC Launches (and verifies correctness) of a Replication Controller and will wait for all pods it spawns to become "Running". It's the caller's responsibility to clean up externally (i.e. use the namespace lifecycle for handling Cleanup).

func RunReplicaSet

func RunReplicaSet(config ReplicaSetConfig) error

RunReplicaSet launches (and verifies correctness) of a ReplicaSet and waits until all the pods it launches to reach the "Running" state. It's the caller's responsibility to clean up externally (i.e. use the namespace lifecycle for handling Cleanup).

func ScaleRC

func ScaleRC(c *client.Client, ns, name string, size uint, wait bool) error

func ScaleRCByLabels

func ScaleRCByLabels(client *client.Client, ns string, l map[string]string, replicas uint) error

ScaleRCByLabels scales an RC via ns/label lookup. If replicas == 0 it waits till none are running, otherwise it does what a synchronous scale operation would do.

func ServerVersionGTE

func ServerVersionGTE(v semver.Version, c discovery.ServerVersionInterface) (bool, error)

ServerVersionGTE returns true if v is greater than or equal to the server version.

TODO(18726): This should be incorporated into client.VersionInterface.

func ServiceResponding

func ServiceResponding(c *client.Client, ns, name string) error

func SkipIfProviderIs

func SkipIfProviderIs(unsupportedProviders ...string)

func SkipUnlessAtLeast

func SkipUnlessAtLeast(value int, minValue int, message string)

func SkipUnlessFederated

func SkipUnlessFederated(c *client.Client)

Detects whether the federation namespace exists in the underlying cluster

func SkipUnlessKubectlVersionGTE added in v1.3.8

func SkipUnlessKubectlVersionGTE(v semver.Version)

func SkipUnlessNodeCountIsAtLeast

func SkipUnlessNodeCountIsAtLeast(minNodeCount int)

func SkipUnlessProviderIs

func SkipUnlessProviderIs(supportedProviders ...string)

func SkipUnlessServerVersionGTE

func SkipUnlessServerVersionGTE(v semver.Version, c discovery.ServerVersionInterface)

func SkipUnlessServerVersionLT added in v1.3.8

func SkipUnlessServerVersionLT(v semver.Version, c discovery.ServerVersionInterface)

func Skipf

func Skipf(format string, args ...interface{})

func StartCmdAndStreamOutput

func StartCmdAndStreamOutput(cmd *exec.Cmd) (stdout, stderr io.ReadCloser, err error)

func StartPods

func StartPods(c *client.Client, replicas int, namespace string, podNamePrefix string, pod api.Pod, waitForRunning bool)

Simplified version of RunRC, that does not create RC, but creates plain Pods. optionally waits for pods to start running (if waitForRunning == true)

func TargetContainers

func TargetContainers() []string

A list of containers for which we want to collect resource usage.

func TestContainerOutput

func TestContainerOutput(scenarioName string, c *client.Client, pod *api.Pod, containerIndex int, expectedOutput []string, ns string)

TestContainerOutput runs the given pod in the given namespace and waits for all of the containers in the podSpec to move into the 'Success' status, and tests the specified container log against the given expected output using a substring matcher.

func TryKill

func TryKill(cmd *exec.Cmd)

Rough equivalent of ctrl+c for cleaning up processes. Intended to be run in defer.

func UnblockNetwork

func UnblockNetwork(from string, to string)

func UpdateDeploymentWithRetries

func UpdateDeploymentWithRetries(c *clientset.Clientset, namespace, name string, applyUpdate updateDeploymentFunc) (deployment *extensions.Deployment, err error)

func UpdatePodWithRetries

func UpdatePodWithRetries(client *client.Client, ns, name string, update func(*api.Pod)) (*api.Pod, error)

func ValidateController

func ValidateController(c *client.Client, containerImage string, replicas int, containername string, testname string, validator validatorFn, ns string)

ValidateController is a generic mechanism for testing RC's that are running. It takes a container name, a test name, and a validator function which is plugged in by a specific test. "containername": this is grepped for. "containerImage" : this is the name of the image we expect to be launched. Not to confuse w/ images (kitten.jpg) which are validated. "testname": which gets bubbled up to the logging/failure messages if errors happen. "validator" function: This function is given a podID and a client, and it can do some specific validations that way.

func VerifyPodStartupLatency

func VerifyPodStartupLatency(latency PodStartupLatency) error

Verifies whether 50, 90 and 99th percentiles of PodStartupLatency are within the threshold.

func VerifyPods

func VerifyPods(c *client.Client, ns, name string, wantName bool, replicas int32) error

func VerifySchedulerLatency

func VerifySchedulerLatency(c *client.Client) error

Verifies (currently just by logging them) the scheduling latencies.

func WaitForAllNodesSchedulable

func WaitForAllNodesSchedulable(c *client.Client) error

func WaitForApiserverUp

func WaitForApiserverUp(c *client.Client) error

func WaitForClusterSize

func WaitForClusterSize(c *client.Client, size int, timeout time.Duration) error

WaitForClusterSize waits until the cluster has desired size and there is no not-ready nodes in it. By cluster size we mean number of Nodes excluding Master Node.

func WaitForDefaultServiceAccountInNamespace

func WaitForDefaultServiceAccountInNamespace(c *client.Client, namespace string) error

WaitForDefaultServiceAccountInNamespace waits for the default service account to be provisioned the default service account is what is associated with pods when they do not specify a service account as a result, pods are not able to be provisioned in a namespace until the service account is provisioned

func WaitForDeploymentOldRSsNum

func WaitForDeploymentOldRSsNum(c *clientset.Clientset, ns, deploymentName string, desiredRSNum int) error

Waits for the deployment to clean up old rcs.

func WaitForDeploymentRevisionAndImage

func WaitForDeploymentRevisionAndImage(c clientset.Interface, ns, deploymentName string, revision, image string) error

WaitForDeploymentRevisionAndImage waits for the deployment's and its new RS's revision and container image to match the given revision and image. Note that deployment revision and its new RS revision should be updated shortly, so we only wait for 1 minute here to fail early.

func WaitForDeploymentRollbackCleared

func WaitForDeploymentRollbackCleared(c clientset.Interface, ns, deploymentName string) error

WaitForDeploymentRollbackCleared waits for given deployment either started rolling back or doesn't need to rollback. Note that rollback should be cleared shortly, so we only wait for 1 minute here to fail early.

func WaitForDeploymentStatus

func WaitForDeploymentStatus(c clientset.Interface, ns, deploymentName string, desiredUpdatedReplicas, minAvailable, maxCreated, minReadySeconds int32) error

Waits for the deployment to reach desired state. Returns an error if minAvailable or maxCreated is broken at any times.

func WaitForDeploymentUpdatedReplicasLTE

func WaitForDeploymentUpdatedReplicasLTE(c clientset.Interface, ns, deploymentName string, minUpdatedReplicas int, desiredGeneration int64) error

WaitForDeploymentUpdatedReplicasLTE waits for given deployment to be observed by the controller and has at least a number of updatedReplicas

func WaitForEndpoint

func WaitForEndpoint(c *client.Client, ns, name string) error

func WaitForEvents

func WaitForEvents(c *client.Client, ns string, objOrRef runtime.Object, desiredEventsCount int) error

Waits for the number of events on the given object to reach a desired count.

func WaitForFederationApiserverReady

func WaitForFederationApiserverReady(c *federation_internalclientset.Clientset) error

WaitForFederationApiserverReady waits for the federation apiserver to be ready. It tests the readiness by sending a GET request and expecting a non error response.

func WaitForIngressAddress

func WaitForIngressAddress(c *client.Client, ns, ingName string, timeout time.Duration) (string, error)

WaitForIngressAddress waits for the Ingress to acquire an address.

func WaitForMatchPodsCondition

func WaitForMatchPodsCondition(c *client.Client, opts api.ListOptions, desc string, timeout time.Duration, condition podCondition) error

WaitForMatchPodsCondition finds match pods based on the input ListOptions. waits and checks if all match pods are in the given podCondition

func WaitForNamespacesDeleted

func WaitForNamespacesDeleted(c *client.Client, namespaces []string, timeout time.Duration) error

func WaitForNodeToBe

func WaitForNodeToBe(c *client.Client, name string, conditionType api.NodeConditionType, wantTrue bool, timeout time.Duration) bool

WaitForNodeToBe returns whether node "name's" condition state matches wantTrue within timeout. If wantTrue is true, it will ensure the node condition status is ConditionTrue; if it's false, it ensures the node condition is in any state other than ConditionTrue (e.g. not true or unknown).

func WaitForNodeToBeNotReady

func WaitForNodeToBeNotReady(c *client.Client, name string, timeout time.Duration) bool

WaitForNodeToBeNotReady returns whether node name is not ready (i.e. the readiness condition is anything but ready, e.g false or unknown) within timeout.

func WaitForNodeToBeReady

func WaitForNodeToBeReady(c *client.Client, name string, timeout time.Duration) bool

WaitForNodeToBeReady returns whether node name is ready within timeout.

func WaitForObservedDeployment

func WaitForObservedDeployment(c *clientset.Clientset, ns, deploymentName string, desiredGeneration int64) error

func WaitForPartialEvents

func WaitForPartialEvents(c *client.Client, ns string, objOrRef runtime.Object, atLeastEventsCount int) error

Waits for the number of events on the given object to be at least a desired count.

func WaitForPersistentVolumeClaimPhase

func WaitForPersistentVolumeClaimPhase(phase api.PersistentVolumeClaimPhase, c *client.Client, ns string, pvcName string, Poll, timeout time.Duration) error

WaitForPersistentVolumeClaimPhase waits for a PersistentVolumeClaim to be in a specific phase or until timeout occurs, whichever comes first.

func WaitForPersistentVolumeDeleted

func WaitForPersistentVolumeDeleted(c *client.Client, pvName string, Poll, timeout time.Duration) error

WaitForPersistentVolumeDeleted waits for a PersistentVolume to get deleted or until timeout occurs, whichever comes first.

func WaitForPersistentVolumePhase

func WaitForPersistentVolumePhase(phase api.PersistentVolumePhase, c *client.Client, pvName string, Poll, timeout time.Duration) error

WaitForPersistentVolumePhase waits for a PersistentVolume to be in a specific phase or until timeout occurs, whichever comes first.

func WaitForPodNoLongerRunningInNamespace

func WaitForPodNoLongerRunningInNamespace(c *client.Client, podName string, namespace string) error

Waits default amount of time (podNoLongerRunningTimeout) for the specified pod to stop running. Returns an error if timeout occurs first.

func WaitForPodNotPending

func WaitForPodNotPending(c *client.Client, ns, podName string) error

WaitForPodNotPending returns an error if it took too long for the pod to go out of pending state.

func WaitForPodRunningInNamespace

func WaitForPodRunningInNamespace(c *client.Client, podName string, namespace string) error

Waits default amount of time (PodStartTimeout) for the specified pod to become running. Returns an error if timeout occurs first, or pod goes in to failed state.

func WaitForPodSuccessInNamespace

func WaitForPodSuccessInNamespace(c *client.Client, podName string, contName string, namespace string) error

WaitForPodSuccessInNamespace returns nil if the pod reached state success, or an error if it reached failure or until podStartupTimeout.

func WaitForPodSuccessInNamespaceSlow

func WaitForPodSuccessInNamespaceSlow(c *client.Client, podName string, contName string, namespace string) error

WaitForPodSuccessInNamespaceSlow returns nil if the pod reached state success, or an error if it reached failure or until slowPodStartupTimeout.

func WaitForPodToDisappear

func WaitForPodToDisappear(c *client.Client, ns, podName string, label labels.Selector, interval, timeout time.Duration) error

func WaitForPodsReady

func WaitForPodsReady(c *clientset.Clientset, ns, name string, minReadySeconds int) error

func WaitForPodsRunningReady

func WaitForPodsRunningReady(c *client.Client, ns string, minPods int32, timeout time.Duration, ignoreLabels map[string]string, restartDockerOnFailures bool) error

WaitForPodsRunningReady waits up to timeout to ensure that all pods in namespace ns are either running and ready, or failed but controlled by a replication controller. Also, it ensures that at least minPods are running and ready. It has separate behavior from other 'wait for' pods functions in that it requires the list of pods on every iteration. This is useful, for example, in cluster startup, because the number of pods increases while waiting. If ignoreLabels is not empty, pods matching this selector are ignored and this function waits for minPods to enter Running/Ready and for all pods matching ignoreLabels to enter Success phase. Otherwise an error is returned even if there are minPods pods, some of which are in Running/Ready and some in Success. This is to allow the client to decide if "Success" means "Ready" or not.

func WaitForPodsSuccess

func WaitForPodsSuccess(c *client.Client, ns string, successPodLabels map[string]string, timeout time.Duration) error

WaitForPodsSuccess waits till all labels matching the given selector enter the Success state. The caller is expected to only invoke this method once the pods have been created.

func WaitForPodsWithLabel

func WaitForPodsWithLabel(c *client.Client, ns string, label labels.Selector) (pods *api.PodList, err error)

Wait up to PodListTimeout for getting pods with certain label

func WaitForPodsWithLabelRunning

func WaitForPodsWithLabelRunning(c *client.Client, ns string, label labels.Selector) error

Wait up to 10 minutes for all matching pods to become Running and at least one matching pod exists.

func WaitForPodsWithLabelScheduled

func WaitForPodsWithLabelScheduled(c *client.Client, ns string, label labels.Selector) (pods *api.PodList, err error)

Wait for all matching pods to become scheduled and at least one matching pod exists. Return the list of matching pods.

func WaitForRCPodToDisappear

func WaitForRCPodToDisappear(c *client.Client, ns, rcName, podName string) error

WaitForRCPodToDisappear returns nil if the pod from the given replication controller (described by rcName) no longer exists. In case of failure or too long waiting time, an error is returned.

func WaitForRCPodsRunning

func WaitForRCPodsRunning(c *client.Client, ns, rcName string) error

Wait up to 10 minutes for pods to become Running. Assume that the pods of the rc are labels with {"name":rcName}.

func WaitForRCToStabilize

func WaitForRCToStabilize(c *client.Client, ns, name string, timeout time.Duration) error

WaitForRCToStabilize waits till the RC has a matching generation/replica count between spec and status.

func WaitForReplicationController

func WaitForReplicationController(c *client.Client, namespace, name string, exist bool, interval, timeout time.Duration) error

WaitForReplicationController waits until the RC appears (exist == true), or disappears (exist == false)

func WaitForService

func WaitForService(c *client.Client, namespace, name string, exist bool, interval, timeout time.Duration) error

WaitForService waits until the service appears (exist == true), or disappears (exist == false)

func WaitForServiceEndpointsNum

func WaitForServiceEndpointsNum(c *client.Client, namespace, serviceName string, expectNum int, interval, timeout time.Duration) error

WaitForServiceEndpointsNum waits until the amount of endpoints that implement service to expectNum.

Types

type APICall

type APICall struct {
	Resource string        `json:"resource"`
	Verb     string        `json:"verb"`
	Latency  LatencyMetric `json:"latency"`
}

type APIResponsiveness

type APIResponsiveness struct {
	APICalls []APICall `json:"apicalls"`
}

func (APIResponsiveness) Len

func (a APIResponsiveness) Len() int

func (APIResponsiveness) Less

func (a APIResponsiveness) Less(i, j int) bool

func (APIResponsiveness) Swap

func (a APIResponsiveness) Swap(i, j int)

type CleanupActionHandle

type CleanupActionHandle *int

func AddCleanupAction

func AddCleanupAction(fn func()) CleanupActionHandle

AddCleanupAction installs a function that will be called in the event of the whole test being terminated. This allows arbitrary pieces of the overall test to hook into SynchronizedAfterSuite().

type ClientConfigGetter

type ClientConfigGetter func() (*restclient.Config, error)

type CloudConfig

type CloudConfig struct {
	ProjectID         string
	Zone              string
	Cluster           string
	MasterName        string
	NodeInstanceGroup string
	NumNodes          int
	ClusterTag        string
	ServiceAccount    string

	Provider cloudprovider.Interface
}

type ClusterVerification

type ClusterVerification struct {
	// contains filtered or unexported fields
}

func (*ClusterVerification) ForEach

func (cl *ClusterVerification) ForEach(podFunc func(api.Pod)) error

ForEach runs a function against every verifiable pod. Be warned that this doesn't wait for "n" pods to verifiy, so it may return very quickly if you have strict pod state requirements.

For example, if you require at least 5 pods to be running before your test will pass, its smart to first call "clusterVerification.WaitFor(5)" before you call clusterVerification.ForEach.

func (*ClusterVerification) WaitFor

func (cl *ClusterVerification) WaitFor(atLeast int, timeout time.Duration) ([]api.Pod, error)

WaitFor waits for some minimum number of pods to be verified, according to the PodStateVerification definition.

func (*ClusterVerification) WaitForOrFail

func (cl *ClusterVerification) WaitForOrFail(atLeast int, timeout time.Duration)

WaitForOrFail provides a shorthand WaitFor with failure as an option if anything goes wrong.

type ContainerFailures

type ContainerFailures struct {
	Restarts int
	// contains filtered or unexported fields
}

type ContainerResourceUsage

type ContainerResourceUsage struct {
	Name                    string
	Timestamp               time.Time
	CPUUsageInCores         float64
	MemoryUsageInBytes      uint64
	MemoryWorkingSetInBytes uint64
	MemoryRSSInBytes        uint64
	// The interval used to calculate CPUUsageInCores.
	CPUInterval time.Duration
}

type ContainersCPUSummary

type ContainersCPUSummary map[string]map[float64]float64

ContainersCPUSummary is indexed by the container name with each entry a (percentile, value) map.

type CreateTestingNSFn

type CreateTestingNSFn func(baseName string, c *client.Client, labels map[string]string) (*api.Namespace, error)

type DeploymentConfig

type DeploymentConfig struct {
	RCConfig
}

type E2EContext

type E2EContext struct {
	// Raw context name,
	RawName string `yaml:"rawName"`
	// A valid dns subdomain which can be used as the name of kubernetes resources.
	Name    string       `yaml:"name"`
	Cluster *KubeCluster `yaml:"cluster"`
	User    *KubeUser    `yaml:"user"`
}

type Framework

type Framework struct {
	BaseName string

	ClientConfigGetter ClientConfigGetter
	Client             *client.Client
	Clientset_1_2      *release_1_2.Clientset
	Clientset_1_3      *release_1_3.Clientset

	// TODO(mml): Remove this.  We should generally use the versioned clientset.
	FederationClientset     *federation_internalclientset.Clientset
	FederationClientset_1_3 *federation_release_1_3.Clientset
	// TODO: remove FederationClient, all the client access must be through FederationClientset
	FederationClient *unversionedfederation.FederationClient

	Namespace *api.Namespace // Every test has at least one namespace

	NamespaceDeletionTimeout time.Duration

	// Constraints that passed to a check which is executed after data is gathered to
	// see if 99% of results are within acceptable bounds. It as to be injected in the test,
	// as expectations vary greatly. Constraints are groupped by the container names.
	AddonResourceConstraints map[string]ResourceConstraint
	// contains filtered or unexported fields
}

Framework supports common operations used by e2e tests; it will keep a client & a namespace for you. Eventual goal is to merge this with integration test framework.

func NewDefaultFederatedFramework

func NewDefaultFederatedFramework(baseName string) *Framework

func NewDefaultFramework

func NewDefaultFramework(baseName string) *Framework

NewFramework makes a new framework and sets up a BeforeEach/AfterEach for you (you can write additional before/after each functions).

func NewFramework

func NewFramework(baseName string, options FrameworkOptions, client *client.Client) *Framework

func NewFrameworkWithConfigGetter

func NewFrameworkWithConfigGetter(baseName string, options FrameworkOptions, client *client.Client, configGetter ClientConfigGetter) *Framework

func (*Framework) AfterEach

func (f *Framework) AfterEach()

AfterEach deletes the namespace, after reading its events.

func (*Framework) BeforeEach

func (f *Framework) BeforeEach()

BeforeEach gets a client and makes a namespace.

func (*Framework) CreateNamespace

func (f *Framework) CreateNamespace(baseName string, labels map[string]string) (*api.Namespace, error)

func (*Framework) CreatePodsPerNodeForSimpleApp

func (f *Framework) CreatePodsPerNodeForSimpleApp(appName string, podSpec func(n api.Node) api.PodSpec, maxCount int) map[string]string

CreatePodsPerNodeForSimpleApp Creates pods w/ labels. Useful for tests which make a bunch of pods w/o any networking.

func (*Framework) CreateServiceForSimpleApp

func (f *Framework) CreateServiceForSimpleApp(contPort, svcPort int, appName string) *api.Service

CreateServiceForSimpleApp returns a service that selects/exposes pods (send -1 ports if no exposure needed) with an app label.

func (*Framework) CreateServiceForSimpleAppWithPods

func (f *Framework) CreateServiceForSimpleAppWithPods(contPort int, svcPort int, appName string, podSpec func(n api.Node) api.PodSpec, count int, block bool) (error, *api.Service)

CreateServiceForSimpleAppWithPods is a convenience wrapper to create a service and its matching pods all at once.

func (*Framework) GetUnderlyingFederatedContexts

func (f *Framework) GetUnderlyingFederatedContexts() []E2EContext

func (*Framework) NewClusterVerification

func (f *Framework) NewClusterVerification(filter PodStateVerification) *ClusterVerification

func (*Framework) ReadFileViaContainer

func (f *Framework) ReadFileViaContainer(podName, containerName string, path string) (string, error)

Read a file using kubectl exec cat <path>

func (*Framework) TestContainerOutput

func (f *Framework) TestContainerOutput(scenarioName string, pod *api.Pod, containerIndex int, expectedOutput []string)

Runs the given pod and verifies that the output of exact container matches the desired output.

func (*Framework) TestContainerOutputRegexp

func (f *Framework) TestContainerOutputRegexp(scenarioName string, pod *api.Pod, containerIndex int, expectedOutput []string)

Runs the given pod and verifies that the output of exact container matches the desired regexps.

func (*Framework) WaitForAnEndpoint

func (f *Framework) WaitForAnEndpoint(serviceName string) error

WaitForAnEndpoint waits for at least one endpoint to become available in the service's corresponding endpoints object.

func (*Framework) WaitForPodNoLongerRunning

func (f *Framework) WaitForPodNoLongerRunning(podName string) error

WaitForPodNoLongerRunning waits for the pod to no longer be running in the namespace, for either success or failure.

func (*Framework) WaitForPodReady

func (f *Framework) WaitForPodReady(podName string) error

WaitForPodReady waits for the pod to flip to ready in the namespace.

func (*Framework) WaitForPodRunning

func (f *Framework) WaitForPodRunning(podName string) error

WaitForPodRunning waits for the pod to run in the namespace.

func (*Framework) WaitForPodRunningSlow

func (f *Framework) WaitForPodRunningSlow(podName string) error

WaitForPodRunningSlow waits for the pod to run in the namespace. It has a longer timeout then WaitForPodRunning (util.slowPodStartTimeout).

func (*Framework) WaitForPodTerminated

func (f *Framework) WaitForPodTerminated(podName, reason string) error

WaitForPodTerminated waits for the pod to be terminated with the given reason.

func (*Framework) WriteFileViaContainer

func (f *Framework) WriteFileViaContainer(podName, containerName string, path string, contents string) error

Write a file using kubectl exec echo <contents> > <path> via specified container Because of the primitive technique we're using here, we only allow ASCII alphanumeric characters

type FrameworkOptions

type FrameworkOptions struct {
	ClientQPS   float32
	ClientBurst int
}

type InvariantFunc

type InvariantFunc func(older, newer runtime.Object) error

type KubeCluster

type KubeCluster struct {
	Name    string `yaml:"name"`
	Cluster struct {
		CertificateAuthorityData string `yaml:"certificate-authority-data"`
		Server                   string `yaml:"server"`
	} `yaml:"cluster"`
}

type KubeConfig

type KubeConfig struct {
	Contexts []struct {
		Name    string `yaml:"name"`
		Context struct {
			Cluster string `yaml:"cluster"`
			User    string
		} `yaml:"context"`
	} `yaml:"contexts"`

	Clusters []KubeCluster `yaml:"clusters"`

	Users []KubeUser `yaml:"users"`
}

type KubeUser

type KubeUser struct {
	Name string `yaml:"name"`
	User struct {
		Username string `yaml:"username"`
		Password string `yaml:"password"`
		Token    string `yaml:"token"`
	} `yaml:"user"`
}

type KubeletLatencyMetric

type KubeletLatencyMetric struct {
	// eg: list, info, create
	Operation string
	// eg: sync_pods, pod_worker
	Method string
	// 0 <= quantile <=1, e.g. 0.95 is 95%tile, 0.5 is median.
	Quantile float64
	Latency  time.Duration
}

KubeletMetric stores metrics scraped from the kubelet server's /metric endpoint. TODO: Get some more structure around the metrics and this type

type KubeletLatencyMetrics

type KubeletLatencyMetrics []KubeletLatencyMetric

KubeletMetricByLatency implements sort.Interface for []KubeletMetric based on the latency field.

func GetKubeletLatencyMetrics

func GetKubeletLatencyMetrics(ms metrics.KubeletMetrics) KubeletLatencyMetrics

GetKubeletLatencyMetrics gets all latency related kubelet metrics. Note that the KubeletMetrcis passed in should not contain subsystem prefix.

func HighLatencyKubeletOperations

func HighLatencyKubeletOperations(c *client.Client, threshold time.Duration, nodeName string) (KubeletLatencyMetrics, error)

HighLatencyKubeletOperations logs and counts the high latency metrics exported by the kubelet server via /metrics.

func (KubeletLatencyMetrics) Len

func (a KubeletLatencyMetrics) Len() int

func (KubeletLatencyMetrics) Less

func (a KubeletLatencyMetrics) Less(i, j int) bool

func (KubeletLatencyMetrics) Swap

func (a KubeletLatencyMetrics) Swap(i, j int)

type LatencyMetric

type LatencyMetric struct {
	Perc50 time.Duration `json:"Perc50"`
	Perc90 time.Duration `json:"Perc90"`
	Perc99 time.Duration `json:"Perc99"`
}

Dashboard metrics

func ExtractLatencyMetrics

func ExtractLatencyMetrics(latencies []PodLatencyData) LatencyMetric

type LatencySlice

type LatencySlice []PodLatencyData

func (LatencySlice) Len

func (a LatencySlice) Len() int

func (LatencySlice) Less

func (a LatencySlice) Less(i, j int) bool

func (LatencySlice) Swap

func (a LatencySlice) Swap(i, j int)

type LogSizeDataTimeseries

type LogSizeDataTimeseries map[string]map[string][]TimestampedSize

type LogSizeGatherer

type LogSizeGatherer struct {
	// contains filtered or unexported fields
}

LogSizeGatherer is a worker which grabs a WorkItem from the channel and does assigned work.

func (*LogSizeGatherer) Run

func (g *LogSizeGatherer) Run()

func (*LogSizeGatherer) Work

func (g *LogSizeGatherer) Work() bool

Work does a single unit of work: tries to take out a WorkItem from the queue, ssh-es into a given machine, gathers data, writes it to the shared <data> map, and creates a gorouting which reinserts work item into the queue with a <pollingPeriod> delay. Returns false if worker should exit.

type LogsSizeData

type LogsSizeData struct {
	// contains filtered or unexported fields
}

func (*LogsSizeData) AddNewData

func (d *LogsSizeData) AddNewData(ip, path string, timestamp time.Time, size int)

type LogsSizeDataSummary

type LogsSizeDataSummary map[string]map[string]SingleLogSummary

node -> file -> data

func (*LogsSizeDataSummary) PrintHumanReadable

func (s *LogsSizeDataSummary) PrintHumanReadable() string

TODO: make sure that we don't need locking here

func (*LogsSizeDataSummary) PrintJSON

func (s *LogsSizeDataSummary) PrintJSON() string

type LogsSizeVerifier

type LogsSizeVerifier struct {
	// contains filtered or unexported fields
}

LogsSizeVerifier gathers data about log files sizes from master and node machines. It oversees a <workersNo> workers which do the gathering.

func NewLogsVerifier

func NewLogsVerifier(c *client.Client, stopChannel chan bool) *LogsSizeVerifier

NewLogsVerifier creates a new LogsSizeVerifier which will stop when stopChannel is closed

func (*LogsSizeVerifier) GetSummary

func (s *LogsSizeVerifier) GetSummary() *LogsSizeDataSummary

GetSummary returns a summary (average generation rate and number of probes) of the data gathered by LogSizeVerifier

func (*LogsSizeVerifier) Run

func (v *LogsSizeVerifier) Run()

Run starts log size gathering. It starts a gorouting for every worker and then blocks until stopChannel is closed

type MetricsForE2E

type MetricsForE2E metrics.MetricsCollection

func (*MetricsForE2E) PrintHumanReadable

func (m *MetricsForE2E) PrintHumanReadable() string

func (*MetricsForE2E) PrintJSON

func (m *MetricsForE2E) PrintJSON() string

type NodeRuntimeOperationErrorRate

type NodeRuntimeOperationErrorRate map[string]*RuntimeOperationErrorRate

NodeRuntimeOperationErrorRate is the runtime operation error rate on one node.

type NodesCPUSummary

type NodesCPUSummary map[string]ContainersCPUSummary

NodesCPUSummary is indexed by the node name with each entry a ContainersCPUSummary map.

type PodDiff

type PodDiff map[string]*podInfo

PodDiff is a map of pod name to podInfos

func Diff

func Diff(oldPods []*api.Pod, curPods []*api.Pod) PodDiff

Diff computes a PodDiff given 2 lists of pods.

func (PodDiff) Print

func (p PodDiff) Print(ignorePhases sets.String)

Print formats and prints the give PodDiff.

type PodLatencyData

type PodLatencyData struct {
	// Name of the pod
	Name string
	// Node this pod was running on
	Node string
	// Latency information related to pod startuptime
	Latency time.Duration
}

PodLatencyData encapsulates pod startup latency information.

type PodStartupLatency

type PodStartupLatency struct {
	Latency LatencyMetric `json:"latency"`
}

type PodStateVerification

type PodStateVerification struct {
	// Optional: only pods that have k=v labels will pass this filter.
	Selectors map[string]string

	// Required: The phases which are valid for your pod.
	ValidPhases []api.PodPhase

	// Optional: only pods passing this function will pass the filter
	// Verify a pod.
	// As an optimization, in addition to specfying filter (boolean),
	// this function allows specifying an error as well.
	// The error indicates that the polling of the pod spectrum should stop.
	Verify func(api.Pod) (bool, error)

	// Optional: only pods with this name will pass the filter.
	PodName string
}

PodStateVerification represents a verification of pod state. Any time you have a set of pods that you want to operate against or query, this struct can be used to declaratively identify those pods.

type PodStore

type PodStore struct {
	cache.Store
	// contains filtered or unexported fields
}

Convenient wrapper around cache.Store that returns list of api.Pod instead of interface{}.

func NewPodStore

func NewPodStore(c *client.Client, namespace string, label labels.Selector, field fields.Selector) *PodStore

func (*PodStore) List

func (s *PodStore) List() []*api.Pod

func (*PodStore) Stop

func (s *PodStore) Stop()

type RCConfig

type RCConfig struct {
	Client         *client.Client
	Image          string
	Command        []string
	Name           string
	Namespace      string
	PollInterval   time.Duration
	Timeout        time.Duration
	PodStatusFile  *os.File
	Replicas       int
	CpuRequest     int64 // millicores
	CpuLimit       int64 // millicores
	MemRequest     int64 // bytes
	MemLimit       int64 // bytes
	ReadinessProbe *api.Probe
	DNSPolicy      *api.DNSPolicy

	// Env vars, set the same for every pod.
	Env map[string]string

	// Extra labels added to every pod.
	Labels map[string]string

	// Node selector for pods in the RC.
	NodeSelector map[string]string

	// Ports to declare in the container (map of name to containerPort).
	Ports map[string]int
	// Ports to declare in the container as host and container ports.
	HostPorts map[string]int

	Volumes      []api.Volume
	VolumeMounts []api.VolumeMount

	// Pointer to a list of pods; if non-nil, will be set to a list of pods
	// created by this RC by RunRC.
	CreatedPods *[]*api.Pod

	// Maximum allowable container failures. If exceeded, RunRC returns an error.
	// Defaults to replicas*0.1 if unspecified.
	MaxContainerFailures *int

	// If set to false starting RC will print progress, otherwise only errors will be printed.
	Silent bool
}

type RCStartupStatus

type RCStartupStatus struct {
	Expected              int
	Terminating           int
	Running               int
	RunningButNotReady    int
	Waiting               int
	Pending               int
	Unknown               int
	Inactive              int
	FailedContainers      int
	Created               []*api.Pod
	ContainerRestartNodes sets.String
}

func ComputeRCStartupStatus

func ComputeRCStartupStatus(pods []*api.Pod, expected int) RCStartupStatus

func (*RCStartupStatus) Print

func (s *RCStartupStatus) Print(name string)

type ReplicaSetConfig

type ReplicaSetConfig struct {
	RCConfig
}

type ResourceConstraint

type ResourceConstraint struct {
	CPUConstraint    float64
	MemoryConstraint uint64
}

type ResourceGathererOptions

type ResourceGathererOptions struct {
	// contains filtered or unexported fields
}

type ResourceMonitor

type ResourceMonitor struct {
	// contains filtered or unexported fields
}

ResourceMonitor manages a resourceCollector per node.

func NewResourceMonitor

func NewResourceMonitor(c *client.Client, containerNames []string, pollingInterval time.Duration) *ResourceMonitor

func (*ResourceMonitor) FormatCPUSummary

func (r *ResourceMonitor) FormatCPUSummary(summary NodesCPUSummary) string

func (*ResourceMonitor) FormatResourceUsage

func (r *ResourceMonitor) FormatResourceUsage(s ResourceUsagePerNode) string

func (*ResourceMonitor) GetCPUSummary

func (r *ResourceMonitor) GetCPUSummary() NodesCPUSummary

func (*ResourceMonitor) GetLatest

func (r *ResourceMonitor) GetLatest() (ResourceUsagePerNode, error)

func (*ResourceMonitor) GetMasterNodeCPUSummary

func (r *ResourceMonitor) GetMasterNodeCPUSummary(summaryPerNode NodesCPUSummary) NodesCPUSummary

func (*ResourceMonitor) GetMasterNodeLatest

func (r *ResourceMonitor) GetMasterNodeLatest(usagePerNode ResourceUsagePerNode) ResourceUsagePerNode

func (*ResourceMonitor) LogCPUSummary

func (r *ResourceMonitor) LogCPUSummary()

func (*ResourceMonitor) LogLatest

func (r *ResourceMonitor) LogLatest()

func (*ResourceMonitor) Reset

func (r *ResourceMonitor) Reset()

func (*ResourceMonitor) Start

func (r *ResourceMonitor) Start()

func (*ResourceMonitor) Stop

func (r *ResourceMonitor) Stop()

type ResourceUsagePerContainer

type ResourceUsagePerContainer map[string]*ContainerResourceUsage

type ResourceUsagePerNode

type ResourceUsagePerNode map[string]ResourceUsagePerContainer

type ResourceUsageSummary

type ResourceUsageSummary map[string][]SingleContainerSummary

we can't have int here, as JSON does not accept integer keys.

func (*ResourceUsageSummary) PrintHumanReadable

func (s *ResourceUsageSummary) PrintHumanReadable() string

func (*ResourceUsageSummary) PrintJSON

func (s *ResourceUsageSummary) PrintJSON() string

type RuntimeOperationErrorRate

type RuntimeOperationErrorRate struct {
	TotalNumber float64
	ErrorRate   float64
	TimeoutRate float64
}

RuntimeOperationErrorRate is the error rate of a specified runtime operation.

type RuntimeOperationMonitor

type RuntimeOperationMonitor struct {
	// contains filtered or unexported fields
}

RuntimeOperationMonitor is the tool getting and parsing docker operation metrics.

func NewRuntimeOperationMonitor

func NewRuntimeOperationMonitor(c *client.Client) *RuntimeOperationMonitor

func (*RuntimeOperationMonitor) GetLatestRuntimeOperationErrorRate

func (m *RuntimeOperationMonitor) GetLatestRuntimeOperationErrorRate() map[string]NodeRuntimeOperationErrorRate

GetLatestRuntimeOperationErrorRate gets latest error rate and timeout rate from last observed RuntimeOperationErrorRate.

func (*RuntimeOperationMonitor) GetRuntimeOperationErrorRate

func (m *RuntimeOperationMonitor) GetRuntimeOperationErrorRate() map[string]NodeRuntimeOperationErrorRate

GetRuntimeOperationErrorRate gets runtime operation records from kubelet metrics and calculate error rates of all runtime operations.

type SSHResult

type SSHResult struct {
	User   string
	Host   string
	Cmd    string
	Stdout string
	Stderr string
	Code   int
}

func SSH

func SSH(cmd, host, provider string) (SSHResult, error)

SSH synchronously SSHs to a node running on provider and runs cmd. If there is no error performing the SSH, the stdout, stderr, and exit code are returned.

type SaturationTime

type SaturationTime struct {
	TimeToSaturate time.Duration `json:"timeToStaturate"`
	NumberOfNodes  int           `json:"numberOfNodes"`
	NumberOfPods   int           `json:"numberOfPods"`
	Throughput     float32       `json:"throughput"`
}

type SchedulingLatency

type SchedulingLatency struct {
	Scheduling LatencyMetric `json:"scheduling"`
	Binding    LatencyMetric `json:"binding"`
	Total      LatencyMetric `json:"total"`
}

type SingleContainerSummary

type SingleContainerSummary struct {
	Name string
	Cpu  float64
	Mem  uint64
}

type SingleLogSummary

type SingleLogSummary struct {
	AverageGenerationRate int
	NumberOfProbes        int
}

type TestContextType

type TestContextType struct {
	KubeConfig         string
	KubeContext        string
	KubeAPIContentType string
	KubeVolumeDir      string
	CertDir            string
	Host               string
	RepoRoot           string
	Provider           string
	CloudConfig        CloudConfig
	KubectlPath        string
	OutputDir          string
	ReportDir          string
	ReportPrefix       string
	Prefix             string
	MinStartupPods     int
	// Timeout for waiting for system pods to be running
	SystemPodsStartupTimeout time.Duration
	UpgradeTarget            string
	UpgradeImage             string
	PrometheusPushGateway    string
	MasterOSDistro           string
	NodeOSDistro             string
	VerifyServiceAccount     bool
	DeleteNamespace          bool
	CleanStart               bool
	// If set to 'true' or 'all' framework will start a goroutine monitoring resource usage of system add-ons.
	// It will read the data every 30 seconds from all Nodes and print summary during afterEach. If set to 'master'
	// only master Node will be monitored.
	GatherKubeSystemResourceUsageData string
	GatherLogsSizes                   bool
	GatherMetricsAfterTest            bool
	// Currently supported values are 'hr' for human-readable and 'json'. It's a comma separated list.
	OutputPrintType string
	// CreateTestingNS is responsible for creating namespace used for executing e2e tests.
	// It accepts namespace base name, which will be prepended with e2e prefix, kube client
	// and labels to be applied to a namespace.
	CreateTestingNS CreateTestingNSFn
	// If set to true test will dump data about the namespace in which test was running.
	DumpLogsOnFailure bool
}
var TestContext TestContextType

type TestDataSummary

type TestDataSummary interface {
	PrintHumanReadable() string
	PrintJSON() string
}

type TimestampedSize

type TimestampedSize struct {
	// contains filtered or unexported fields
}

TimestampedSize contains a size together with a time of measurement.

type WorkItem

type WorkItem struct {
	// contains filtered or unexported fields
}

WorkItem is a command for a worker that contains an IP of machine from which we want to gather data and paths to all files we're interested in.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL