Lightweight Kubernetes
 
 
 
 
Go to file
Kubernetes Submit Queue 35c3a51e2c Merge pull request #49992 from liggitt/debug-flake
Automatic merge from submit-queue (batch tested with PRs 49992, 48861, 49267, 49356, 49886)

Correctly handle empty watch event cache

Fixes https://github.com/kubernetes/kubernetes/issues/49956

Introduced by ada60236f7 which did not adjust the oldest available resourceVersion for an empty watch event cache.

Exposed by 74b9ba3b4d, which allowed controllers to get list results from etcd before the watch cache is ready (normally they list with resourceVersion=0 which serves the list request from the watch cache, blocking until it is ready)

When the watch cache had an empty cache of watch events, it currently allows establishing a watch as if it can deliver a watch event for its currently synced resourceVersion. This results in an off-by-one error which can result in a missed watch event.

Scenario:

bob:
1. creates object at resourceVersion=11

sally:
1. does a list API request, gets a list resourceVersion of 10 (just before bob creates the object)
2. starts watch handled by watch cache at resourceVersion=10

Watch cache:
1. initial list gets resourceVersion=11, including the item created by bob
2. when determining the initial watch events to send to sally's watch, there are no watch events in the cache, so no initial watch events are sent.
3. the cache listerwatcher watches etcd starting at resourceVersion=11, so future events are fed into the event cache and to sally's watch

The watch cache should have dropped sally's watch from resourceVersion=10 with a "gone" error, since it can't deliver the watch event for resourceVersion=11. This would force sally to relist (where she would get a list at resourceVersion=11) and rewatch (from resourceVersion=11)

This particularly affects tests that create CRD/TPRs and establish watches on the new types as the storage layer's watch cache is also populating for that type.

```release-note
Fix a bug in watch cache sometimes causing missing events after watch cache initialization.
```
2017-08-02 05:15:55 -07:00
.github Merge pull request #46714 from castrojo/new-issue-template 2017-06-22 16:43:47 -07:00
Godeps bump(github.com/googleapis/gnostic):0c5108395e2de 2017-07-31 15:36:06 -04:00
api Merge pull request #47019 from jessfraz/allowPrivilegeEscalation 2017-07-31 16:56:58 -07:00
build Merge pull request #49871 from xiangpengzhao/fix-make 2017-08-01 23:35:48 -07:00
cluster Merge pull request #48429 from shyamjvs/parallel-upgrade 2017-08-02 01:26:57 -07:00
cmd Merge pull request #49092 from huangjiuyuan/fix-apiserver-option-test 2017-08-01 23:35:53 -07:00
docs Merge pull request #48029 from cblecker/remove-docs-2 2017-08-01 12:43:01 -07:00
examples Update wordpress to 4.8.0 2017-07-20 10:08:49 +08:00
federation Merge pull request #46519 from shashidharatd/fed-dc-ut 2017-08-01 03:04:38 -07:00
hack Add gmarek to hack/ OWNERS 2017-08-01 15:55:47 +02:00
logo Updated top level owners file to match new format 2017-01-19 11:29:16 -08:00
pkg Merge pull request #48999 from vladimirvivien/scaleio-vol-attribs-update 2017-08-01 23:35:58 -07:00
plugin Merge pull request #49284 from luxas/csr_cluster_roles 2017-08-01 01:41:53 -07:00
staging Merge pull request #49992 from liggitt/debug-flake 2017-08-02 05:15:55 -07:00
test Merge pull request #49422 from crassirostris/logging-e2e-refactoring 2017-08-01 23:35:51 -07:00
third_party Merge pull request #47614 from mengqiy/fix_naming 2017-07-19 21:51:49 -07:00
translations removed 'Storage' option from 'kubectl top' like options 2017-06-23 08:34:53 -07:00
vendor bump(github.com/googleapis/gnostic):0c5108395e2de 2017-07-31 15:36:06 -04:00
.bazelrc move build related files out of the root directory 2017-05-15 15:53:54 -07:00
.generated_files Move .generated_docs to docs/ so docs OWNERS can review / approve 2017-02-16 10:11:57 -08:00
.gitattributes Add -diff attributes for generated files 2016-12-08 17:12:07 -08:00
.gitignore Remove verify_gen_openapi make rule. 2017-04-25 17:41:33 -07:00
.kazelcfg.json Switch from gazel to kazel, and move kazelcfg into build/root 2017-07-18 12:48:51 -07:00
BUILD.bazel move build related files out of the root directory 2017-05-15 15:53:54 -07:00
CHANGELOG.md Merge pull request #48853 from zhangxiaoyu-zidif/delete-reduandant-star 2017-07-24 15:03:05 -07:00
CONTRIBUTING.md Close kubernetes/community#420 2017-03-08 09:59:30 -08:00
LICENSE LICENSE: revert modifications to Apache license 2016-11-22 11:44:46 -08:00
Makefile move build related files out of the root directory 2017-05-15 15:53:54 -07:00
Makefile.generated_files move build related files out of the root directory 2017-05-15 15:53:54 -07:00
OWNERS Add jregan to OWNERS for kubectl isolation work. 2017-05-30 14:32:48 -07:00
OWNERS_ALIASES Add sig-testing OWNERS_ALIASES 2017-07-25 11:05:18 -07:00
README.md Adjust the link to the right troubleshooting doc page 2017-04-13 08:20:39 +00:00
Vagrantfile Customizable vagrant rsync args and excludes 2016-11-14 11:18:44 +01:00
WORKSPACE move build related files out of the root directory 2017-05-15 15:53:54 -07:00
code-of-conduct.md Change code of conduct to call CNCF CoC by reference 2016-10-19 13:22:35 -04:00
labels.yaml Update labels.yaml 2017-07-11 11:21:18 -07:00

README.md

Kubernetes

Submit Queue Widget GoDoc Widget


Kubernetes is an open source system for managing containerized applications across multiple hosts, providing basic mechanisms for deployment, maintenance, and scaling of applications.

Kubernetes builds upon a decade and a half of experience at Google running production workloads at scale using a system called Borg, combined with best-of-breed ideas and practices from the community.

Kubernetes is hosted by the Cloud Native Computing Foundation (CNCF). If you are a company that wants to help shape the evolution of technologies that are container-packaged, dynamically-scheduled and microservices-oriented, consider joining the CNCF. For details about who's involved and how Kubernetes plays a role, read the CNCF announcement.


To start using Kubernetes

See our documentation on kubernetes.io.

Try our interactive tutorial.

Take a free course on Scalable Microservices with Kubernetes.

To start developing Kubernetes

The community repository hosts all information about building Kubernetes from source, how to contribute code and documentation, who to contact about what, etc.

If you want to build Kubernetes right away there are two options:

You have a working Go environment.
$ go get -d k8s.io/kubernetes
$ cd $GOPATH/src/k8s.io/kubernetes
$ make
You have a working Docker environment.
$ git clone https://github.com/kubernetes/kubernetes
$ cd kubernetes
$ make quick-release

If you are less impatient, head over to the developer's documentation.

Support

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.

Analytics