Teaching Kubernetes
For me, the weakest point of Kubernetes at the moment is the developer story. Many shops don&#x27;t have dedicated ops engineers, and would need to adapt&#x2F;abstract K8s in order to make it user friendly enough for developers to use.<p>For example, to start:<p>* Where do you store the YAML manifests, and how do you maintain them? Do you put them in the same git repo as your app, and if so, how do you deal with the fact that the YAML files are going to be different for production, staging, testing&#x2F;QA, etc.? (For example, ingresses will use other host names. Configs are likely to be rather different altogether.)<p>* Or if you centralize them in a single git repo, you have to make sure that you always pull the newest version, and that your workflow includes diffing against the currently deployed version, and so on.<p>* How do you protect configs&#x2F;secrets, if they&#x27;re in git and available to all?<p>* Dependency tracking: If app A needs app B, you want to encapsulate that dependency in your workflow.<p>* Continuous delivery: How do you take care of these concerns in relation to the CD system (e.g. Drone, Jenkins)?<p>* And of course, you&#x27;ll want to be able to develop locally. If you run Minikube, how do interact with it, YAML-wise?<p>There&#x27;s Helm, but Helm is essentially just a &quot;templates in a central repo&quot; manager. It doesn&#x27;t solve the configuration issue: You still need to provide <i>values</i> to the charts.<p>It doesn&#x27;t sit right to have the YAML files in the project&#x27;s git repo. Config follows environment, not project.<p>For our current, non-Kubernetes production setup, we have a tool called Monkey that allows people do things like &quot;monkey deploy staging:myapp -r mybranch&quot; to deploy a branch, or &quot;monkey sql prod:myapp&quot; to get a PostgreSQL shell against the production database for that app, with lots of nice commands to work with the cluster. They also work directly with the Vagrant VM that developers run locally: &quot;monkey deploy dev:myapp --dev&quot; actually deploys to the VM, pointing the directory to the user&#x27;s own project (on the host machine), so that the files are the same. Combined with a React&#x2F;Redux app, they get hot code reloading and so on without having to do anything special. This shields developers from the complexities and realities of a Linux server in a very nice, convenient way. We want to provide the same on top of Kubernetes.<p>Right now I&#x27;m debating whether to just go for &quot;simple and stupid&quot; and have a central repo, and then build a small toolset to wrap kubectl for devs. By running Minikube locally, devs would be able to use the same tool locally. The command-line tool could do things like always pull the repo to ensure you&#x27;re working with the newest files. The main challenge there is organizing the YAML files in a clean way. Do we use templates to reduce boilerplate? Or do we rely on just copy-pasting stuff? It&#x27;s not quite clear to me.<p>Helm seems nice, but it&#x27;s another moving part to add to the mix. I&#x27;m leaning towards a simpler approach. I&#x27;ve looked into Deis Workflow, but it&#x27;s actually a full-blown PaaS, and seems a bit much.