Skip to content

Commit c2eaae0

Browse files
committed
Update comparison.md
1 parent f70e6cc commit c2eaae0

File tree

1 file changed

+46
-3
lines changed

1 file changed

+46
-3
lines changed

docs/comparison.md

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,50 @@
11
# Rational and Comparison to Similar Solutions
22

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:
46

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+
616

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

Comments
 (0)