{"action":"closed","issue":{"url":"https://api.github.com/repos/kubernetes/kubernetes/issues/503","labels_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/503/labels{/name}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/503/comments","events_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/503/events","html_url":"https://github.com/kubernetes/kubernetes/issues/503","id":38112795,"number":503,"title":"Higher level image and deployment concepts in Kubernetes","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},"labels":[{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/area/app-config-deployment","name":"area/app-config-deployment","color":"fb6420"},{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/area/usability","name":"area/usability","color":"bfe5bf"},{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/kind/design","name":"kind/design","color":"c7def8"},{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/priority/P3","name":"priority/P3","color":"fef2c0"},{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/team/CSI","name":"team/CSI","color":"d2b48c"}],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":16,"created_at":"2014-07-17T18:46:26Z","updated_at":"2016-01-07T03:56:21Z","closed_at":"2016-01-07T03:56:21Z","body":"In Kubernetes, the reference from a container manifest to an image is a \"name\" - that name is arbitrary and it is up to the user to specific how that name interacts with their docker build and docker registry scenarios.  That includes ensuring that the name and label the user uses to refer to their image is not changed accidentally (so that new images aren't introduced outside of a controlled deployment process) and that the registry DNS that hosts the images is continuously available as long as that image may be needed (see [docker image discussions for how this might change](https://github.com/dotcloud/docker/issues/6805)).\r\n\r\nThat loose coupling is valuable for flexibility, but the lack of a concrete process leaves room for error and requires thought and control.  In addition, the resolution of those names is tightly bound to the execution of the container in the Kubelet.\r\n\r\nWe think there is value in Kubernetes providing a set of higher level concepts above pods/replication controllers that can be used to create deployable units of containers.  Two concepts we see as valuable are \"builds\" and \"deployments\" - the former can be used to compose new images (by leveraging the Kubernetes cluster for build slaves with resource control) and the latter can manage the process of transitioning between one set of podTemplates to another (and can be triggered by builds).\r\n\r\nFirst, is this something that should be in Kubernetes?  Should it be on top of Kubernetes as a separate server?  Or is it something that could be optionally enabled by those who wish to work on it?  We've got some ideas of how we could make this flow work really cleanly with Docker and images, but we'd want to get feedback on those ideas."}}