scale-demo/

directory
v0.0.0-...-d154995 Latest Latest
Warning

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

Go to latest
Published: Sep 2, 2016 License: Apache-2.0

README

Kubernetes One Million Requests Per Second Demo

Prerequisites

Kubernetes version 1.1 or newer

This demo requires a Kubernetes cluster at version 1.1 or newer as it uses iptables proxy support that was released in Kubernetes 1.1.

You can see what version you are running by running:

kubectl version

Try it on a 1.0 cluster at your own risk.

Create a sufficiently sized cluster

To scale to one million QPS you need a number of cores. A 200 node cluster of n1-standard-4 VMs in Google Container Engine (or equivalent) (800 cores) should be sufficient.

Alternately, you can still run the demo at smaller scales, you just might not be able to hit one million requests / second.

Clone the demo repository

Then you need to clone the repository:

git clone https://github.com/kubernetes/contrib
cd contrib/scale-demo
Activate IPTables proxying (1.1.x only)

Finally, if you are using a 1.1.x cluster, you will need to activate IPTables based proxying (IPTable proxying is on by default in 1.2.x):

for node in $(kubectl get nodes -o name | cut -f2 -d/); do
    # switch to iptables mode
    kubectl annotate node $node net.beta.kubernetes.io/proxy-mode=iptables;
    # restart the proxies
    # This command is specific to GCE/GKE, other platforms may need different SSH commands
    gcloud compute ssh --zone=us-central1-b $node \
    	   --command="sudo /etc/init.d/kube-proxy restart";
done

Set up the load test

In the scale-nginx directory, run the bootstrap script:

./bootstrap-demo.sh

This will create an initial nginx server, a single loadbot and an aggregator to aggregate data. It will also create some Services to link the pieces together.

Startup the UI

We'll use kubectl proxy to launch the UI:

kubectl proxy --www=${PWD}/www/

Then visit http://localhost:8001/static/index.html.

Scale up nginx

First scale up nginx to handle approximately the load you expect to see. In my experiments a 1 core nginx server could handle approximately 10 thousand requests per second. So to handle one million we will scale up to 100 replicas.

kubectl scale rc nginx --replicas=100

Scale up the loadbots

Each loadbot applies one thousands requests per second, so to get to one million requests per second run one thousand loadbots.

kubectl scale rc vegeta --replicas=1000

Rolling update

Once you have reached one million requests per second, you can perform a rolling update:

kubectl rolling-update nginx --image=gcr.io/google_containers/nginx-scale:0.3

