-
Notifications
You must be signed in to change notification settings - Fork 46
docs: add OEP-45/decision-0003 #807
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
gabor-boros
wants to merge
5
commits into
master
Choose a base branch
from
gabor/oep45-decision0003
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+111
−13
Open
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
c5a04b1
docs: add OEP-45/decision-0003
gabor-boros a97376c
docs: update decision of oep-45/0003
gabor-boros f687742
chore: add documentation URL redirect
gabor-boros bfb3400
docs: apply suggestions from code review
gabor-boros 34c0297
docs: make clarifications
gabor-boros File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
73 changes: 73 additions & 0 deletions
73
.../architectural-decisions/oep-0045/decisions/0003-deploying-instances-on-k8s.rst
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,73 @@ | ||
| Deploying Open edX on Instances Kubernetes | ||
| ########################################## | ||
|
|
||
| Status | ||
| ****** | ||
|
|
||
| Draft | ||
|
|
||
|
|
||
| Context | ||
| ******* | ||
|
|
||
| Hosting Open edX instances on Kubernetes requires a complex infrastructure setup, especially when multiple instances are involved. Decisions made during cluster setup can directly affect the performance, latency, and reliability of those instances | ||
|
|
||
| The `decision 0002`_ elaborates on the need for community-maintained components to reduce this complexity. Although the Terraform modules and Helm chart support a modular setup already removing a significant part of the complexity, they do not fully abstract that away. Furthermore, none of these components are addressing the significant challenge of deploying instances on Kubernetes. | ||
|
|
||
| Open edX commercial providers are addressing this challenge with purpose-made solutions that are mostly not compatible with each other, although they are built using some community-maintained and provided components. | ||
|
|
||
| .. _decision 0002: https://docs.openedx.org/projects/openedx-proposals/en/latest/architectural-decisions/oep-0045/decisions/0002-openedx-hosting-infrastructure-on-k8s.html | ||
|
|
||
|
|
||
| Decision | ||
| ******** | ||
|
|
||
| We recommend that all large Open edX deployments use the community-maintained Terraform modules and Helm chart described in decision 0002, existing solutions in the Open edX ecosystem (`GitHub Actions`_), provider-maintained open-source tooling (`Drydock`_ and `Picasso`_), and cloud-native, provider-agnostic deployment tools (`ArgoCD`_, and `Argo Workflows`_). We encourage providers to share any additional deployment code/tooling they use as open source repos or templates that other providers can use as a reference. If any particular template such as OpenCraft's `Launchpad`_ becomes adopted by multiple providers, it should be considered for adoption as a community standard, and this OEP should be updated to recommend its use. | ||
|
|
||
| .. _GitHub Actions: https://github.com/features/actions | ||
| .. _Drydock: https://github.com/eduNEXT/drydock | ||
| .. _Picasso: https://github.com/eduNEXT/picasso | ||
| .. _ArgoCD: https://argo-cd.readthedocs.io/en/stable/ | ||
| .. _Argo Workflows: https://argoproj.github.io/workflows/ | ||
| .. _Launchpad: https://github.com/open-craft/launchpad-cluster-template | ||
|
|
||
|
|
||
| Consequences | ||
| ************ | ||
|
|
||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We could add an introductory session, that explains these consequences and recommendations apply to those that decide to take the joint path of harmony+tools(argo, drydock,...) |
||
| Build Pipeline Considerations | ||
| ============================= | ||
|
|
||
| In order to build Open edX instance images with Tutor, the CI/CD pipelines should be executed. The cluster template is going to use Picasso to simplify the image building process, though this binds the rendered clusters to GitHub Actions. | ||
|
|
||
|
|
||
| Deployment Pipeline Considerations | ||
| ================================== | ||
|
|
||
| The deployment of instances are going to be handled by ArgoCD that reads the Kubernetes manifests rendered by Tutor and pushed to the cluster repository by GitHub Actions. Although this keeps continuous deployment convenient, easy to oversee, and ensures that every change can be audited, secrets are ending up in the version control system. | ||
|
|
||
| This is the result of some limitations coming from Tutor-rendered Kubernetes manifests. | ||
|
|
||
|
|
||
| Best Practices | ||
| ============== | ||
|
|
||
| In order to keep a healthy state for the cluster template, these best practices should be followed: | ||
|
|
||
| * All infrastructure dependency should be coming from the community-maintained and provided Terraform modules and Helm charts, laid out in decision 0002. | ||
| * Per-instance resource provisioning (e.g., database users) should be as much provider-agnostic as possible. | ||
| * No company- or Open edX provider-specific logic should live in the cluster template or rendered cluster. | ||
| * The instance deployment should be handled by cloud provider-agnostic tooling. | ||
| * The CI/CD pipelines should do only the bare-minimum needed for instance setup. | ||
| * No fragile or dangerous operations should be performed by the CI/CD pipelines except the instance deprovisioning flow. | ||
| * The operators should handle the infrastructure modifications from their computer rather than from CI/CD pipelines. | ||
| * Infrastructure provisioning should be done by the 3rd-party CLI tooling (such as `argo`, `tofu`/`terraform`, etc.) or by the scripts provided by Launchpad that is wrapping these 3rd-party tools. | ||
|
|
||
|
|
||
| Change History | ||
| ************** | ||
|
|
||
| 2026-07-03 | ||
| ========== | ||
|
|
||
| * Document created | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In decision 2, the framing is:
For , the community maintains , and will make it compatible with
I like that framing better than to offer a straight up recommendation. Part of the appeal of OpenedX is the chameleon approach.
How do you feel about using something like:
A coalition of commercial providers maintains the Terraform modules and Helm chart described in decision 0002, as well as a growing ecosystem of open-source deployment tools. For operators deploying Open edX on Kubernetes, these resources (Drydock, Picasso, ArgoCD, Argo Workflows and GitHub Actions) provide flexible reference architectures.
We recognize that Open edX deployments vary widely in scale and infrastructure. Operators are free to blend these community tools with their own existing stack, and we encourage providers to share new deployment code, modules, or templates with the community.
Because Open edX intentionally supports diverse infrastructure needs, none of these tools are mandatory. Instead, the community focuses its efforts on ensuring these reference implementations and provider templates like OpenCraft's Launchpad, are maintained well enough to serve as reliable blueprints.