knkski | 2025-04-09 10:51:10 UTC | #1 This guide describes the general steps required to install Charmed Kubeflow (CKF). CKF can be installed on any [CNCF certified](https://www.cncf.io/certification/software-conformance/#logos) Kubernetes (K8s), including [Canonical Kubernetes](https://ubuntu.com/kubernetes), AKS, EKS, GKE, Openshift, and any `kubeadm`-deployed cluster. ## Requirements Charmed Kubeflow requires a running K8s cluster with the following: * Kubernetes version depending on the CKF version you are deploying. See [Supported versions](/t/7143) for more details. * A default [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/) configured. ## Bootstrap Juju CKF is deployed to Kubernetes with [Juju](https://juju.is/). Before deployment, Juju must be bootstrapped to the K8s cluster. For bootstrapping instructions, see [Get started with Juju](https://juju.is/docs/olm/get-started-with-juju). ## Create the `kubeflow` model To create a Juju model for CKF, run: ```bash juju add-model kubeflow ``` [note type="caution"] The model name must be `kubeflow`. [/note] See [Juju OLM | `add-model`](https://juju.is/docs/olm/juju-add-model) for more details. ## Deploy CKF To deploy the most recent stable version of CKF, run: ```bash juju deploy kubeflow --trust ``` [note] You can install a different version of CKF by using the `--channe`l option. See [Supported versions](/t/7143) for more details. [/note] [note] It may take up to 20 minutes for all charms to become active. [/note] You can monitor the deployment status with Juju as follows: ```bash juju status --watch 5s ``` ## Access CKF dashboard You can interact with CKF using its central dashboard, accessed through an IP address. To access it, you must: 1. Configure Dex to authenticate with the Identity Provider of your choice. 2. Find the dashboard’s IP address. ### Configure Dex To configure Dex’s built-in connector, set credentials by configuring `dex-auth` with a username and a password: ```bash juju config dex-auth static-username= juju config dex-auth static-password= ``` [note] To use an external Identity Provider, see [Integrate with identity providers](/t/10872) for more details. [/note] ### Find the dashboard IP address If the deployment uses a LoadBalancer, you can find the dashboard’s IP by running the following command: ```bash kubectl -n kubeflow get svc istio-ingressgateway-workload -o jsonpath='{.status.loadBalancer.ingress[0].ip}' ``` See [`kubectl get`](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get) for more details. If you have configured Istio Gateway to use a different gateway service type such as ClusterIP or NodePort, the dashboard should be accessible at that service’s IP. See [Istio Gateway configurations](https://charmhub.io/istio-gateway/configurations?channel=1.22/stable) for more information. [note] If DNS is required, use the resolvable address from `istio-ingressgateway`. [/note] [note] To access the dashboard remotely, you can obtain the IP over SSH and a SOCKS proxy. See [How to set up SSH](/t/10872) for more details. [/note] ### Log in Once you have accessed the dashboard IP address, log in using the credentials matching the identity provider you are using. ------------------------- 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 ------------------------- afgambin | 2024-11-27 11:15:40 UTC | #11 ------------------------- deezzir | 2025-01-15 12:01:37 UTC | #12 [quote="knkski, post:1, topic:3670"] juju config oidc-gatekeeper public-url=$PUBLIC_URL [/quote] The charm config `public-url` does not seem to exists anymore on `ckf-1.9/stable` ------------------------- afrogrit | 2025-02-20 14:52:40 UTC | #14 Hey guys, I need some help, I have installed everything correctly and no errors at all but I cannot access the UI ``` ~$ kubectl -n kubeflow get svc istio-ingressgateway-workload NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway-workload LoadBalancer 10.152.183.249 192.168.1.240 80:31363/TCP,443:31913/TCP 14h :~$ ping 10.152.183.249 PING 10.152.183.249 (10.152.183.249) 56(84) bytes of data. ^C --- 10.152.183.249 ping statistics --- 44 packets transmitted, 0 received, 100% packet loss, time 44055ms :~$ ping 192.168.1.240 PING 192.168.1.240 (192.168.1.240) 56(84) bytes of data. ^C --- 192.168.1.240 ping statistics --- 10 packets transmitted, 0 received, 100% packet loss, time 9200ms ``` ------------------------- dnplas | 2025-02-25 21:00:51 UTC | #15 @deezzir you are absolutely right, good catch. I have filed an [issue](https://github.com/canonical/bundle-kubeflow/issues/1221) to track this. Will potentially be resolved in the next release CKF 1.10. ------------------------- dnplas | 2025-02-25 21:02:44 UTC | #16 hey @afrogrit, it does not look like you've got a LoadBalancer correctly configured (I can tell from the ExternalIP address). Is that the case? If you actually have it correctly configured, could I ask you to file an issue [here](https://github.com/canonical/bundle-kubeflow/issues) with as much detail as possible? ------------------------- afrogrit | 2025-02-27 14:26:23 UTC | #17 you are right, I should have configured my LB properly, thanks -------------------------