The rolling update takes quite a while to complete. If you want to run it faster (though slightly more risky, use the --update-period=1s to decrease the time between container updates to one second.

Teardown

Once you are happy, tear down the load infrastructure with:

./teardown-demo.sh

Directories

Path Synopsis
Godeps
_workspace/src/bitbucket.org/ww/goautoneg
HTTP Content-Type Autonegotiation.
HTTP Content-Type Autonegotiation.
_workspace/src/github.com/beorn7/perks/quantile
Package quantile computes approximate quantiles over an unbounded data stream within low memory and CPU bounds.
Package quantile computes approximate quantiles over an unbounded data stream within low memory and CPU bounds.
_workspace/src/github.com/davecgh/go-spew/spew
Package spew implements a deep pretty printer for Go data structures to aid in debugging.
Package spew implements a deep pretty printer for Go data structures to aid in debugging.
_workspace/src/github.com/emicklei/go-restful
Package restful, a lean package for creating REST-style WebServices without magic.
Package restful, a lean package for creating REST-style WebServices without magic.
_workspace/src/github.com/emicklei/go-restful/swagger
Package swagger implements the structures of the Swagger https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md
Package swagger implements the structures of the Swagger https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md
_workspace/src/github.com/golang/glog
Package glog implements logging analogous to the Google-internal C++ INFO/ERROR/V setup.
Package glog implements logging analogous to the Google-internal C++ INFO/ERROR/V setup.
_workspace/src/github.com/golang/protobuf/proto
Package proto converts data structures to and from the wire format of protocol buffers.
Package proto converts data structures to and from the wire format of protocol buffers.
_workspace/src/github.com/google/gofuzz
Package fuzz is a library for populating go objects with random values.
Package fuzz is a library for populating go objects with random values.
_workspace/src/github.com/imdario/mergo
Package mergo merges same-type structs and maps by setting default values in zero-value fields.
Package mergo merges same-type structs and maps by setting default values in zero-value fields.
_workspace/src/github.com/juju/ratelimit
The ratelimit package provides an efficient token bucket implementation that can be used to limit the rate of arbitrary things.
The ratelimit package provides an efficient token bucket implementation that can be used to limit the rate of arbitrary things.
_workspace/src/github.com/matttproud/golang_protobuf_extensions/pbutil
Package pbutil provides record length-delimited Protocol Buffer streaming.
Package pbutil provides record length-delimited Protocol Buffer streaming.
_workspace/src/github.com/pborman/uuid
The uuid package generates and inspects UUIDs.
The uuid package generates and inspects UUIDs.
_workspace/src/github.com/prometheus/client_golang/prometheus
Package prometheus provides embeddable metric primitives for servers and standardized exposition of telemetry through a web services interface.
Package prometheus provides embeddable metric primitives for servers and standardized exposition of telemetry through a web services interface.
_workspace/src/github.com/prometheus/client_model/go
Package io_prometheus_client is a generated protocol buffer package.
Package io_prometheus_client is a generated protocol buffer package.
_workspace/src/github.com/prometheus/common/expfmt
A package for reading and writing Prometheus metrics.
A package for reading and writing Prometheus metrics.
_workspace/src/github.com/prometheus/common/model
Package model contains common data structures that are shared across Prometheus componenets and libraries.
Package model contains common data structures that are shared across Prometheus componenets and libraries.
_workspace/src/github.com/prometheus/procfs
Package procfs provides functions to retrieve system, kernel and process metrics from the pseudo-filesystem proc.
Package procfs provides functions to retrieve system, kernel and process metrics from the pseudo-filesystem proc.
_workspace/src/github.com/spf13/pflag
Package pflag is a drop-in replacement for Go's flag package, implementing POSIX/GNU-style --flags.
Package pflag is a drop-in replacement for Go's flag package, implementing POSIX/GNU-style --flags.
_workspace/src/github.com/streadway/quantile
Package quantile implements a streaming quantile estimator.
Package quantile implements a streaming quantile estimator.
_workspace/src/github.com/ugorji/go/codec
High Performance, Feature-Rich Idiomatic Go codec/encoding library for binc, msgpack, cbor, json.
High Performance, Feature-Rich Idiomatic Go codec/encoding library for binc, msgpack, cbor, json.
_workspace/src/github.com/ugorji/go/codec/codecgen
codecgen generates codec.Selfer implementations for a set of types.
codecgen generates codec.Selfer implementations for a set of types.
_workspace/src/golang.org/x/crypto/ssh
Package ssh implements an SSH client and server.
Package ssh implements an SSH client and server.
_workspace/src/golang.org/x/crypto/ssh/agent
Package agent implements a client to an ssh-agent daemon.
Package agent implements a client to an ssh-agent daemon.
_workspace/src/golang.org/x/crypto/ssh/terminal
Package terminal provides support functions for dealing with terminals, as commonly found on UNIX systems.
Package terminal provides support functions for dealing with terminals, as commonly found on UNIX systems.
_workspace/src/golang.org/x/crypto/ssh/test
This package contains integration tests for the golang.org/x/crypto/ssh package.
This package contains integration tests for the golang.org/x/crypto/ssh package.
_workspace/src/golang.org/x/net/context
Package context defines the Context type, which carries deadlines, cancelation signals, and other request-scoped values across API boundaries and between processes.
Package context defines the Context type, which carries deadlines, cancelation signals, and other request-scoped values across API boundaries and between processes.
_workspace/src/golang.org/x/net/context/ctxhttp
Package ctxhttp provides helper functions for performing context-aware HTTP requests.
Package ctxhttp provides helper functions for performing context-aware HTTP requests.
_workspace/src/gopkg.in/yaml.v2
Package yaml implements YAML support for the Go language.
Package yaml implements YAML support for the Go language.
_workspace/src/k8s.io/kubernetes/pkg/api
Package api contains the latest (or "internal") version of the Kubernetes API objects.
Package api contains the latest (or "internal") version of the Kubernetes API objects.
_workspace/src/k8s.io/kubernetes/pkg/api/errors
Package errors provides detailed error types for api field validation.
Package errors provides detailed error types for api field validation.
_workspace/src/k8s.io/kubernetes/pkg/api/errors/etcd
Package etcd provides conversion of etcd errors to API errors.
Package etcd provides conversion of etcd errors to API errors.
_workspace/src/k8s.io/kubernetes/pkg/api/install
Package install installs the v1 monolithic api, making it available as an option to all of the API encoding/decoding machinery.
Package install installs the v1 monolithic api, making it available as an option to all of the API encoding/decoding machinery.
_workspace/src/k8s.io/kubernetes/pkg/api/latest
Package latest defines the default output serializations that code should use and imports the required schemas.
Package latest defines the default output serializations that code should use and imports the required schemas.
_workspace/src/k8s.io/kubernetes/pkg/api/meta
Package meta provides functions for retrieving API metadata from objects belonging to the Kubernetes API
Package meta provides functions for retrieving API metadata from objects belonging to the Kubernetes API
_workspace/src/k8s.io/kubernetes/pkg/api/registered
Package to keep track of API Versions that should be registered in api.Scheme.
Package to keep track of API Versions that should be registered in api.Scheme.
_workspace/src/k8s.io/kubernetes/pkg/api/rest
Package rest defines common logic around changes to Kubernetes resources.
Package rest defines common logic around changes to Kubernetes resources.
_workspace/src/k8s.io/kubernetes/pkg/api/testapi
Package testapi provides a helper for retrieving the KUBE_TEST_API environment variable.
Package testapi provides a helper for retrieving the KUBE_TEST_API environment variable.
_workspace/src/k8s.io/kubernetes/pkg/api/unversioned
Package unversioned contains API types that are common to all versions.
Package unversioned contains API types that are common to all versions.
_workspace/src/k8s.io/kubernetes/pkg/api/util
TODO: This GetVersion/GetGroup arrangement is temporary and will be replaced with a GroupAndVersion type.
TODO: This GetVersion/GetGroup arrangement is temporary and will be replaced with a GroupAndVersion type.
_workspace/src/k8s.io/kubernetes/pkg/api/v1
Package v1 is the v1 version of the API.
Package v1 is the v1 version of the API.
_workspace/src/k8s.io/kubernetes/pkg/api/validation
Package validation has functions for validating the correctness of api objects and explaining what is wrong with them when they aren't valid.
Package validation has functions for validating the correctness of api objects and explaining what is wrong with them when they aren't valid.
_workspace/src/k8s.io/kubernetes/pkg/apis/componentconfig/install
Package install installs the experimental API group, making it available as an option to all of the API encoding/decoding machinery.
Package install installs the experimental API group, making it available as an option to all of the API encoding/decoding machinery.
_workspace/src/k8s.io/kubernetes/pkg/apis/extensions/install
Package install installs the experimental API group, making it available as an option to all of the API encoding/decoding machinery.
Package install installs the experimental API group, making it available as an option to all of the API encoding/decoding machinery.
_workspace/src/k8s.io/kubernetes/pkg/apis/metrics/install
Package install installs the metrics API group, making it available as an option to all of the API encoding/decoding machinery.
Package install installs the metrics API group, making it available as an option to all of the API encoding/decoding machinery.
_workspace/src/k8s.io/kubernetes/pkg/auth/user
Package user contains utilities for dealing with simple user exchange in the auth packages.
Package user contains utilities for dealing with simple user exchange in the auth packages.
_workspace/src/k8s.io/kubernetes/pkg/capabilities
package capbabilities manages system level capabilities
package capbabilities manages system level capabilities
_workspace/src/k8s.io/kubernetes/pkg/client/metrics
Package metrics provides utilities for registering client metrics to Prometheus.
Package metrics provides utilities for registering client metrics to Prometheus.
_workspace/src/k8s.io/kubernetes/pkg/client/unversioned
Package unversioned contains the implementation of the client side communication with the Kubernetes master.
Package unversioned contains the implementation of the client side communication with the Kubernetes master.
_workspace/src/k8s.io/kubernetes/pkg/client/unversioned/auth
Package auth defines a file format for holding authentication information needed by clients of Kubernetes.
Package auth defines a file format for holding authentication information needed by clients of Kubernetes.
_workspace/src/k8s.io/kubernetes/pkg/client/unversioned/clientcmd
Package clientcmd provides one stop shopping for building a working client from a fixed config, from a .kubeconfig file, from command line flags, or from any merged combination.
Package clientcmd provides one stop shopping for building a working client from a fixed config, from a .kubeconfig file, from command line flags, or from any merged combination.
_workspace/src/k8s.io/kubernetes/pkg/client/unversioned/fake
This is made a separate package and should only be imported by tests, because it imports testapi
This is made a separate package and should only be imported by tests, because it imports testapi
_workspace/src/k8s.io/kubernetes/pkg/client/unversioned/portforward
Package portforward adds support for SSH-like port forwarding from the client's local host to remote containers.
Package portforward adds support for SSH-like port forwarding from the client's local host to remote containers.
_workspace/src/k8s.io/kubernetes/pkg/client/unversioned/remotecommand
Package remotecommand adds support for executing commands in containers, with support for separate stdin, stdout, and stderr streams, as well as TTY.
Package remotecommand adds support for executing commands in containers, with support for separate stdin, stdout, and stderr streams, as well as TTY.
_workspace/src/k8s.io/kubernetes/pkg/conversion
Package conversion provides go object versioning and encoding/decoding mechanisms.
Package conversion provides go object versioning and encoding/decoding mechanisms.
_workspace/src/k8s.io/kubernetes/pkg/conversion/queryparams
Package queryparams provides conversion from versioned runtime objects to URL query values
Package queryparams provides conversion from versioned runtime objects to URL query values
_workspace/src/k8s.io/kubernetes/pkg/fields
Package fields implements a simple field system, parsing and matching selectors with sets of fields.
Package fields implements a simple field system, parsing and matching selectors with sets of fields.
_workspace/src/k8s.io/kubernetes/pkg/kubelet/qos
package qos contains helper functions for quality of service.
package qos contains helper functions for quality of service.
_workspace/src/k8s.io/kubernetes/pkg/labels
Package labels implements a simple label system, parsing and matching selectors with sets of labels.
Package labels implements a simple label system, parsing and matching selectors with sets of labels.
_workspace/src/k8s.io/kubernetes/pkg/runtime
Defines conversions between generic types and structs to map query strings to struct objects.
Defines conversions between generic types and structs to map query strings to struct objects.
_workspace/src/k8s.io/kubernetes/pkg/runtime/protobuf
Package protobuf implements ProtoBuf serialization and deserialization.
Package protobuf implements ProtoBuf serialization and deserialization.
_workspace/src/k8s.io/kubernetes/pkg/types
Package types implements various generic types used throughout kubernetes.
Package types implements various generic types used throughout kubernetes.
_workspace/src/k8s.io/kubernetes/pkg/util
Package util implements various utility functions used in both testing and implementation of Kubernetes.
Package util implements various utility functions used in both testing and implementation of Kubernetes.
_workspace/src/k8s.io/kubernetes/pkg/util/bandwidth
Package bandwidth provides utilities for bandwidth shaping
Package bandwidth provides utilities for bandwidth shaping
_workspace/src/k8s.io/kubernetes/pkg/util/chmod
Package chown provides an interface and implementations for things that run run the chmod system call.
Package chown provides an interface and implementations for things that run run the chmod system call.
_workspace/src/k8s.io/kubernetes/pkg/util/chown
Package chown provides utilities to chown a path
Package chown provides utilities to chown a path
_workspace/src/k8s.io/kubernetes/pkg/util/config
Package config provides utility objects for decoupling sources of configuration and the actual configuration state.
Package config provides utility objects for decoupling sources of configuration and the actual configuration state.
_workspace/src/k8s.io/kubernetes/pkg/util/dbus
Package dbus provides an injectable interface and implementations for D-Bus communication
Package dbus provides an injectable interface and implementations for D-Bus communication
_workspace/src/k8s.io/kubernetes/pkg/util/errors
Package errors implements various utility functions and types around errors.
Package errors implements various utility functions and types around errors.
_workspace/src/k8s.io/kubernetes/pkg/util/exec
Package exec provides an injectable interface and implementations for running commands.
Package exec provides an injectable interface and implementations for running commands.
_workspace/src/k8s.io/kubernetes/pkg/util/flushwriter
Package flushwriter implements a wrapper for a writer that flushes on every write if that writer implements the io.Flusher interface
Package flushwriter implements a wrapper for a writer that flushes on every write if that writer implements the io.Flusher interface
_workspace/src/k8s.io/kubernetes/pkg/util/httpstream
Package httpstream adds multiplexed streaming support to HTTP requests and responses via connection upgrades.
Package httpstream adds multiplexed streaming support to HTTP requests and responses via connection upgrades.
_workspace/src/k8s.io/kubernetes/pkg/util/iptables
Package iptables provides an interface and implementations for running iptables commands.
Package iptables provides an interface and implementations for running iptables commands.
_workspace/src/k8s.io/kubernetes/pkg/util/jsonpath
package jsonpath is a template engine using jsonpath syntax, which can be seen at http://goessner.net/articles/JsonPath/.
package jsonpath is a template engine using jsonpath syntax, which can be seen at http://goessner.net/articles/JsonPath/.
_workspace/src/k8s.io/kubernetes/pkg/util/limitwriter
Package limitwriter provides a writer that only allows a certain number of bytes to be written.
Package limitwriter provides a writer that only allows a certain number of bytes to be written.
_workspace/src/k8s.io/kubernetes/pkg/util/mount
Package mount defines an interface to mounting filesystems.
Package mount defines an interface to mounting filesystems.
_workspace/src/k8s.io/kubernetes/pkg/util/oom
Package oom implements utility functions relating to out of memory management.
Package oom implements utility functions relating to out of memory management.
_workspace/src/k8s.io/kubernetes/pkg/util/procfs
Package procfs implements utility functions relating to the /proc mount.
Package procfs implements utility functions relating to the /proc mount.
_workspace/src/k8s.io/kubernetes/pkg/util/proxy
Package proxy provides transport and upgrade support for proxies
Package proxy provides transport and upgrade support for proxies
_workspace/src/k8s.io/kubernetes/pkg/util/rand
Package rand provides utilities related to randomization.
Package rand provides utilities related to randomization.
_workspace/src/k8s.io/kubernetes/pkg/util/selinux
Package selinux contains selinux utility functions.
Package selinux contains selinux utility functions.
_workspace/src/k8s.io/kubernetes/pkg/util/sets
Package sets has auto-generated set types.
Package sets has auto-generated set types.
_workspace/src/k8s.io/kubernetes/pkg/util/sets/types
Package types just provides input types to the set generator.
Package types just provides input types to the set generator.
_workspace/src/k8s.io/kubernetes/pkg/util/slice
Package slice provides utility methods for common operations on slices.
Package slice provides utility methods for common operations on slices.
_workspace/src/k8s.io/kubernetes/pkg/util/wait
Package wait provides tools for polling or listening for changes to a condition.
Package wait provides tools for polling or listening for changes to a condition.
_workspace/src/k8s.io/kubernetes/pkg/util/workqueue
Package workqueue provides a simple queue that supports the following features:
Package workqueue provides a simple queue that supports the following features:
_workspace/src/k8s.io/kubernetes/pkg/util/wsstream
Package wsstream contains utilities for streaming content over WebSockets.
Package wsstream contains utilities for streaming content over WebSockets.
_workspace/src/k8s.io/kubernetes/pkg/version
Package version supplies version information collected at build time to kubernetes components.
Package version supplies version information collected at build time to kubernetes components.
_workspace/src/k8s.io/kubernetes/pkg/version/verflag
Package verflag defines utility functions to handle command line flags related to version of Kubernetes.
Package verflag defines utility functions to handle command line flags related to version of Kubernetes.
_workspace/src/k8s.io/kubernetes/pkg/watch
Package watch contains a generic watchable interface, and a fake for testing code that uses the watch interface.
Package watch contains a generic watchable interface, and a fake for testing code that uses the watch interface.
_workspace/src/k8s.io/kubernetes/pkg/watch/json
Package json implements a simple encoder and decoder for streams of watch events over io.Writer/Readers
Package json implements a simple encoder and decoder for streams of watch events over io.Writer/Readers
_workspace/src/k8s.io/kubernetes/third_party/forked/reflect
Package reflect is a fork of go's standard library reflection package, which allows for deep equal with equality functions defined.
Package reflect is a fork of go's standard library reflection package, which allows for deep equal with equality functions defined.
_workspace/src/speter.net/go/exp/math/dec/inf
Package inf (type inf.Dec) implements "infinite-precision" decimal arithmetic.
Package inf (type inf.Dec) implements "infinite-precision" decimal arithmetic.

Jump to

Keyboard shortcuts

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