description = "Customizing your deployment of Kubeflow"
weight = 100
+++
This guide has information about advanced customizations for Kubeflow.
## Persistent Disks
Frequently data scientists require a POSIX compliant filesystem. For example, most HDF5 libraries require POSIX and don't work with an object store like GCS or S3. Also, when working with teams you might want a shared POSIX filesystem to be mounted into your notebook environments so that data scientists can work collaboratively on the same datasets.
You can provision your own NFS shares and create Persistent Volume and Persistent Volume Claim objects and then attach them to your Jupyter notebook server via the disks flag.
Configure Jupyter to use the disks
```
ks param set jupyter disks ${PVC_CLAIM1},${PVC_CLAIM2}
```
Deploy the environment
```
ks apply cloud
```
Start Jupyter
You should see your NFS volumes mounted as `/mnt/${DISK_NAME}`
In a Jupyter cell you can run
```
!df
```
You should see output like the following
```
https://github.com/jlewi/deepvariant_on_k8s
Filesystem 1K-blocks Used Available Use% Mounted on
There are three pods that have Persistent Volume Claims (PVCs) that will get stuck in pending state if they are unable to bind their PVC. The three pods are minio, mysql, and vizier-db.
There are three pods that have Persistent Volume Claims (PVCs) that will get stuck in pending state if they are unable to bind their PVC. The three pods are minio, mysql, and katib-db.
Check the status of the PVC requests
```
...
...
@@ -172,7 +172,6 @@ EOF
```
Once created the scheduler will successfully start the remaining three pods. The PVs may also be created prior to running any of the `kfctl.sh` commands.
## OpenShift
If you are deploying Kubeflow in an [OpenShift](https://github.com/openshift/origin) environment which encapsulates Kubernetes, you will need to adjust the security contexts for the ambassador and Jupyter-hub deployments in order to get the pods to run.
...
...
@@ -188,55 +187,11 @@ You will also need to adjust the privileges of the tf-job-operator service accou
The [Docker for Mac](https://www.docker.com/docker-mac) Community Edition now ships with Kubernetes support (1.9.2) which can be enabled from their edge channel. If you decide to use this as your Kubernetes environment on Mac, you may encounter the following error when deploying Kubeflow:
```commandline
ks apply default
ERROR Attempting to deploy to environment 'default' at 'https://127.0.0.1:8443', but cannot locate a server at that address
```
This error is due to the fact that the default cluster installed by Docker for Mac is actually set to `https://localhost:6443`. One option is to directly edit the generated `environments/default/spec.json` file to set the "server" variable to the correct location, then retry the deployment. However, it is preferable to initialize your ksonnet app using the desired kube config:
```commandline
kubectl config use-context docker-for-desktop
ks init my-kubeflow
```
## 403 API rate limit exceeded error
Because ksonnet uses GitHub to pull kubeflow, unless user specifies GitHub API token, it will quickly consume maximum API call quota for anonymous.
Because kubectl uses GitHub to pull kubeflow, unless user specifies GitHub API token, it will quickly consume maximum API call quota for anonymous.
To fix this issue first create GitHub API token using this [guide](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/), and assign this token to GITHUB_TOKEN environment variable.
namespace: if params.namespace =="null"then env.namespace else params.namespace
```
You can check the ksonnet version as follows:
```shell
ks version
```
If your ksonnet version is lower than what is specified in the [requirements](/docs/started/requirements), please upgrade it and follow the [guide](/docs/components/ksonnet) to recreate the app.
## ksonnet on Windows
There are some known issues with ksonnet and Windows. You might consider
alternative solutions.
* construct base object: Failed to filter components ([kubeflow #481](https://github.com/kubeflow/kubeflow/issues/481))
* "ks apply" fails to correctly process paths in Windows shell ([ksonnet #382](https://github.com/ksonnet/ksonnet/issues/382))