How to build a cloud agnostic multi-node cluster with external access ? #9252
Replies: 1 comment 2 replies
-
I'm not sure if there is a single thing that works everywhere. That is not really a Strimzi issue but a Kubernetes issue. All of them have some limitations caused by your infrastructure and environment. NodePorts are probably the least dependent on the outside infrastructure. But even they need your nodes to be publicly accessible which is what many users don't want. Load balancers are fine in public clouds. But might not be available outside of them. I personally use MetalLB for load balancers in my home cluster and I'm happy with it - but I have a physical cluster and not Vagrant / VirtualBox VM, so not sure how well it works there. Ingress is fine, but it basically requires node port or load balancer as well (just not so many of them, which is sometimes an advantage). There are also other technologies such as Skupper that can link various clusters / networks. But they will always require some loadbalancer / nodeport / ingress to bootstrap. I personally think that using various mechanisms in various places is relatively simple and would simply use the suitable mechanism for given environment. E.g. node ports for local development, load balancers in public cloud etc. For your client based Kafka applications (the MQTT brokers) the address will differ anyway. And changing the type in the Kafka custom resource on the Strimzi side is normally reasonably easy.
I'm not aware of any limitations. I was running Strimzi on a K3s cluster for almost 6 months recently without any major issues. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
I'm building a project with Kafka and K8s where I need to deploy a Kafka cluster and let applications outside of the cluster send messages to it so applications inside of the cluster can consume and store it. In this project, we have a bunch of IoT devices from multiple companies producing a lot of data and all this data needs to be processed. The architecture is as follows:
An MQTT broker gathers all the data from the devices and publishes to a topic in the cluster.
Because of the nature of the problem (Multiple companies with different cloud providers), the MQTT broker lives outside of our Kafka cluster.
So I need to deploy a load balancer or ingress service that allows external applications to publish messages.
(In this example I gave, there is only one MQTT broker, but in production I will be working with multiple MQTT brokers.)
For development purposes, I started prototyping by running a cluster locally using vagrant, virtualbox, kubeadm and flannel. This worked initially, until I found out that kubeadm doesn’t offer a load balancer service (type: loadbalancer doesn’t work, the external IP stays pending indefinitely), so I did some research and found out that maybe K3s could solve some of my problems or a could deploy a custom load balancer and make it work with kubeadm.
So I have two questions:
Given my problem, which would work best with Strimzi and Kafka, a load balancer or an Ingress service ?
From what I have seen, Strimzi doesn’t work well with K3s, so should I stay in kubeadm and add an ingress/load balancer or moving to K3s is the best choice here ?
Beta Was this translation helpful? Give feedback.
All reactions