NOTE: This article is part of a serie dedicated on Scaleway Kosmos. If you haven’t read from the beggining you can should start here:
- Part 1: Discovering Kosmos
- Part 2: Playing with stateless apps (this article)
- Part 3: Playing with stateful apps and volumes
- Part 4: Let’s talk about networking and CNI
- Part 5: Conclusions
Now that we have a ready Kosmos multi-cloud cluster it’s time to get ready to deploy some apps on it ! 🚀
More MC fun — Part #1 — Stateless apps 👨🎤
Since i now have a multi-cloud k8s cluster i want to deploy my usual demo app (webofmars/go-whoami powered by cute gophers) in a very HA way. 3 CPs 9 servers you will never get a downtime …
So i will deploy the following ‘ds-full’ daemonset targeting the 9 servers and expose it with a LoadBalancer type service: https://raw.githubusercontent.com/webofmars/labs-kosmos/main/k8s/ds-full.yaml
I have also 3 variants of this app:
- ds-hz: Targeting only Hetzner nodes
- ds-ovh: Targeting only OVH nodes
- ds-digitalocean: Targeting only DigitalOcean nodes
All having also their own public LoadBalancer where you can check the names of the pod you are landing to.
We can easily deploy a stateless app on MC manner or targeting a specific node pool / cloud provider.
NOTE: Beware that doing that the traffic flows from the final user → Scaleway LB → Node runnning the workload → Scaleway LB → Final user. This can be sub-optimal depending on your network latency requirements, please don’t do it at home unless you know what you are doing ;-)
Conclusions
Kosmos is really easy to use to deploy a HA stateless app on a multi-cloud manner and get a lot of value in this context.
Nota Bene: During the tests in encountered a bug with the allocation of LoadBalancers through kubernetes cloud-controller and i collected evidences for allowing Scaleway support team to fix it. It’s working like a charm now so be sure to give it another chance if you faced the same issue.
To be continued …
In the next article i will play with PersistentVolumeClaims and stateful apps… stay tuned for it :-)