wave-k8s / wave

Kubernetes configuration tracking controller
Apache License 2.0
647 stars 82 forks source link

Does wave replace Faros? #26

Closed Raffo closed 5 years ago

Raffo commented 5 years ago

Hi! First of all, thanks for this project, it looks very interesting. I was starting to build something like this myself but then I found this article today https://thenewstack.io/solving-kubernetes-configuration-woes-with-a-custom-controller/ and I learned about Wave and Faros. From the article and the two projects it's unclear though if Wave will replace Faros completely or if the two will co-exist. I'm currently looking to solve two problems:

Wave seems to cover the second approach but to focus on deployments only, while faros covers the general case, so I started looking at the latter... but I'd rather put effort a project that is maintained though instead of jumping on something that has no future, hence my question 😄

Also, my two cents: I have my doubts that is possible to cover all the use cases with one single project, but Faros/Wave could be either extensible enough or become a framework/library to build easily git-first tools for Kubernetes. WDYT?

JoelSpeed commented 5 years ago

Hi @Raffo, thanks for reading the article and thanks for getting in touch.

From the article and the two projects it's unclear though if Wave will replace Faros completely or if the two will co-exist.

The two projects are designed to co-exist and perform pretty different functions:

  1. Faros is designed to synchronise resources from a git repository into the cluster
    • i.e. it will continuously synchronise resources both system level and user level
    • if a user manually changes a resource that Faros is managing, Faros will put it back
    • For a user to update a system level resource or their own deployments, they need to check it in to the git repo defined in the Faros GitTrack
  2. Wave is designed to trigger rolling updates of Deployments when their configuration changes
    • If a user updates a configmap/secret in the git repository, Faros would then apply this to the cluster
    • When the configmap/secret is updated in the cluster, Wave gets notified of this and calculates the new configuration hash, if the configuration hash changes, this will then be applied to the Deployment and the deployment controller will then take over and perform a rolling update of the Pods
    • Wave is not responsible for synchronising anything from git, it only watches for changes to config objects within the cluster

Wave can be thought of as an add-on to a GitOps controller, helping to make sure rolling updates are triggered when ConfigMaps or Secrets are updated but the Deployments mounting them are not

I'd rather put effort a project that is maintained Both projects are deployed to our systems in production and are both going to be maintained

I have my doubts that is possible to cover all the use cases with one single project I'd be interested to know what kind of use cases you were thinking of here, if you have any ideas that is

We have discussed internally before about creating an extensible endpoint within Faros so that templating could be used with the project, for instance you could have some interface defined and then create a Kustomize or Helm provider that would do the application of the files to the cluster

Raffo commented 5 years ago

Thanks for the quick reply and the explanation, it's all clear now! I'm definitely gonna use Faros quite soon and will consider Wave as well. Again, I was about to build pretty much similar stuff, so I'm happy to contribute to those in case needed as it looks like we are pretty much aligned.

EDIT: feel free to close this issue!