<p>I'm trying to add helm to a micro-services project that is very similar to the eShopOnContainers example project. </p>

<p><a href="https://github.com/dotnet-architecture/eShopOnContainers" rel="nofollow noreferrer">https://github.com/dotnet-architecture/eShopOnContainers</a></p>

<p>My question is should the charts folders and configuration be added at the solution level, per project or a combination of both?</p>

<p>My practical experience has been that, in a microservices architecture implemented using Helm, each individual service should have its own Helm chart.</p>

<p>The real problem is that Helm doesn't deal well with recursive dependencies.  A typical architectural statement is that each service has its own independent storage and no service "borrows" another's storage.  If charts A and B both say in their <code>requirements.yaml</code> that they need some database as a dependency, and your "wrapper" chart W depends on A and B, then Helm's resolver will instantiate a <em>single</em> database dependency chart and use it for both components.</p>

<p>This style is also somewhat easier to deploy.  If you take the Docker image tag as a parameter to the chart, then you can deploy each chart/service completely independently of everything else.  With one "wrapper" chart you need to be continuously redeploying that chart and coordinating changes to its specific values.  (The reverse of that is that it's a little trickier to know what specific versions of the entire system are deployed all in one place.)</p>
