{"action":"created","issue":{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/11942","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/11942/labels{/name}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/11942/comments","events_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/11942/events","html_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/11942","id":97778300,"number":11942,"title":"WIP: Rolling updater availability enhancements","user":{"login":"ironcladlou","id":298299,"avatar_url":"https://avatars.githubusercontent.com/u/298299?v=3","gravatar_id":"","url":"https://api.github.com/users/ironcladlou","html_url":"https://github.com/ironcladlou","followers_url":"https://api.github.com/users/ironcladlou/followers","following_url":"https://api.github.com/users/ironcladlou/following{/other_user}","gists_url":"https://api.github.com/users/ironcladlou/gists{/gist_id}","starred_url":"https://api.github.com/users/ironcladlou/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ironcladlou/subscriptions","organizations_url":"https://api.github.com/users/ironcladlou/orgs","repos_url":"https://api.github.com/users/ironcladlou/repos","events_url":"https://api.github.com/users/ironcladlou/events{/privacy}","received_events_url":"https://api.github.com/users/ironcladlou/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/labels/cla:%20yes","name":"cla: yes","color":"bfe5bf"}],"state":"open","locked":false,"assignee":{"login":"nikhiljindal","id":10199099,"avatar_url":"https://avatars.githubusercontent.com/u/10199099?v=3","gravatar_id":"","url":"https://api.github.com/users/nikhiljindal","html_url":"https://github.com/nikhiljindal","followers_url":"https://api.github.com/users/nikhiljindal/followers","following_url":"https://api.github.com/users/nikhiljindal/following{/other_user}","gists_url":"https://api.github.com/users/nikhiljindal/gists{/gist_id}","starred_url":"https://api.github.com/users/nikhiljindal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikhiljindal/subscriptions","organizations_url":"https://api.github.com/users/nikhiljindal/orgs","repos_url":"https://api.github.com/users/nikhiljindal/repos","events_url":"https://api.github.com/users/nikhiljindal/events{/privacy}","received_events_url":"https://api.github.com/users/nikhiljindal/received_events","type":"User","site_admin":false},"milestone":null,"comments":5,"created_at":"2015-07-28T19:00:16Z","updated_at":"2015-07-30T19:21:27Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/11942","html_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/11942","diff_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/11942.diff","patch_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/11942.patch"},"body":"## :construction: WIP :construction:\r\n\r\nThis expands #10062 with a major refactor to the rolling updater to support maintaining minimum pod availability over the duration of the update process. When using an update percentage,\r\n\r\n* The maximum scaling increment per interval is a percent of the desired replica count\r\n* A minimum total available pods throughout the process is maintained at `(100 - old.replicas * percent)`\r\n* During scale down, the updater will scale down as much as possible without crossing the minimum\r\n* During scale up, the updater will scale up as much as possible without violating in-place semantics (when using a down/up scaling direction)\r\n\r\nOverall, this means the updater should make as much progress as it can each interval while maintaining a threshold of pod availability (determined by pod readiness). This should be more robust than the current behavior which optimistically scales up and down without regards to readiness of either the old or new controllers.\r\n\r\nI've made some major internal refactors for this, mainly to allow for more expressive unit test tables. I suspect that verifying the behavior and defining new requirements or changes will be most efficiently expressed between us as test scenarios similar to those in the unit tests.\r\n\r\n**Important:** This change actually backs out the new `UpdateAcceptor` interface introduced with #10062. The ability to ensure that we're making scaling decisions in terms of pod readiness actually eliminated our immediate need for `UpdateAcceptor`: if we scale up and pods don't become ready we don't scale down or progress; behavior which serves as a decent canary check for now. We'd like to revisit the concept of distinct canary checks separately."},"comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/comments/126444447","html_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/11942#issuecomment-126444447","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/11942","id":126444447,"user":{"login":"smarterclayton","id":1163175,"avatar_url":"https://avatars.githubusercontent.com/u/1163175?v=3","gravatar_id":"","url":"https://api.github.com/users/smarterclayton","html_url":"https://github.com/smarterclayton","followers_url":"https://api.github.com/users/smarterclayton/followers","following_url":"https://api.github.com/users/smarterclayton/following{/other_user}","gists_url":"https://api.github.com/users/smarterclayton/gists{/gist_id}","starred_url":"https://api.github.com/users/smarterclayton/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smarterclayton/subscriptions","organizations_url":"https://api.github.com/users/smarterclayton/orgs","repos_url":"https://api.github.com/users/smarterclayton/repos","events_url":"https://api.github.com/users/smarterclayton/events{/privacy}","received_events_url":"https://api.github.com/users/smarterclayton/received_events","type":"User","site_admin":false},"created_at":"2015-07-30T19:21:27Z","updated_at":"2015-07-30T19:21:27Z","body":"Did you implement the default fallback behavior?"}}