Production-Grade Container Scheduling and Management
Go to file
Kubernetes Submit Queue 15df7fedca Merge pull request #44626 from madhusudancs/fed-dns-paged-list
Automatic merge from submit-queue (batch tested with PRs 44626, 45641)

Update Google Cloud DNS provider Rrset.Get(name) method to return a list and change the `Rrset.List()` implementation to perform a paged walk

Some federated service e2e tests and a few ingress tests would become flaky after a few hundred runs. @csbell spent quite a lot of time debugging this and found out that this flakiness was due to a bug in the federated service controller deletion logic. Deletion of a federated service object triggers a logic in the controller to update the DNS records corresponding to that object. This DNS record update logic would return an error in failed runs which would in-turn cause the controller to reschedule the operation. This led to an infinite retry-failure cycle that never gave the API server a chance to garbage collect the deleted service object.

A couple of days ago we started seeing a correlation between the number of resource records in a DNS managed zone and these test failures. If you look at the test runs before and after run 2900 in the test grid - https://k8s-testgrid.appspot.com/cluster-federation#gce, you will notice that the grid became super green at 2900. That's when I deleted all the dangling DNS records from the past runs.

After some investigation yesterday, we found that `ResourceRecordSet.Get()` interface and its implementation, and `ResourceRecordSet.List()` implementation at least for Google Cloud DNS were incorrect.

This PR makes minimal set of changes (read: least invasive) in Google Cloud DNS provider implementation to fix these problems:

1. Modifies DNS provider Rrset.Get(name) interface to return multiple records and updates federated service controller.

    There can be multiple DNS resource records for a given name. They can vary by type, ttl, rrdata and a number of various other parameters. It is incorrect to return a single resource record for a given name.

    This change updates the Get interface to return multiple records for a given name and uses this list in the federated service controller to perform DNS operations.

2. Update Google Cloud DNS List implementation to perform a paged walk of lists to aggregate all the DNS records.

    The current `List()` implementation just lists the DNS resorce records in a given managed zone once and retruns the list. It neither performs a paged walk nor does it consider the `page_token` in the returned response.

    This change walks all the pages and aggregates the records in the pages and returns the aggregated list. This is potentially dangerous as it can blow up memory if there are a huge number of records in the given managed zone. But this is the best we can do without changing the provider interface too much. 

    Next step is to define a new paged list interface and implement it.

**Release note**:
```release-note
NONE
```

/assign @csbell 

cc @justinsb @shashidharatd @quinton-hoole @kubernetes/sig-federation-pr-reviews
2017-05-11 03:59:35 -07:00
.github
api Merge pull request #44682 from smarterclayton/owners 2017-05-07 12:22:06 -07:00
build Only tag release containers if the name is different. 2017-05-04 18:43:23 -07:00
cluster Merge pull request #45550 from jacekn/fix45547 2017-05-10 21:34:45 -07:00
cmd Merge pull request #45194 from yujuhong/rm-cri-flag 2017-05-10 20:46:24 -07:00
docs Merge pull request #44714 from jamiehannaford/unix_user_type 2017-05-05 14:08:17 -07:00
examples Merge pull request #45469 from jianglingxia/jlx-0508 2017-05-09 21:16:26 -07:00
federation Merge pull request #44626 from madhusudancs/fed-dns-paged-list 2017-05-11 03:59:35 -07:00
Godeps Update go-restful dependency 2017-05-05 13:57:01 -07:00
hack Merge pull request #45194 from yujuhong/rm-cri-flag 2017-05-10 20:46:24 -07:00
hooks
logo
pkg Merge pull request #45480 from xiangpengzhao/scheduledjob-cronjob 2017-05-11 00:12:40 -07:00
plugin Initialize scheduler cache with assigned non-terminated pods before scheduling. 2017-05-10 01:50:38 +08:00
staging Merge pull request #44861 from sttts/sttts-dynamic-client-listoptions-fallback 2017-05-11 03:06:25 -07:00
test Merge pull request #45630 from zjj2wry/e2e 2017-05-11 01:51:30 -07:00
third_party
translations
vendor Update go-restful dependency 2017-05-05 13:57:01 -07:00
.bazelrc
.gazelcfg.json
.generated_files
.gitattributes
.gitignore
BUILD.bazel Rename //:ci-artifacts rule to //:push-build, and add a deprecated alias 2017-05-02 16:48:16 -07:00
CHANGELOG.md Update CHANGELOG.md for v1.6.3. 2017-05-10 10:27:49 -07:00
code-of-conduct.md
CONTRIBUTING.md
labels.yaml Update labels.yaml with sig labels 2017-04-28 14:27:32 -07:00
LICENSE
Makefile skip integration test when run make bazel-test 2017-05-02 14:12:00 -07:00
Makefile.generated_files
OWNERS
OWNERS_ALIASES
README.md
Vagrantfile
WORKSPACE Update repo-infra dependency to support multiple upload paths 2017-05-03 16:05:15 -07:00

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