I tried to look a bit into the previous threads, b...
# general
l
I tried to look a bit into the previous threads, but haven’t found much so far. Have you guys discussed the interactions between a SaaS control plane and Kubernetes? In particular, how does the GitOps model plays out with a control plane? Any links on these topics are welcome too! Thank you 🙏 cheers
r
that’s a great topic. I’m currently looking into argocd and maybe fluxcd
I have some experience running tekton on the same data plane cluster, wouldn’t recommend that to anyone. the builds are fast and deploys are instant, but i think that’s not it. plus, tekton is super young and rapidly growing, i.e breaking and changing. and the terminology is odd and confusing
when you say gitops and control plane, I think I understand what you mean. part of the infra is usually handled by control plane, e.g cluster routing, services, ingress, but the deployments are often time directly injected into data plane. I don’t like the idea of wrapping your runtime releases into terraform or helm charts, because releases are simple and fast, often time it’s a single deployment manifest where the only diff is a container image version
l
I’m wondering to which extent GitOps is a model applicable to infra SaaS. Imagine each of your tenants is a separate Git repo, would the control plane drive the Git repo changes?
a
When you say SaaS Control Plane, do you mean this or something else?
👍 2
r
if we think about ideal control plane that handles tenant resources, then its’ versions and overall lifecycle might also need to be part of that control plane
@Alex Pulver here we go, AWS always rocking with the naming. 😃 ‘application plane’ is what I was missing
looking at the article, application plane feels like the same thing as data plane. just in a different context
l
I will need to read the article 😊
😇 1
r
I’m curious what are the use cases for tenants to have their own gitops repos
a
@Rauan Mayemir “it depends” 😄. Yep, I think the way you put it makes sense. In my mind SaaS Control Plane and SaaS Application plane are logical domains and not necessarily tied to deployment layout. Perhaps that’s the context part.
For example, tenant provisioning functionality can be thought of as part of SaaS Control Plane, but be deployed in the same cluster as SaaS Application Plane apps
And sometimes the functionality of both planes can be deployed in the same environment
r
AHA. I guess, it depends on your architecture, and application plane is sort of an agent of the control plane that does stuff inside data plane 😃
whether it’s provisioning a new deployment for the tenant or just creating a record for your backend system to start serving the tenant
a
If we look at the definitions, then: • SaaS Control Plane includes services that give you the ability to manage and operate your tenants through a single, unified experience. • SaaS Application Plane includes the services that represent the tenant experience/application for your solution.
So the application plane is not an agent, but rather the core business functionality of the SaaS offering. Tenants interact with both though
🙌 1
For example, registration service (sign-up) is part of SaaS control plane. The functionality that customers but the SaaS offering for is in the SaaS application plane
r
❤️ 2
3
a
The architecture should account for updates (e.g. continuous delivery) and onboarding (e.g. registering new tenant)
r
@Leo Gomes besides having separate gitops repos per tenant that makes them seem non-homogenous workloads, this is thought provoking. to have to need a control plane in the first place, tenants might have different resource needs. and now I do think that control plane in general or say specialized control plane (application plane) should be able to work with tenant-scoped gitops-resources, but then your kubernetes will also need a way to have isolated multi-tenancy capabilities, maybe something like knative
👍 1
a
An example for containers/Kubernetes would look something like that (slides)
l
@Alex Pulver What would be the difference between an application plane and what people usually call the "data plane", if any?
@Rauan Mayemir What I have in mind is pretty similar to the image @Alex Pulver shared. Each tenant is a separate Kubernetes namespace and each with the their own Helm chart(s) and associated repo.
a
The SaaS application plane (and here the “SaaS” prefixes are important, especially for SaaS control plane) will contain what people usually refer to as control plane and data plane. For example, a SaaS app can offer an API to manage its resources, e.g. creating and deleting folders. That API is app’s control plane. The SaaS app can then offer an API to put files into these folders. That would be app’s data plane
❤️ 1
l
@Alex Pulver Would there be an associated YouTube video to those slides? They look quite interesting 🙂
a
@Leo Gomes thank you, but sadly this was a chalk talk format, and these are not recorded 😕 I think you can find some of that in

https://www.youtube.com/watch?v=xlAXldBt7I0

session
👍 1
@Leo Gomes as for repos, I’d suggest to consider reliability (blast radius) and operational excellence (delivery velocity). Organizing application components into their own repositories and pipelines will reduce blast radius and increase delivery velocity. It does require a strong automation culture and tooling. Taking this approach, we should be aware that application contains non-compute resources as well (e.g. databases, datastores, caches). In this approach, each application manages whatever is need for the tenant. Let’s take these Product and Order apps as an example. They can use different isolation models. Product app can store tenant data in the same database. Order app can store data (due to whatever constraints) in database-per-tenant model. Hence, their deployment process will be different, and how they manage tenancy will be different.
Product app could use a single namespace in compute for its needs and perform runtime access scoping to database. Order app could create namespace per tenant and perform isolation at deployment time.
l
Thanks! I will need to go through all the material, but I believe this is exactly what I was looking for 🙂
🙏 1
@Alex Pulver, @Ram I went through most of the material, thank you! I think that AWS' documents & presentations formalizes and summarizes a lot of ideas around what a modern SaaS application is. What I didn't find was a detailed description of how one would go about implementing the control-plane itself. This is where I believe @Ram's article kicks-in and describes the challenges and requirements for the control-plane. I have also read in detail the Snowflake's paper on their control-plane. I'd be interested in any further material you may suggest in particular on building a control-plane that would be Kubernetes-specific. Snowflake manages it's own VMs, which I believe makes sense in their case, but I'd interested more in the challenges of a control-plane that manages a fleet of k8s clusters / namespaces.
👍 1
a
Glad it was useful! Earlier in the thread, you mentioned that you might want to create a namespace per tenant. That would be part of onboarding functionality in SaaS Control Plane. Our team built AWS-based reference solution for this and other SaaS control plane pieces - EKS SaaS - Reference Solution. There is also an accompanying workshop. If you are not on AWS, I think this content can still be useful as a reference. I see you brought up cluster management as well now. That, in my mind, would be a part of an internal platform, not related to SaaS control plane or app/service control plane. For an example, perhaps look at Continuous Delivery of Amazon EKS Clusters Using AWS CDK and CDK Pipelines blog post (I think the concepts there can generalize). As a side note, I’d recommend looking at Cloud Development Kit for Kubernetes for automating Kubernetes YAML configuration.
👍 1
@Leo Gomes I wrote down in a bit more detail the alignment between SaaS control plane/SaaS application plane and Service control plane/Service data plane in https://softwhat.com/aligning-saas-and-service-planes-definitions/. Hope it can further clarify what I wrote above, and I would be glad to have any feedback 🙂
👍 1