PodToSelectableFields creates a map of field attributes for a particular pod filter query to use. If the result of the query does not depend on the fields at all, avoid creating the map. This is the source of about half the allocated memory (by byte volume) during the kubemark benchmark, and it is in turn the main driver of CPU usage during the benchmark, because of the many background pod watches going on, as well as the occasional list pods. These benchmarks for 1000-node kubemark show the difference from my previous CL (caching timers) to this CL: name old ms/op new ms/op delta LIST_nodes_p50 124 ±13% 121 ± 9% ~ (p=0.136 n=29+27) LIST_nodes_p90 278 ±15% 266 ±12% -4.26% (p=0.031 n=29+27) LIST_nodes_p99 405 ±19% 400 ±14% ~ (p=0.864 n=28+28) LIST_pods_p50 65.3 ±13% 56.3 ± 9% -13.75% (p=0.000 n=29+28) LIST_pods_p90 115 ±12% 93 ± 8% -18.75% (p=0.000 n=27+28) LIST_pods_p99 226 ±21% 202 ±14% -10.52% (p=0.000 n=28+28) LIST_replicationcontrollers_p50 26.6 ±43% 26.2 ±54% ~ (p=0.487 n=29+29) LIST_replicationcontrollers_p90 68.7 ±63% 68.6 ±59% ~ (p=0.931 n=29+28) LIST_replicationcontrollers_p99 173 ±41% 177 ±49% ~ (p=0.618 n=28+29) PUT_replicationcontrollers_p50 5.83 ±36% 5.94 ±32% ~ (p=0.818 n=28+29) PUT_replicationcontrollers_p90 15.9 ± 6% 15.5 ± 6% -2.23% (p=0.019 n=28+29) PUT_replicationcontrollers_p99 56.7 ±41% 39.5 ±55% -30.29% (p=0.000 n=28+29) DELETE_pods_p50 24.3 ±17% 24.3 ±13% ~ (p=0.855 n=28+29) DELETE_pods_p90 30.6 ± 0% 30.7 ± 1% ~ (p=0.140 n=28+29) DELETE_pods_p99 56.3 ±27% 54.2 ±23% ~ (p=0.188 n=28+27) PUT_nodes_p50 14.9 ± 1% 14.8 ± 2% ~ (p=0.781 n=28+27) PUT_nodes_p90 16.4 ± 2% 16.3 ± 2% ~ (p=0.321 n=28+28) PUT_nodes_p99 44.6 ±42% 41.3 ±35% ~ (p=0.361 n=29+28) POST_replicationcontrollers_p50 6.33 ±23% 6.34 ±20% ~ (p=0.993 n=28+28) POST_replicationcontrollers_p90 15.2 ± 6% 15.0 ± 5% ~ (p=0.106 n=28+29) POST_replicationcontrollers_p99 53.4 ±52% 32.9 ±46% -38.41% (p=0.000 n=27+27) POST_pods_p50 9.33 ±13% 8.95 ±16% ~ (p=0.069 n=29+29) POST_pods_p90 16.3 ± 4% 16.1 ± 4% -1.43% (p=0.044 n=29+29) POST_pods_p99 28.4 ±23% 26.4 ±12% -7.05% (p=0.004 n=29+28) DELETE_replicationcontrollers_p50 2.50 ±13% 2.50 ±13% ~ (p=0.649 n=29+28) DELETE_replicationcontrollers_p90 11.7 ±10% 11.8 ±13% ~ (p=0.863 n=28+28) DELETE_replicationcontrollers_p99 19.0 ±22% 19.1 ±21% ~ (p=0.818 n=28+29) PUT_pods_p50 10.3 ± 5% 10.2 ± 5% ~ (p=0.235 n=28+27) PUT_pods_p90 16.0 ± 1% 16.0 ± 1% ~ (p=0.380 n=29+28) PUT_pods_p99 21.6 ±14% 20.9 ± 9% -3.15% (p=0.010 n=28+27) POST_bindings_p50 8.98 ±17% 8.92 ±15% ~ (p=0.666 n=29+28) POST_bindings_p90 16.5 ± 2% 16.5 ± 3% ~ (p=0.840 n=26+29) POST_bindings_p99 21.4 ± 5% 21.1 ± 4% -1.21% (p=0.049 n=27+28) GET_nodes_p90 1.18 ±19% 1.14 ±24% ~ (p=0.137 n=29+29) GET_nodes_p99 8.29 ±40% 7.50 ±46% ~ (p=0.106 n=28+29) GET_replicationcontrollers_p90 1.03 ±21% 1.01 ±27% ~ (p=0.489 n=29+29) GET_replicationcontrollers_p99 10.0 ±123% 10.0 ±145% ~ (p=0.794 n=28+29) GET_pods_p90 1.08 ±21% 1.02 ±19% ~ (p=0.083 n=29+28) GET_pods_p99 2.81 ±39% 2.45 ±38% -12.78% (p=0.021 n=28+25) Overall the two CLs combined have this effect: name old ms/op new ms/op delta LIST_nodes_p50 127 ±16% 121 ± 9% -4.58% (p=0.000 n=29+27) LIST_nodes_p90 326 ±12% 266 ±12% -18.48% (p=0.000 n=29+27) LIST_nodes_p99 453 ±11% 400 ±14% -11.79% (p=0.000 n=29+28) LIST_replicationcontrollers_p50 29.4 ±49% 26.2 ±54% ~ (p=0.085 n=30+29) LIST_replicationcontrollers_p90 83.0 ±78% 68.6 ±59% -17.33% (p=0.013 n=30+28) LIST_replicationcontrollers_p99 216 ±43% 177 ±49% -17.68% (p=0.000 n=29+29) DELETE_pods_p50 24.5 ±14% 24.3 ±13% ~ (p=0.562 n=30+29) DELETE_pods_p90 30.7 ± 1% 30.7 ± 1% -0.30% (p=0.011 n=29+29) DELETE_pods_p99 77.2 ±34% 54.2 ±23% -29.76% (p=0.000 n=30+27) PUT_replicationcontrollers_p50 5.86 ±26% 5.94 ±32% ~ (p=0.734 n=29+29) PUT_replicationcontrollers_p90 15.8 ± 7% 15.5 ± 6% -2.06% (p=0.010 n=29+29) PUT_replicationcontrollers_p99 57.8 ±35% 39.5 ±55% -31.60% (p=0.000 n=29+29) PUT_nodes_p50 14.9 ± 2% 14.8 ± 2% -0.68% (p=0.012 n=30+27) PUT_nodes_p90 16.5 ± 1% 16.3 ± 2% -0.90% (p=0.000 n=27+28) PUT_nodes_p99 57.9 ±47% 41.3 ±35% -28.61% (p=0.000 n=30+28) POST_replicationcontrollers_p50 6.35 ±29% 6.34 ±20% ~ (p=0.944 n=30+28) POST_replicationcontrollers_p90 15.4 ± 5% 15.0 ± 5% -2.18% (p=0.001 n=29+29) POST_replicationcontrollers_p99 52.2 ±71% 32.9 ±46% -36.99% (p=0.000 n=29+27) POST_pods_p50 8.99 ±13% 8.95 ±16% ~ (p=0.903 n=30+29) POST_pods_p90 16.2 ± 4% 16.1 ± 4% ~ (p=0.287 n=29+29) POST_pods_p99 30.9 ±21% 26.4 ±12% -14.73% (p=0.000 n=28+28) POST_bindings_p50 9.34 ±12% 8.92 ±15% -4.54% (p=0.013 n=30+28) POST_bindings_p90 16.6 ± 1% 16.5 ± 3% -0.73% (p=0.017 n=28+29) POST_bindings_p99 23.5 ± 9% 21.1 ± 4% -10.09% (p=0.000 n=27+28) PUT_pods_p50 10.8 ±11% 10.2 ± 5% -5.47% (p=0.000 n=30+27) PUT_pods_p90 16.1 ± 1% 16.0 ± 1% -0.64% (p=0.000 n=29+28) PUT_pods_p99 23.4 ± 9% 20.9 ± 9% -10.93% (p=0.000 n=28+27) DELETE_replicationcontrollers_p50 2.42 ±16% 2.50 ±13% ~ (p=0.054 n=29+28) DELETE_replicationcontrollers_p90 11.5 ±12% 11.8 ±13% ~ (p=0.141 n=30+28) DELETE_replicationcontrollers_p99 19.5 ±21% 19.1 ±21% ~ (p=0.397 n=29+29) GET_nodes_p50 0.77 ±10% 0.76 ±10% ~ (p=0.317 n=28+28) GET_nodes_p90 1.20 ±16% 1.14 ±24% -4.66% (p=0.036 n=28+29) GET_nodes_p99 11.4 ±48% 7.5 ±46% -34.28% (p=0.000 n=28+29) GET_replicationcontrollers_p50 0.74 ±17% 0.73 ±17% ~ (p=0.222 n=30+28) GET_replicationcontrollers_p90 1.04 ±25% 1.01 ±27% ~ (p=0.231 n=30+29) GET_replicationcontrollers_p99 12.1 ±81% 10.0 ±145% ~ (p=0.063 n=28+29) GET_pods_p50 0.78 ±12% 0.77 ±10% ~ (p=0.178 n=30+28) GET_pods_p90 1.06 ±19% 1.02 ±19% ~ (p=0.120 n=29+28) GET_pods_p99 3.92 ±43% 2.45 ±38% -37.55% (p=0.000 n=27+25) LIST_services_p50 0.20 ±13% 0.20 ±16% ~ (p=0.854 n=28+29) LIST_services_p90 0.28 ±15% 0.27 ±14% ~ (p=0.219 n=29+28) LIST_services_p99 0.49 ±20% 0.47 ±24% ~ (p=0.140 n=29+29) LIST_endpoints_p50 0.19 ±14% 0.19 ±15% ~ (p=0.709 n=29+29) LIST_endpoints_p90 0.26 ±16% 0.26 ±13% ~ (p=0.274 n=29+28) LIST_endpoints_p99 0.46 ±24% 0.44 ±21% ~ (p=0.111 n=29+29) LIST_horizontalpodautoscalers_p50 0.16 ±15% 0.15 ±13% ~ (p=0.253 n=30+27) LIST_horizontalpodautoscalers_p90 0.22 ±24% 0.21 ±16% ~ (p=0.152 n=30+28) LIST_horizontalpodautoscalers_p99 0.31 ±33% 0.31 ±38% ~ (p=0.817 n=28+29) LIST_daemonsets_p50 0.16 ±20% 0.15 ±11% ~ (p=0.135 n=30+27) LIST_daemonsets_p90 0.22 ±18% 0.21 ±25% ~ (p=0.135 n=29+28) LIST_daemonsets_p99 0.29 ±28% 0.29 ±32% ~ (p=0.606 n=28+28) LIST_jobs_p50 0.16 ±16% 0.15 ±12% ~ (p=0.375 n=29+28) LIST_jobs_p90 0.22 ±18% 0.21 ±16% ~ (p=0.090 n=29+26) LIST_jobs_p99 0.31 ±28% 0.28 ±35% -10.29% (p=0.005 n=29+27) LIST_deployments_p50 0.15 ±16% 0.15 ±13% ~ (p=0.565 n=29+28) LIST_deployments_p90 0.22 ±22% 0.21 ±19% ~ (p=0.107 n=30+28) LIST_deployments_p99 0.31 ±27% 0.29 ±34% ~ (p=0.068 n=29+28) LIST_namespaces_p50 0.21 ±25% 0.21 ±26% ~ (p=0.768 n=29+27) LIST_namespaces_p90 0.28 ±29% 0.26 ±25% ~ (p=0.101 n=30+28) LIST_namespaces_p99 0.30 ±48% 0.29 ±42% ~ (p=0.339 n=30+29) LIST_replicasets_p50 0.15 ±18% 0.15 ±16% ~ (p=0.612 n=30+28) LIST_replicasets_p90 0.22 ±19% 0.21 ±18% -5.13% (p=0.011 n=28+27) LIST_replicasets_p99 0.31 ±39% 0.28 ±29% ~ (p=0.066 n=29+28) LIST_persistentvolumes_p50 0.16 ±23% 0.15 ±21% ~ (p=0.124 n=30+29) LIST_persistentvolumes_p90 0.21 ±23% 0.20 ±23% ~ (p=0.092 n=30+25) LIST_persistentvolumes_p99 0.21 ±24% 0.20 ±23% ~ (p=0.053 n=30+25) LIST_resourcequotas_p50 0.16 ±12% 0.16 ±13% ~ (p=0.175 n=27+28) LIST_resourcequotas_p90 0.20 ±22% 0.20 ±24% ~ (p=0.388 n=30+28) LIST_resourcequotas_p99 0.22 ±24% 0.22 ±23% ~ (p=0.575 n=30+28) LIST_persistentvolumeclaims_p50 0.15 ±21% 0.15 ±29% ~ (p=0.079 n=30+28) LIST_persistentvolumeclaims_p90 0.19 ±26% 0.18 ±34% ~ (p=0.446 n=29+29) LIST_persistentvolumeclaims_p99 0.19 ±26% 0.18 ±34% ~ (p=0.446 n=29+29) LIST_pods_p50 68.0 ±16% 56.3 ± 9% -17.19% (p=0.000 n=29+28) LIST_pods_p90 119 ±19% 93 ± 8% -21.88% (p=0.000 n=28+28) LIST_pods_p99 230 ±18% 202 ±14% -12.13% (p=0.000 n=27+28) |
||
---|---|---|
api/swagger-spec | ||
build | ||
cluster | ||
cmd | ||
contrib | ||
docs | ||
examples | ||
federation/cmd/federated-apiserver | ||
Godeps | ||
hack | ||
hooks | ||
logo | ||
pkg | ||
plugin | ||
release | ||
test | ||
third_party | ||
www | ||
.generated_docs | ||
.gitignore | ||
.travis.yml | ||
CHANGELOG.md | ||
code-of-conduct.md | ||
CONTRIB.md | ||
CONTRIBUTING.md | ||
DESIGN.md | ||
LICENSE | ||
Makefile | ||
README.md | ||
Vagrantfile |
Kubernetes
Are you ...
- Interested in learning more about using Kubernetes? Please see our user-facing documentation on kubernetes.io
- Interested in hacking on the core Kubernetes code base? Keep reading!
Kubernetes is an open source system for managing containerized applications across multiple hosts, providing basic mechanisms for deployment, maintenance, and scaling of applications.
Kubernetes is:
- lean: lightweight, simple, accessible
- portable: public, private, hybrid, multi cloud
- extensible: modular, pluggable, hookable, composable
- self-healing: auto-placement, auto-restart, auto-replication
Kubernetes builds upon a decade and a half of experience at Google running production workloads at scale, combined with best-of-breed ideas and practices from the community.
Kubernetes can run anywhere!
However, initial development was done on GCE and so our instructions and scripts are built around that. If you make it work on other infrastructure please let us know and contribute instructions/code.
Kubernetes is ready for Production!
With the 1.0.1 release Kubernetes is ready to serve your production workloads.
Concepts
Kubernetes works with the following concepts:
- Cluster
- A cluster is a set of physical or virtual machines and other infrastructure resources used by Kubernetes to run your applications. Kubernetes can run anywhere! See the Getting Started Guides for instructions for a variety of services.
- Node
- A node is a physical or virtual machine running Kubernetes, onto which pods can be scheduled.
- Pod
- Pods are a colocated group of application containers with shared volumes. They're the smallest deployable units that can be created, scheduled, and managed with Kubernetes. Pods can be created individually, but it's recommended that you use a replication controller even if creating a single pod.
- Replication controller
- Replication controllers manage the lifecycle of pods. They ensure that a specified number of pods are running at any given time, by creating or killing pods as required.
- Service
- Services provide a single, stable name and address for a set of pods. They act as basic load balancers.
- Label
- Labels are used to organize and select groups of objects based on key:value pairs.
Documentation
Kubernetes documentation is organized into several categories.
- Getting started guides
- for people who want to create a Kubernetes cluster
- for people who want to port Kubernetes to a new environment
- User documentation
- for people who want to run programs on an existing Kubernetes cluster
- in the Kubernetes User Guide: Managing Applications Tip: You can also view help documentation out on http://kubernetes.io/docs/.
- the Kubectl Command Line Interface is a detailed reference on
the
kubectl
CLI - User FAQ
- Cluster administrator documentation
- for people who want to create a Kubernetes cluster and administer it
- in the Kubernetes Cluster Admin Guide
- Developer and API documentation
- for people who want to write programs that access the Kubernetes API, write plugins or extensions, or modify the core Kubernetes code
- in the Kubernetes Developer Guide
- see also notes on the API
- see also the API object documentation, a detailed description of all fields found in the core API objects
- Walkthroughs and examples
- hands-on introduction and example config files
- in the user guide
- in the docs/examples directory
- Contributions from the Kubernetes community
- in the docs/contrib directory
- Design documentation and design proposals
- for people who want to understand the design of Kubernetes, and feature proposals
- design docs in the Kubernetes Design Overview and the docs/design directory
- proposals in the docs/proposals directory
- Wiki/FAQ
- in the wiki
- troubleshooting information in the troubleshooting guide
Community, discussion, contribution, and support
See which companies are committed to driving quality in Kubernetes on our community page.
Do you want to help "shape the evolution of technologies that are container packaged, dynamically scheduled and microservices oriented?"
You should consider joining the Cloud Native Computing Foundation. For details about who's involved and how Kubernetes plays a role, read their announcement.
Code of conduct
Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.
Are you ready to add to the discussion?
We have presence on:
You can also view recordings of past events and presentations on our Media page.
For Q&A, our threads are at:
Want to do more than just 'discuss' Kubernetes?
If you're interested in being a contributor and want to get involved in developing Kubernetes, start in the Kubernetes Developer Guide and also review the contributor guidelines.
Support
While there are many different channels that you can use to get ahold of us, you can help make sure that we are efficient in getting you the help that you need.
If you need support, start with the troubleshooting guide and work your way through the process that we've outlined.
That said, if you have questions, reach out to us one way or another. We don't bite!
Community resources:
- Awesome-kubernetes:
You can find more projects, tools and articles related to Kubernetes on the awesome-kubernetes list. Add your project there and help us make it better.
- CoreKube - https://corekube.com:
Instructive & educational resources for the Kubernetes community. By the community.