{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes/community/pulls/comments/189614650","pull_request_review_id":121828152,"id":189614650,"diff_hunk":"@@ -0,0 +1,390 @@\n+---\n+kep-number: 8\n+title: Efficient Node Heartbeat\n+authors:\n+  - \"@wojtek-t\"\n+  - \"with input from @bgrant0607, @dchen1107, @yujuhong, @lavalamp\"\n+owning-sig: sig-node\n+participating-sigs:\n+  - sig-scalability\n+  - sig-apimachinery\n+  - sig-scheduling\n+reviewers:\n+  - \"@deads2k\"\n+  - \"@lavalamp\"\n+approvers:\n+  - \"@dchen1107\"\n+  - \"@derekwaynecarr\"\n+editor: TBD\n+creation-date: 2018-04-27\n+last-updated: 2018-04-27\n+status: provisional\n+see-also:\n+  - https://github.com/kubernetes/kubernetes/issues/14733\n+  - https://github.com/kubernetes/kubernetes/pull/14735\n+replaces:\n+  - n/a\n+superseded-by:\n+  - n/a\n+---\n+\n+# Efficient Node Heartbeats\n+\n+## Table of Contents\n+\n+Table of Contents\n+=================\n+\n+* [Efficient Node Heartbeats](#efficient-node-heartbeats)\n+   * [Table of Contents](#table-of-contents)\n+   * [Summary](#summary)\n+   * [Motivation](#motivation)\n+      * [Goals](#goals)\n+      * [Non-Goals](#non-goals)\n+   * [Proposal](#proposal)\n+      * [Risks and Mitigations](#risks-and-mitigations)\n+   * [Graduation Criteria](#graduation-criteria)\n+   * [Implementation History](#implementation-history)\n+   * [Alternatives](#alternatives)\n+      * [Dedicated “heartbeat” object instead of “leader election” one](#dedicated-heartbeat-object-instead-of-leader-election-one)\n+      * [Events instead of dedicated heartbeat object](#events-instead-of-dedicated-heartbeat-object)\n+      * [Reuse the Component Registration mechanisms](#reuse-the-component-registration-mechanisms)\n+      * [Split Node object into two parts at etcd level](#split-node-object-into-two-parts-at-etcd-level)\n+      * [Delta compression in etcd](#delta-compression-in-etcd)\n+      * [Replace etcd with other database](#replace-etcd-with-other-database)\n+\n+## Summary\n+\n+Node heartbeats are necessary for correct functioning of Kubernetes cluster.\n+This proposal makes them significantly cheaper from both scalability and\n+performance perspective.\n+\n+## Motivation\n+\n+While running different scalability tests we observed that in big enough clusters\n+(more than 2000 nodes) with non-trivial number of images used by pods on all\n+nodes (10-15), we were hitting etcd limits for its database size. That effectively\n+means that etcd enters \"alert mode\" and stops accepting all write requests.\n+\n+The underlying root cause is combination of:\n+\n+- etcd keeping both current state and transaction log with copy-on-write\n+- node heartbeats being pontetially very large objects (note that images\n+  are only one potential problem, the second are volumes and customers\n+  want to mount 100+ volumes to a single node) - they may easily exceed 15kB;\n+  even though the patch send over network is small, in etcd we store the\n+\twhole Node object\n+- Kubelet sending heartbeats every 10s\n+\n+This proposal presents a proper solution for that problem.\n+\n+\n+Note that currently (by default):\n+\n+- Lack of NodeStatus update for `<node-monitor-grace-period>` (default: 40s)\n+  results in NodeController marking node as NotReady (pods are no longer\n+  scheduled on that node)\n+- Lack of NodeStatus updates for `<pod-eviction-timeout>` (default: 5m)\n+  results in NodeController starting pod evictions from that node\n+\n+We would like to preserve that behavior.\n+\n+\n+### Goals\n+\n+- Reduce size of etcd by making node heartbeats cheaper\n+\n+### Non-Goals\n+\n+The following are nice-to-haves, but not primary goals:\n+\n+- Reduce resource usage (cpu/memory) of control plane (e.g. due to processing\n+  less and/or smaller objects)\n+- Reduce watch-related load on Node objects\n+\n+## Proposal\n+\n+We propose introducing a new `Lease` built-in API in the newly create API group\n+`coordination.k8s.io`). To make it easily reusable for other purposes it will\n+be namespaced. Its schema will be as following:\n+\n+```\n+type Lease struct {\n+  metav1.TypeMeta `json:\",inline\"`\n+  // Standard object's metadata.\n+  // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n+  // +optional\n+  ObjectMeta metav1.ObjectMeta `json:\"metadata,omitempty\"`\n+\n+  // Specification of the Lease.\n+  // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n+  // +optional\n+  Spec LeaseSpec `json:\"spec,omitempty\"`\n+}\n+\n+type LeaseSpec struct {\n+  HolderIdentity       string           `json:\"holderIdentity\"`\n+  LeaseDurationSeconds int32            `json:\"leaseDurationSeconds\"`\n+  AcquireTime          metav1.MicroTime `json:\"acquireTime\"`\n+  RenewTime            metav1.MicroTime `json:\"renewTime\"`\n+  LeaseTransitions     int32            `json:\"leaseTransitions\"`\n+}\n+```\n+\n+The Spec is effectively of already existing (and thus proved) [LeaderElectionRecord][].\n+The only difference is using `MicroTime` instead of `Time` for better precision.\n+That would hopefully allow us go get directly to Beta.\n+\n+We will use that object to represent node heartbeat - for each Node there will\n+be a corresponding `Lease` object with Name equal to Node name in a newly\n+created dedicated namespace (we considered using `kube-system` namespace but\n+decided that it's already too overloaded).\n+That namespace should be created automatically (similarly to \"default\" and\n+\"kube-system\", probably by NodeController) and never be deleted (so that nodes\n+don't require permission for it).\n+\n+We considered using CRD instead of built-in API. However, even though CRDs are\n+`the new way` for creating new APIs, they don't yet have versioning support\n+and are significantly less performant (due to lack of protobuf support yet).\n+We also don't know whether we could seamlessly transition storage from a CRD\n+to a built-in API if we ran into a performance or any other problems.\n+As a result, we decided to proceed with built-in API.\n+\n+\n+We this new API in place, we will change Kubelet so that:","path":"keps/0008-node-heartbeat.md","position":154,"original_position":154,"commit_id":"5465e31d8731e079cf8d63f4f4084b19530b4e9a","original_commit_id":"5465e31d8731e079cf8d63f4f4084b19530b4e9a","user":{"login":"derekwaynecarr","id":6233452,"avatar_url":"https://avatars3.githubusercontent.com/u/6233452?v=4","gravatar_id":"","url":"https://api.github.com/users/derekwaynecarr","html_url":"https://github.com/derekwaynecarr","followers_url":"https://api.github.com/users/derekwaynecarr/followers","following_url":"https://api.github.com/users/derekwaynecarr/following{/other_user}","gists_url":"https://api.github.com/users/derekwaynecarr/gists{/gist_id}","starred_url":"https://api.github.com/users/derekwaynecarr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/derekwaynecarr/subscriptions","organizations_url":"https://api.github.com/users/derekwaynecarr/orgs","repos_url":"https://api.github.com/users/derekwaynecarr/repos","events_url":"https://api.github.com/users/derekwaynecarr/events{/privacy}","received_events_url":"https://api.github.com/users/derekwaynecarr/received_events","type":"User","site_admin":false},"body":"nit: With","created_at":"2018-05-21T14:55:39Z","updated_at":"2018-05-21T15:04:07Z","html_url":"https://github.com/kubernetes/community/pull/2090#discussion_r189614650","pull_request_url":"https://api.github.com/repos/kubernetes/community/pulls/2090","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/kubernetes/community/pulls/comments/189614650"},"html":{"href":"https://github.com/kubernetes/community/pull/2090#discussion_r189614650"},"pull_request":{"href":"https://api.github.com/repos/kubernetes/community/pulls/2090"}}},"pull_request":{"url":"https://api.github.com/repos/kubernetes/community/pulls/2090","id":184895659,"html_url":"https://github.com/kubernetes/community/pull/2090","diff_url":"https://github.com/kubernetes/community/pull/2090.diff","patch_url":"https://github.com/kubernetes/community/pull/2090.patch","issue_url":"https://api.github.com/repos/kubernetes/community/issues/2090","number":2090,"state":"open","locked":false,"title":"KEP: efficient node heartbeats","user":{"login":"wojtek-t","id":10743879,"avatar_url":"https://avatars3.githubusercontent.com/u/10743879?v=4","gravatar_id":"","url":"https://api.github.com/users/wojtek-t","html_url":"https://github.com/wojtek-t","followers_url":"https://api.github.com/users/wojtek-t/followers","following_url":"https://api.github.com/users/wojtek-t/following{/other_user}","gists_url":"https://api.github.com/users/wojtek-t/gists{/gist_id}","starred_url":"https://api.github.com/users/wojtek-t/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wojtek-t/subscriptions","organizations_url":"https://api.github.com/users/wojtek-t/orgs","repos_url":"https://api.github.com/users/wojtek-t/repos","events_url":"https://api.github.com/users/wojtek-t/events{/privacy}","received_events_url":"https://api.github.com/users/wojtek-t/received_events","type":"User","site_admin":false},"body":"/assign @dchen1107 @derekwaynecarr \r\n/reviewers @lavalamp @deads2k \r\n\r\n/cc @bgrant0607 @yujuhong @liggitt @smarterclayton \r\n@kubernetes/sig-node-api-reviews @kubernetes/sig-api-machinery-api-reviews ","created_at":"2018-04-30T07:45:48Z","updated_at":"2018-05-21T15:04:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"11cc3327f2437f31ea8af79852ee6ba785b71ebf","assignee":{"login":"dchen1107","id":7740897,"avatar_url":"https://avatars2.githubusercontent.com/u/7740897?v=4","gravatar_id":"","url":"https://api.github.com/users/dchen1107","html_url":"https://github.com/dchen1107","followers_url":"https://api.github.com/users/dchen1107/followers","following_url":"https://api.github.com/users/dchen1107/following{/other_user}","gists_url":"https://api.github.com/users/dchen1107/gists{/gist_id}","starred_url":"https://api.github.com/users/dchen1107/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dchen1107/subscriptions","organizations_url":"https://api.github.com/users/dchen1107/orgs","repos_url":"https://api.github.com/users/dchen1107/repos","events_url":"https://api.github.com/users/dchen1107/events{/privacy}","received_events_url":"https://api.github.com/users/dchen1107/received_events","type":"User","site_admin":false},"assignees":[{"login":"derekwaynecarr","id":6233452,"avatar_url":"https://avatars3.githubusercontent.com/u/6233452?v=4","gravatar_id":"","url":"https://api.github.com/users/derekwaynecarr","html_url":"https://github.com/derekwaynecarr","followers_url":"https://api.github.com/users/derekwaynecarr/followers","following_url":"https://api.github.com/users/derekwaynecarr/following{/other_user}","gists_url":"https://api.github.com/users/derekwaynecarr/gists{/gist_id}","starred_url":"https://api.github.com/users/derekwaynecarr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/derekwaynecarr/subscriptions","organizations_url":"https://api.github.com/users/derekwaynecarr/orgs","repos_url":"https://api.github.com/users/derekwaynecarr/repos","events_url":"https://api.github.com/users/derekwaynecarr/events{/privacy}","received_events_url":"https://api.github.com/users/derekwaynecarr/received_events","type":"User","site_admin":false},{"login":"dchen1107","id":7740897,"avatar_url":"https://avatars2.githubusercontent.com/u/7740897?v=4","gravatar_id":"","url":"https://api.github.com/users/dchen1107","html_url":"https://github.com/dchen1107","followers_url":"https://api.github.com/users/dchen1107/followers","following_url":"https://api.github.com/users/dchen1107/following{/other_user}","gists_url":"https://api.github.com/users/dchen1107/gists{/gist_id}","starred_url":"https://api.github.com/users/dchen1107/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dchen1107/subscriptions","organizations_url":"https://api.github.com/users/dchen1107/orgs","repos_url":"https://api.github.com/users/dchen1107/repos","events_url":"https://api.github.com/users/dchen1107/events{/privacy}","received_events_url":"https://api.github.com/users/dchen1107/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"jpbetz","id":523590,"avatar_url":"https://avatars1.githubusercontent.com/u/523590?v=4","gravatar_id":"","url":"https://api.github.com/users/jpbetz","html_url":"https://github.com/jpbetz","followers_url":"https://api.github.com/users/jpbetz/followers","following_url":"https://api.github.com/users/jpbetz/following{/other_user}","gists_url":"https://api.github.com/users/jpbetz/gists{/gist_id}","starred_url":"https://api.github.com/users/jpbetz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jpbetz/subscriptions","organizations_url":"https://api.github.com/users/jpbetz/orgs","repos_url":"https://api.github.com/users/jpbetz/repos","events_url":"https://api.github.com/users/jpbetz/events{/privacy}","received_events_url":"https://api.github.com/users/jpbetz/received_events","type":"User","site_admin":false},{"login":"yujuhong","id":10524058,"avatar_url":"https://avatars1.githubusercontent.com/u/10524058?v=4","gravatar_id":"","url":"https://api.github.com/users/yujuhong","html_url":"https://github.com/yujuhong","followers_url":"https://api.github.com/users/yujuhong/followers","following_url":"https://api.github.com/users/yujuhong/following{/other_user}","gists_url":"https://api.github.com/users/yujuhong/gists{/gist_id}","starred_url":"https://api.github.com/users/yujuhong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yujuhong/subscriptions","organizations_url":"https://api.github.com/users/yujuhong/orgs","repos_url":"https://api.github.com/users/yujuhong/repos","events_url":"https://api.github.com/users/yujuhong/events{/privacy}","received_events_url":"https://api.github.com/users/yujuhong/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":486032367,"url":"https://api.github.com/repos/kubernetes/community/labels/cncf-cla:%20yes","name":"cncf-cla: yes","color":"bfe5bf","default":false},{"id":653942782,"url":"https://api.github.com/repos/kubernetes/community/labels/kind/api-change","name":"kind/api-change","color":"c7def8","default":false},{"id":653942861,"url":"https://api.github.com/repos/kubernetes/community/labels/sig/api-machinery","name":"sig/api-machinery","color":"d2b48c","default":false},{"id":653942863,"url":"https://api.github.com/repos/kubernetes/community/labels/sig/architecture","name":"sig/architecture","color":"d2b48c","default":false},{"id":653942891,"url":"https://api.github.com/repos/kubernetes/community/labels/sig/node","name":"sig/node","color":"d2b48c","default":false},{"id":653942910,"url":"https://api.github.com/repos/kubernetes/community/labels/size/L","name":"size/L","color":"ee9900","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/kubernetes/community/pulls/2090/commits","review_comments_url":"https://api.github.com/repos/kubernetes/community/pulls/2090/comments","review_comment_url":"https://api.github.com/repos/kubernetes/community/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes/community/issues/2090/comments","statuses_url":"https://api.github.com/repos/kubernetes/community/statuses/5465e31d8731e079cf8d63f4f4084b19530b4e9a","head":{"label":"wojtek-t:node_heartbeat_kep","ref":"node_heartbeat_kep","sha":"5465e31d8731e079cf8d63f4f4084b19530b4e9a","user":{"login":"wojtek-t","id":10743879,"avatar_url":"https://avatars3.githubusercontent.com/u/10743879?v=4","gravatar_id":"","url":"https://api.github.com/users/wojtek-t","html_url":"https://github.com/wojtek-t","followers_url":"https://api.github.com/users/wojtek-t/followers","following_url":"https://api.github.com/users/wojtek-t/following{/other_user}","gists_url":"https://api.github.com/users/wojtek-t/gists{/gist_id}","starred_url":"https://api.github.com/users/wojtek-t/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wojtek-t/subscriptions","organizations_url":"https://api.github.com/users/wojtek-t/orgs","repos_url":"https://api.github.com/users/wojtek-t/repos","events_url":"https://api.github.com/users/wojtek-t/events{/privacy}","received_events_url":"https://api.github.com/users/wojtek-t/received_events","type":"User","site_admin":false},"repo":{"id":84565550,"name":"community","full_name":"wojtek-t/community","owner":{"login":"wojtek-t","id":10743879,"avatar_url":"https://avatars3.githubusercontent.com/u/10743879?v=4","gravatar_id":"","url":"https://api.github.com/users/wojtek-t","html_url":"https://github.com/wojtek-t","followers_url":"https://api.github.com/users/wojtek-t/followers","following_url":"https://api.github.com/users/wojtek-t/following{/other_user}","gists_url":"https://api.github.com/users/wojtek-t/gists{/gist_id}","starred_url":"https://api.github.com/users/wojtek-t/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wojtek-t/subscriptions","organizations_url":"https://api.github.com/users/wojtek-t/orgs","repos_url":"https://api.github.com/users/wojtek-t/repos","events_url":"https://api.github.com/users/wojtek-t/events{/privacy}","received_events_url":"https://api.github.com/users/wojtek-t/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/wojtek-t/community","description":"Kubernetes community content","fork":true,"url":"https://api.github.com/repos/wojtek-t/community","forks_url":"https://api.github.com/repos/wojtek-t/community/forks","keys_url":"https://api.github.com/repos/wojtek-t/community/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wojtek-t/community/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wojtek-t/community/teams","hooks_url":"https://api.github.com/repos/wojtek-t/community/hooks","issue_events_url":"https://api.github.com/repos/wojtek-t/community/issues/events{/number}","events_url":"https://api.github.com/repos/wojtek-t/community/events","assignees_url":"https://api.github.com/repos/wojtek-t/community/assignees{/user}","branches_url":"https://api.github.com/repos/wojtek-t/community/branches{/branch}","tags_url":"https://api.github.com/repos/wojtek-t/community/tags","blobs_url":"https://api.github.com/repos/wojtek-t/community/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wojtek-t/community/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wojtek-t/community/git/refs{/sha}","trees_url":"https://api.github.com/repos/wojtek-t/community/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wojtek-t/community/statuses/{sha}","languages_url":"https://api.github.com/repos/wojtek-t/community/languages","stargazers_url":"https://api.github.com/repos/wojtek-t/community/stargazers","contributors_url":"https://api.github.com/repos/wojtek-t/community/contributors","subscribers_url":"https://api.github.com/repos/wojtek-t/community/subscribers","subscription_url":"https://api.github.com/repos/wojtek-t/community/subscription","commits_url":"https://api.github.com/repos/wojtek-t/community/commits{/sha}","git_commits_url":"https://api.github.com/repos/wojtek-t/community/git/commits{/sha}","comments_url":"https://api.github.com/repos/wojtek-t/community/comments{/number}","issue_comment_url":"https://api.github.com/repos/wojtek-t/community/issues/comments{/number}","contents_url":"https://api.github.com/repos/wojtek-t/community/contents/{+path}","compare_url":"https://api.github.com/repos/wojtek-t/community/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wojtek-t/community/merges","archive_url":"https://api.github.com/repos/wojtek-t/community/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wojtek-t/community/downloads","issues_url":"https://api.github.com/repos/wojtek-t/community/issues{/number}","pulls_url":"https://api.github.com/repos/wojtek-t/community/pulls{/number}","milestones_url":"https://api.github.com/repos/wojtek-t/community/milestones{/number}","notifications_url":"https://api.github.com/repos/wojtek-t/community/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wojtek-t/community/labels{/name}","releases_url":"https://api.github.com/repos/wojtek-t/community/releases{/id}","deployments_url":"https://api.github.com/repos/wojtek-t/community/deployments","created_at":"2017-03-10T14:02:01Z","updated_at":"2017-03-10T14:02:04Z","pushed_at":"2018-05-18T14:07:01Z","git_url":"git://github.com/wojtek-t/community.git","ssh_url":"git@github.com:wojtek-t/community.git","clone_url":"https://github.com/wojtek-t/community.git","svn_url":"https://github.com/wojtek-t/community","homepage":"","size":20219,"stargazers_count":0,"watchers_count":0,"language":"Makefile","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"kubernetes:master","ref":"master","sha":"09ae39dda539b6408ad3bcacf8e1ab534208714c","user":{"login":"kubernetes","id":13629408,"avatar_url":"https://avatars2.githubusercontent.com/u/13629408?v=4","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"repo":{"id":57939112,"name":"community","full_name":"kubernetes/community","owner":{"login":"kubernetes","id":13629408,"avatar_url":"https://avatars2.githubusercontent.com/u/13629408?v=4","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/kubernetes/community","description":"Kubernetes community content","fork":false,"url":"https://api.github.com/repos/kubernetes/community","forks_url":"https://api.github.com/repos/kubernetes/community/forks","keys_url":"https://api.github.com/repos/kubernetes/community/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kubernetes/community/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kubernetes/community/teams","hooks_url":"https://api.github.com/repos/kubernetes/community/hooks","issue_events_url":"https://api.github.com/repos/kubernetes/community/issues/events{/number}","events_url":"https://api.github.com/repos/kubernetes/community/events","assignees_url":"https://api.github.com/repos/kubernetes/community/assignees{/user}","branches_url":"https://api.github.com/repos/kubernetes/community/branches{/branch}","tags_url":"https://api.github.com/repos/kubernetes/community/tags","blobs_url":"https://api.github.com/repos/kubernetes/community/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kubernetes/community/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kubernetes/community/git/refs{/sha}","trees_url":"https://api.github.com/repos/kubernetes/community/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kubernetes/community/statuses/{sha}","languages_url":"https://api.github.com/repos/kubernetes/community/languages","stargazers_url":"https://api.github.com/repos/kubernetes/community/stargazers","contributors_url":"https://api.github.com/repos/kubernetes/community/contributors","subscribers_url":"https://api.github.com/repos/kubernetes/community/subscribers","subscription_url":"https://api.github.com/repos/kubernetes/community/subscription","commits_url":"https://api.github.com/repos/kubernetes/community/commits{/sha}","git_commits_url":"https://api.github.com/repos/kubernetes/community/git/commits{/sha}","comments_url":"https://api.github.com/repos/kubernetes/community/comments{/number}","issue_comment_url":"https://api.github.com/repos/kubernetes/community/issues/comments{/number}","contents_url":"https://api.github.com/repos/kubernetes/community/contents/{+path}","compare_url":"https://api.github.com/repos/kubernetes/community/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kubernetes/community/merges","archive_url":"https://api.github.com/repos/kubernetes/community/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kubernetes/community/downloads","issues_url":"https://api.github.com/repos/kubernetes/community/issues{/number}","pulls_url":"https://api.github.com/repos/kubernetes/community/pulls{/number}","milestones_url":"https://api.github.com/repos/kubernetes/community/milestones{/number}","notifications_url":"https://api.github.com/repos/kubernetes/community/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kubernetes/community/labels{/name}","releases_url":"https://api.github.com/repos/kubernetes/community/releases{/id}","deployments_url":"https://api.github.com/repos/kubernetes/community/deployments","created_at":"2016-05-03T03:36:05Z","updated_at":"2018-05-21T10:33:00Z","pushed_at":"2018-05-21T02:40:50Z","git_url":"git://github.com/kubernetes/community.git","ssh_url":"git@github.com:kubernetes/community.git","clone_url":"https://github.com/kubernetes/community.git","svn_url":"https://github.com/kubernetes/community","homepage":"","size":20893,"stargazers_count":1879,"watchers_count":1879,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1174,"mirror_url":null,"archived":false,"open_issues_count":204,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":1174,"open_issues":204,"watchers":1879,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes/community/pulls/2090"},"html":{"href":"https://github.com/kubernetes/community/pull/2090"},"issue":{"href":"https://api.github.com/repos/kubernetes/community/issues/2090"},"comments":{"href":"https://api.github.com/repos/kubernetes/community/issues/2090/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes/community/pulls/2090/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes/community/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes/community/pulls/2090/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes/community/statuses/5465e31d8731e079cf8d63f4f4084b19530b4e9a"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"derekwaynecarr"}}