Compare commits

..

No commits in common. "b9eeab3e57b61a7dbf4b342b88718429f70086e8" and "f99ac908dce2e905f22611b28a65987528ee81ae" have entirely different histories.

View File

@ -16,7 +16,7 @@ the tenant resources, and a shared **MinIO** instance for S3-compatible storage.
```mermaid
graph TD
subgraph Git Repository
A[GitOps: tenants/] -->|Contains| B(tenant-a/config.yaml)
A[GitOps: gitops/tenants/] -->|Contains| B(tenant-a/config.yaml)
A -->|Contains| C(tenant-b/config.yaml)
end
@ -26,11 +26,6 @@ graph TD
E -->|Deploys via Helm| F[Namespace: tenant-a]
E -->|Deploys via Helm| G[Namespace: tenant-b]
subgraph argo [Namespace: argocd]
D(Argo CD)
E(ApplicationSet)
end
subgraph F [Namespace: tenant-a]
F1(Jupyter Pod)
F2(ServiceAccount)
@ -52,7 +47,7 @@ graph TD
---
## 2. Requirements
## 2. Meeting the Requirements
This section details how the technical choices address the specific requirements of the assessment.
@ -85,8 +80,8 @@ application containers as a non-root user.
### 2.3 Container Images & Dependencies
* **Base & Dependent Images:** The project uses two custom images located in
`images/`. The `tenant/base` image contains the core OS (`python:3.12-slim-bookworm`),
security contexts, and user setups. The `tenant/jupyter` image builds on top
`images/`. The `tenant-base` image contains the core OS (`python:3.12-slim-bookworm`),
security contexts, and user setups. The `tenant-jupyter` image builds on top
of the base image and installs the application requirements.
* **No Hardcoded Secrets:** Images are completely stateless and free of secrets. They
rely solely on environment variables injected at runtime via Kubernetes Secrets.
@ -95,7 +90,7 @@ rely solely on environment variables injected at runtime via Kubernetes Secrets.
* **Gitea Actions Pipeline:** The CI/CD workflow (`.gitea/workflows/`) automatically
manages the image lifecycle and code quality.
* **Validation:** Helm charts and tenant configs are validated before deployment.
* **Validation:** Helm charts and Kubernetes manifests are validated before deployment.
* **Ordered Build Strategy:** The pipeline respects the image hierarchy. It builds the base image first,
then uses it to build the Jupyter image. Triggered on `*.*.*` tags, it pushes the versioned
artifacts to a private Docker registry.
@ -116,9 +111,6 @@ using the `Reflector` Kubernetes addon.
This section provides the step-by-step instructions to set up the local Kubernetes cluster and
bootstrap the GitOps environment.
*Note: You will not be able to use this repo directly as it require credentials for
my selfhosted gitea and docker registry.*
### 3.1 Prerequisites
Ensure the following tools are installed on your machine (e.g., via Homebrew on macOS):