Note: If you are using MicroK8s, you can simply enable the Kubeflow add-on.
This guide lists the steps necessary to install Kubeflow on any conformant Kubernetes, including AKS, EKS, GKE, Openshift and any kubeadm-deployed cluster, provided that you have access to it via kubectl
.
1. Install the Juju client
On Linux, install juju
via snap with the following command:
snap install juju --classic
Alternatively, brew install juju
on macOS or download the Windows installer.
2. Connect Juju to your Kubernetes cluster
If your Kubernetes config file is in the standard location (~/.kube/config
on Linux), and you only have one cluster, you can simply run:
juju add-k8s myk8s
If your kubectl config file contains multiple clusters, you can specify the appropriate one by name:
juju add-k8s myk8s --cluster-name=<cluster>
Finally, to use a different config file, you can set the KUBECONFIG
environment variable to point to the relevant file. For example:
KUBECONFIG=path/to/file juju add-k8s myk8s
For more details, see the Juju documentation.
3. Create a controller
To operate workloads on your Kubernetes cluster, Juju uses controllers. You can create a controller with the bootstrap
command:
juju bootstrap myk8s my-controller
This command will create a couple of pods under the my-controller
namespace. You can see your controllers with the juju controllers
command.
You can read more about controllers in the Juju documentation.
4. Create a model
A model in Juju is a blank canvas where your operators will be deployed, and it holds a 1:1 relationship with a Kubernetes namespace.
You can create a model and give it a name, e.g. kubeflow
, with the add-model
command, and you will also be creating a Kubernetes namespace of the same name:
juju add-model kubeflow
You can list your models with the juju models
command.
5. Deploy Kubeflow
MIN RESOURCES:
The minimum resources to deploy kubeflow
are - 50Gb of disk, 14Gb of RAM and 2 CPUs - available to your Linux machine or VM. If you have fewer resources, deploy kubeflow-lite
or kubeflow-edge
.
Once you have a model, you can simply juju deploy
any of the provided Kubeflow bundles into your cluster. For the Kubeflow lite bundle, run:
juju deploy kubeflow-lite
Congratulations, Kubeflow is now installing !
You can observe your Kubeflow deployment getting spun-up with the command:
watch -c juju status --color
6. Add an RBAC role for istio
Currently, in order to setup Kubeflow with Istio correctly, you need to provide the istio-ingressgateway
operator access to Kubernetes resources. The following command will create the appropriate role:
kubectl patch role -n kubeflow istio-ingressgateway-operator -p '{"apiVersion":"rbac.authorization.k8s.io/v1","kind":"Role","metadata":{"name":"istio-ingressgateway-operator"},"rules":[{"apiGroups":["*"],"resources":["*"],"verbs":["*"]}]}'
7. Set URL in authentication methods
A final step to enable your Kubeflow dashboard access is to provide your dashboard public URL to dex-auth and oidc-gatekeeper via the following commands:
juju config dex-auth public-url=http://<URL>
juju config oidc-gatekeeper public-url=http://<URL>
Where <URL>
is the hostname that the Kubeflow dashboard responds to.
Troubleshooting:
If you face any difficulties following these instructions, please create an issue here.