Which community Kubernetes deployment strategy should we choose for self-hosting?

I’m trying to figure out which community K8s deployment would be right for our organization if we were to self-host it on AWS infrastructure. We’re looking for a solution that handles provisioning, updates, and monitors K8s well.

We’ve deployed using tutor local on AWS but realize that we need to set up K8s architecture to handle our growing user base. Here are some of the K8s deployment solutions that I see in the community. Based on this criteria, I’d like feedback (positive/negative) on these options.

Criteria

  • Cloud provider AWS.
  • Metrics for Overall Accounts and Course Enrollments for our instance.
    • 19544 active accounts.
    • 41511 active course enrollments
  • Microsites with Site Configuration and Theming Enabled for our instance.
    • 17 sites (we’re considering reducing this a good bit)

Open Source K8s Solutions
I’m trying to keep the write-up below short because the repos/documentation go into more detail about these deployment solutions.

2 Likes

My understanding is that harmony is where the community is working together to make something production ready for large scale and multi-tenancy. I haven’t been working closely with it but I think a few providers have been using it.

1 Like

This is timely as we’ve just reengaged with AWS to create a refreshed reference architecture for hosting the Open edX platform on AWS.

I would also benefit from knowing the why or if one would use Grove rather than Harmony.

1 Like

cookiecutter-openedx-devops: Yes, this is a nice project by Lawrence McDaniel; it follows a lot of best practices and has a lot of batteries included. It is a completely different approach than the others, though it of course uses some of the same pieces like cert-manager and metrics-server. One big drawback to the cookiecutter approach is that as far as I know it’s a one-time setup that creates everything for you, but doesn’t have any mechanism for updating your stuff later on if the cookiecutter is improved. It also hasn’t been updated in 7 months so it doesn’t support Sumac or the new Studio features that are powered by Meilisearch.

Harmony: This is the main, community-developed toolkit for running Open edX on Kubernetes. If you want to run Open edX on Kubernetes, then I recommend you use Harmony one way or another. Both OpenCraft and eduNEXT currently use it in production (and Raccoon Gang and others have contributed to it). We also use it for things like the automated sandboxes that can be created for some PRs to Open edX.

Harmony focuses on everything that runs within the cluster; it doesn’t necessarily set up the cluster (VPC, K8s, S3, MySQL, MongoDB) as you pointed out. However, it does include complete Terraform code for setting up a cluster on AWS if you want to use Terraform to manage it. So if you use that optional part, it is a complete solution.

Grove is our own deployment management tool that is built around GitLab CI and Harmony. If you want to use GitLab to deploy stuff, want to monitor PRs and auto-create sandboxes, or want to deploy to both DigitalOcean and AWS, then Grove could be a nice choice for you and we welcome collaboration (it’s all open source). If you want to use something else like GitHub CI, GoCD, or just using Terraform to manage everything (which is totally reasonable) then Grove probably doesn’t have much to offer and you can just use Harmony itself and/or whatever infra management tool you’d like.

2 Likes

@braden
Thank for for this detailed feedback! We’ll talk this over and go with one of the three solutions.

We decided to go with Grove because it has already integrated Harmony which will allow us to pursue the Sumac release. Grove also provides a production ready solution for pushing additional infrastructure updates through Terraform for both AWS and DigitalOcean that will continue to remain open-sourced. Also, the separation of running instances and documentation alone is invaluable when getting started with Open edX deployment.