{"id":19442367,"url":"https://github.com/treebeardtech/kubeflow-bootstrap","last_synced_at":"2026-03-16T18:32:19.547Z","repository":{"id":223444723,"uuid":"760340351","full_name":"treebeardtech/kubeflow-bootstrap","owner":"treebeardtech","description":"🪐 1-click Kubeflow using ArgoCD","archived":false,"fork":false,"pushed_at":"2024-08-08T13:05:31.000Z","size":2803,"stargazers_count":67,"open_issues_count":1,"forks_count":15,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-08T01:16:49.035Z","etag":null,"topics":["ai","airflow","argocd","dask","gpu","helm","jupyter","jupyterhub","jupyterlab","kserve","kubeflow","kubernetes","kustomize","llms","machine-learning","mlflow","ray","spark","terraform"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/treebeardtech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-20T08:35:40.000Z","updated_at":"2025-04-18T19:18:02.000Z","dependencies_parsed_at":"2024-02-21T09:45:52.031Z","dependency_job_id":"a6fb8918-1246-41ca-ab07-bfe37fb4ea0b","html_url":"https://github.com/treebeardtech/kubeflow-bootstrap","commit_stats":{"total_commits":135,"total_committers":2,"mean_commits":67.5,"dds":"0.014814814814814836","last_synced_commit":"8bbd294d45f1c6cde313f38cfdc4e3a485ad690a"},"previous_names":["treebeardtech/terraform-kubernetes-kubeflow","treebeardtech/treebeard-kubeflow","treebeardtech/kubeflow-bootstrap"],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treebeardtech%2Fkubeflow-bootstrap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treebeardtech%2Fkubeflow-bootstrap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treebeardtech%2Fkubeflow-bootstrap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treebeardtech%2Fkubeflow-bootstrap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/treebeardtech","download_url":"https://codeload.github.com/treebeardtech/kubeflow-bootstrap/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252978811,"owners_count":21834920,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","airflow","argocd","dask","gpu","helm","jupyter","jupyterhub","jupyterlab","kserve","kubeflow","kubernetes","kustomize","llms","machine-learning","mlflow","ray","spark","terraform"],"created_at":"2024-11-10T15:39:06.527Z","updated_at":"2026-03-16T18:32:19.500Z","avatar_url":"https://github.com/treebeardtech.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eKubeflow Bootstrap\u003c/h1\u003e\n  \u003cp\u003e\u003cb\u003e🪐 1-click Kubeflow using ArgoCD\u003c/b\u003e\u003c/p\u003e\n\n  \u003cimg src=\"https://raw.githubusercontent.com/treebeardtech/terraform-helm-kubeflow/main/docs/tkf.png\" width=\"400\" height=\"100%\"\u003e\n\n  \u003cbr /\u003e\n\n  \u003ca target=\"_blank\" href=\"https://artifacthub.io/packages/helm/treebeardtech-kubeflow/kubeflow\"\u003e\n    \u003cimg src=\"https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/kubeflow\" /\u003e\n  \u003c/a\u003e\n  \u003ca target=\"_blank\" href=\"https://registry.terraform.io/modules/treebeardtech/kubeflow/helm/latest\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/terraform-module-blue?logo=terraform\" /\u003e\n  \u003c/a\u003e\n  \u003ca target=\"_blank\" href=\"https://discord.gg/QFjCpMjqRY\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/chat-discord-blue?logo=discord\u0026logoColor=white\" /\u003e\n  \u003c/a\u003e\n\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\n**As both Kubernetes and AI usage grows, how do we keep operations consistent and simple?**\n\n## About this project\n\nThis project simplifies MLOps in Kubernetes by providing Kubeflow in Helm and Terraform package formats. This allows scaling Kubeflow usage with the rest of your production systems.\n\nKubeflow provides a cloud-native AI platform which can be used to deploy applications in\nscientific computing, traditional machine learning, and generative AI.\n\nThis module is primarily focussed on the Jupyter notebook environment initially such that\n* Developers can deploy and access notebook instances\n* Notebook instances can use GPUs necessary for deep learning\n* This can be done across different cloud providers (ranging from individual VMs to managed services like Amazon's EKS)\n\n## Architecture\n\nThis system is built on top of the official [Kubeflow Manifests repo](https://github.com/kubeflow/manifests) which contains _Kustomizations_ for the various components of Kubeflow.\n\nWe provide a terraform and helm-based interface for managing Kubeflow via GitOps. Because Kubeflow is a collection of modular components, this project relies on ArgoCD for combining them.\n\n### Design Tenets\n\n1. Integrate with production systems that already use Terraform and Helm\n2. Embrace GitOps for Kubernetes resources on the popular ArgoCD project\n3. Enable adoption of cloud-native/AI tools beyond the scope of Kubeflow (e.g. Ray, MLFlow)\n\n\u003cimg src=\"https://raw.githubusercontent.com/treebeardtech/terraform-helm-kubeflow/main/docs/arch.png\" width=\"650\" height=\"100%\"\u003e\n\n### Packages\n\n1. Terraform module: A simple entrypoint for those new to Argo and looking for a 1-click experience\n2. kubeflow chart: A high-level helm entrypoint for setting up Kubeflow Argo Apps\n3. kubeflow-core chart: A lower-level argo apps chart which can be invoked in the \"argo app-of-apps\" pattern.\n\n### System Requirements\n\nThe default configuration of Kubeflow provided is designed to run on a cluster with 2cpus and 8G memory.\n\n## Getting Started\n\nNote that as all of our examples are implemented in Terraform, we recommend using the Terraform module to start off. The [helm charts](helm) are likely to be a more viable interface as you move into production.\n\nWe recommend trying out this module in a development environment first.\n\nTo do so, follow the [k3s tutorial](examples/k3s).\n\n### 📺 [Youtube tutorial](https://www.youtube.com/watch?v=DtLLJqW6aG8)\n\n\u003ca target=\"_blank\" href=\"https://www.youtube.com/watch?v=DtLLJqW6aG8\" style=\"background:none\"\u003e\n  \u003cimg src=\"https://i3.ytimg.com/vi/91Kmsg7g5D8/maxresdefault.jpg\" width=\"600\" height=\"100%\"\u003e\n\u003c/a\u003e\n\n## Guides\n\n### Install via helm CLI\n\n```sh\n# install argo (necessary for orchestration)\nhelm repo add argo-cd https://argoproj.github.io/argo-helm\nhelm install -n argocd --create-namespace argo-cd argo-cd/argo-cd\n\n# install kubeflow\nhelm install kubeflow -n argocd oci://ghcr.io/treebeardtech/helm/kubeflow --version x.y.z\n```\n\nIn order to integrate Kubeflow with your production systems there are some changes you \nmay want to make:\n\n### Add Kubeflow to your Terraform module\n\n(see [Terraform Modules page](https://registry.terraform.io/modules/treebeardtech/kubeflow/helm/latest))\n```hcl\n# resource or data for your k8s cluster\n...\n\n# Initialize provider\n\nprovider \"helm\" {\n  ...\n}\n\n# Call Kubeflow module\nmodule \"treebeardkf\" {\n  source         = \"../..\"\n}\n```\n\n### Install in an existing cluster\n\nYou can incrementally add Kubeflow to your K8s cluster by installing the terraform module.\n\nSome considerations:\n1. If you are calling this Terraform module from your own module, ensure you pass in resources to the `depends_on` field so that Kubeflow installs after they finish setup.\n2. If you already have Istio and Cert Manager installed, you will need to ensure Kubeflow works with them. See [examples/k3s-existing-istio](examples/k3s-existing-istio) for a configuration that we have tested like this.\n\n### Set a new password\n\nIt's critical to not use the default password for internet-facing deployments.\n\nSee the See [examples/eks-https-loadbalancer](examples/eks-https-loadbalancer) for deployment with a non-default dex password (passed in via terraform CLI)\n\nNote that dex will only pick up new config at start -- you may have to restart the dex pod manually for a password change to take effect.\n\n### Make Kubeflow available securely on a network using HTTPS\n\nFollow the [eks-https-loadbalancer](examples/eks-https-loadbalancer) example to see how you can setup an https loadbalancer for you Kubeflow deployment\n\n### Host your Kubeflow on a domain name using DNS\n\nThis is best done by using the external DNS operator.\n\nIf you are new to external DNS, follow the [docs](https://kubernetes-sigs.github.io/external-dns/v0.14.0/) for setting up a deployment, then\nuse [this guide](https://kubernetes-sigs.github.io/external-dns/v0.14.0/tutorials/istio/) to connect external DNS to the istio gateway *service* for your Kubeflow deployment.\n\nThe [eks-https-loadbalancer](examples/eks-https-loadbalancer) example also shows this.\n\n### Create Profiles for your users\n\nProfiles are a Kubeflow abstraction that lets you securely isolate users from each other. See the [Kubeflow docs on profiles](https://www.kubeflow.org/docs/components/central-dash/profiles/)\n\n### Manage your instance with GitOps\n\nLots of the config used to define your Kubeflow instance has has no dependency on\nTerraform resource outputs such as role ARNs.\n\nThese may best be stored in a git repo and referenced using Argo's [multiple sources feature](https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/)\n\nUsing this approach you can invoke this terraform module (or the underlying bootstrap helm chart) with config like the following that combines injected values with values from a git repo.\n\nSee the [gitops example](examples/k3s-gitops) for details.\n\n### Teardown\n\n1. Manually remove any manually created Kubeflow resources, e.g. Notebook Servers and Volumes\n2. Remove the terraform module, e.g. with `terraform destroy` if you have installed directly from CLI\n3. Clean up remaining resources, e.g. Istio leaves behind some secrets that can prevent successful re-installation. You may also want to clear out CRDs, persistent volumes and namespaces\n\n## Troubleshooting\n\n### Reconfiguration challenges\n\nMoving the deployment between different states of configuration can be challenging\ndue to the dependencies between components in the cluster.\n\nIf you have made a change to a dependency such as istio, or an auth component such as dex, it can be a good idea to re-create pods such that they re-initialise. This can be done by scaling to 0 then back up again, or simply deleting a pod managed by a deployment.\n\n## See also\n\n[Blog post about this project](https://www.treebeard.io/blog/kubeflows-missing-helm-chart)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftreebeardtech%2Fkubeflow-bootstrap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftreebeardtech%2Fkubeflow-bootstrap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftreebeardtech%2Fkubeflow-bootstrap/lists"}