|
1 | 1 | # Rational and Comparison to Similar Solutions
|
2 | 2 |
|
3 |
| -## metacontroller |
| 3 | +There are other solutions comparable to *resource-glue-operator* that work (or limited to work) on top |
| 4 | +of Kubernetes resources in a language-independent way and try to simplify the operator |
| 5 | +development but make some compromises. *resource-glue-operator* has some nice properties: |
4 | 6 |
|
5 |
| -## Helm Operators |
| 7 | +1. **input is only a custom resource** (`Glue` or `GlueOperator`) that makes it very easy to set up, maintain, |
| 8 | + and start with. You don't have to build the project, all you have to manage is `yaml` files (CRD, inputs, deployment) |
| 9 | + to create an operator. |
| 10 | + |
| 11 | +2. **Supports ordered resource reconciliation** which is very helpful when you have a kind of a "workflow" in your controller |
| 12 | + when have to wait until another resource is fully reconciled, maybe use its output (status) as an input for another resource. |
| 13 | + In practice, we see surprisingly a lot of such use cases, and especially could be important when managing external resource |
| 14 | + (more precisely Kubernetes objects that represents external resources) |
| 15 | + |
6 | 16 |
|
7 |
| -## Crossplane Composition |
| 17 | +You can reach the point with all such tools when it is not enough to cover your use case, in that case, there is no other |
| 18 | +way just implement the controller using a classic operator framework, |
| 19 | +like [Java Operator SDK](https://github.com/operator-framework/java-operator-sdk) or [Operator SDK](https://sdk.operatorframework.io/). |
| 20 | + |
| 21 | +However, when you just decide that you want to have a nice Kubernetes native way to manage your application/resources using Operators, such tools make |
| 22 | +it very easy to start with. Or if you building a platform with simple abstractions over existing resources which are just compositions of other resources |
| 23 | +this is probably the most elegant way to go. |
| 24 | + |
| 25 | +As mentioned before there are solutions that are comparable to ours, and all of them have advantages and disadvantages: |
| 26 | + |
| 27 | +- [**metacontroller**](https://github.com/metacontroller/metacontroller) - it a very interesting solution that allows |
| 28 | + to implement controller is any language programming language, just like in the case of *resource-glue-operator* takes a custom resource as an input, which |
| 29 | + describes the Kubernetes resources that we are interested in - or watched/managed for a custom resource. |
| 30 | + However, it does not describe the desired state that is up to you to implement in the form of a web service endpoint, |
| 31 | + where all the inputs are received and the output is a list of desired resources. |
| 32 | + - **pros**: you can implement a controller in any programming language, |
| 33 | + that does not necessarily have a nice operator framework |
| 34 | + - **cons**: it is still limited to Kubernetes resources, every reconciliation requires a web service call |
| 35 | + this is problematic in cases when a huge number of resources are watched since the payload might |
| 36 | + be huge. Also, the endpoint still needs to be built and deployed. |
| 37 | + |
| 38 | + In summary *metacontroller* is a bit more generic solution this moment, |
| 39 | + but with additional complexity to manage, and much harder to start with. |
| 40 | + The main practical difference is in supporting ["bulk resources"](https://github.com/csviri/resource-glue-operator/issues/75) |
| 41 | + we will also support it in future versions. |
| 42 | + |
| 43 | +- [Helm Operators](https://sdk.operatorframework.io/docs/building-operators/helm/tutorial/) - are a very efficient |
| 44 | + way to convert a helm chart into a controller. It also makes it very easy to start and use. |
| 45 | + However, the controller still needs to be build (the helm chart is not just an input configuration), |
| 46 | + does not handle related resources, and does not support ordering. In this terms is a bit more limited |
| 47 | + than *resource-glue-operator*. |
| 48 | + |
| 49 | +## [Crossplane Composition](https://docs.crossplane.io/latest/concepts/compositions/) |
| 50 | +TODO |
0 commit comments