knkski | 2023-09-19 13:05:23 UTC | #1
Charmed Kubeflow (CKF) can be installed on any [CNCF certified](https://www.cncf.io/certification/software-conformance/#logos) Kubernetes, including AKS, EKS, GKE, Openshift and any `kubeadm`-deployed cluster.
**Contents:**
1. [Prerequisites](#heading--prerequisites)
1. [Bootstrap Juju](#heading--get-a-juju-controller-in-a-kubernetes-cluster)
1. [Create a model called `kubeflow`](#heading--create-a-model-called-kubeflow)
1. [Deploy the `kubeflow` bundle](#heading--deploy-the-kubeflow-bundle)
1. [Access the Kubeflow dashboard](#heading--access-the-kubeflow-dashboard)
Prerequisites
It is assumed you have a Kubernetes cluster running. The cluster must meet these requirements:
* be version 1.22, 1.23, or 1.24
* have a (default) storage class configured
* have dns configured
* for accessing the dashboard, have a LoadBalancer and Ingress
Bootstrap Juju
Charmed Kubeflow is deployed to Kubernetes (K8s) with Juju. Before deployment, Juju must first be bootstrapped to the K8s cluster. For bootstrapping instructions, see [Juju OLM | Get started wtih the Juju OLM](https://juju.is/docs/olm/get-started-with-juju).
Create a model called `kubeflow`
To create a Juju model for Charmed Kubeflow, run:
```bash
juju add-model kubeflow
```
[note type="caution" status="Caution"]
The model name must be `kubeflow` for deploying Charmed Kubeflow.
[/note]
> See more: [Juju OLM | `juju add-model`](https://juju.is/docs/olm/juju-add-model)
To view the newly created model, run:
```bash
juju models
```
> See more: [Juju OLM | `juju models`](https://juju.is/docs/olm/juju-models)
Deploy the `kubeflow` bundle
To deploy the most recent stable version of Charmed Kubeflow:
```bash
juju deploy kubeflow --trust
```
> See more: [Charmhub | `kubeflow`](https://charmhub.io/kubeflow)
It may take up to an hour for all charms to become active. To monitor the system with Juju:
```bash
watch -c juju status --color
```
To monitor the K8s pods directly:
```bash
watch kubectl get pods -n kubeflow
```
Access the Kubeflow dashboard
To access the Kubeflow dashboard, you need to find the IP, set the credentials and then use them to log in to the dashboard.
- [Find the IP address](#heading--find-the-ip-address)
- [Set credentials](#heading--set-credentials)
- [Access the dashboard and log in](#heading--access-the-dashboard-and-log-in)
Find the IP address
To find the IP address of the Kubeflow dashboard, run the code:
```bash
kubectl get services -n kubeflow
```
The IP you need is the one attached to the `istio-ingressgateway` component.
[note type=information]
**If you're using MicroK8s, with the typical `metallb` add-on:**
You don't need to do this. The URL is always `http://10.64.140.43.nip.io`. Note that, if you have set up DNS, you should use the resolvable address used by `istio-ingressgateway`.
[/note]
> See more: [Kubernetes | `kubectl get`](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get)
Set credentials
Use the IP address you just obtained to set the URL in the `dex-auth` and `oidc-gatekeeper` components:
```bash
juju config dex-auth public-url=http://
juju config oidc-gatekeeper public-url=http://
```
Configure `dex-auth` with a username and password:
```bash
juju config dex-auth static-username=
juju config dex-auth static-password=
```
> See more: [Juju OLM | `juju config`](https://juju.is/docs/olm/juju-config), [Charmhub > `dex-auth` > Configure](https://charmhub.io/dex-auth/configure)
Access the dashboard and log in
The Kubeflow dashboard is acessed using the IP found in the previous step, appending `nip.io`, for example: `http://10.64.140.43.nip.io`. If accessing the Dashboard remotely, this URL can be made available over SSH and a SOCKS proxy - see [How to setup SSH](/t/10872) for steps.
-------------------------
sabdfl | 2020-11-10 06:32:03 UTC | #2
Surely just one page will suffice, since Kubeflow would install the same on any K8s cluster, with an extra paragraph for the fact that it's built in to MicroK8s?
-------------------------
pedroleaoc | 2021-06-03 23:08:16 UTC | #4
-------------------------
zmraul | 2022-01-21 15:18:56 UTC | #5
I think steps 6 and 7 are reversed. When installing on Charmed Kubernetes, the istio-ingressgateway operator doesn't create an external IP address until the role it's patched.
-------------------------
evilnick | 2022-01-25 16:15:07 UTC | #6
Thanks for pointing this out, for some k8s that could be an issue so I will swap it around
-------------------------
natalia-nowakowska | 2022-02-12 20:37:03 UTC | #7
Point 4 needs a small update: it says 'You can create a model and give it a name, **e.g.** kubeflow' while it has to be named exactly **kubeflow**, otherwise the deployment leads to one of the apps getting blocked with message 'kubeflow-dashboard must be deployed to model named `kubeflow`: https://git.io/J6d35'.
-------------------------
rohanrehman | 2022-11-30 14:08:43 UTC | #8
Has this been tested on 22.04?
Jesus! what an ordeal. #NotaQuickStart
-------------------------
ca-scribner | 2022-11-30 15:41:14 UTC | #9
Hey @rohanrehman,
I do use Charmed Kubeflow with 22.04 and don't know of anything that blocks it. Do you have any details you could share to look into?
Thanks!
-------------------------
rohanrehman | 2022-12-01 03:06:38 UTC | #10
thanks for getting back. Adding
`juju bootstrap microk8s --agent-version="2.9.22"` was the only solution that worked mind you... 2 clean installs (22.04 and 20.04), 32gig of ram (500GB SSD) on-prem bare metal.
full kubeflow was problematic
Any documentation on what features are missing in the kubeflow-lite?
From a kubeflow-lite deploy to kubeflow, will this destroy all containers and "start from scratch".
Thanks
-------------------------