Kubeflow makes use of ksonnet to help manage deployments.
Make sure you have the minimum required version of ksonnet: 0.11.0 or later.
Follow the steps below to install ksonnet:
Follow the ksonnet installation guide, choosing the relevant options for your operating system. For example, if you’re on Linux:
Set some variables for the ksonnet version:
export KS_VER=0.12.0
export KS_PKG=ks_${KS_VER}_linux_amd64
Download the ksonnet package:
wget -O /tmp/${KS_PKG}.tar.gz https://github.com/ksonnet/ksonnet/releases/download/v${KS_VER}/${KS_PKG}.tar.gz \
--no-check-certificate
Unpack the file:
mkdir -p ${HOME}/bin
tar -xvf /tmp/$KS_PKG.tar.gz -C ${HOME}/bin
Add the ks
command to your path:
export PATH=$PATH:${HOME}/bin/$KS_PKG
This section shows you how to use ksonnet to deploy kubeflow into your existing cluster. The commands below find the cluster currently
used by kubectl
and create the namespace kubeflow
.
export KUBEFLOW_VERSION=0.2.2
export KUBEFLOW_KS_DIR=</path/to/store/your/ksonnet/application>
export KUBEFLOW_DEPLOY=false
curl https://raw.githubusercontent.com/kubeflow/kubeflow/v${KUBEFLOW_VERSION}/scripts/deploy.sh | bash
This will create a ksonnet application in ${KUBEFLOW_KS_DIR}. Refer to deploy.sh to see the individual commands run.
Important: The commands above will enable collection of anonymous user data to help us improve Kubeflow. Do disable usage collection you can run the following commands
cd ${KUBEFLOW_KS_DIR}
ks param set spartakus reportUsage false
You can now deploy Kubeflow as follows
cd ${KUBEFLOW_KS_DIR}
ks apply default
See the guide to upgrading Kubeflow.
ksonnet makes it easier to manage complex deployments consisting of multiple components. It is designed to work side by side with kubectl.
ksonnet allows us to generate Kubernetes manifests from parameterized templates. This makes it easy to customize Kubernetes manifests for your particular use case. In the examples above we used this functionality to generate manifests for TfServing with a user supplied URI for the model.
One of the reasons we really like ksonnet is because it treats environment as in (dev, test, staging, prod) as a first class concept. For each environment we can easily deploy the same components but with slightly different parameters to customize it for a particular environments. We think this maps really well to common workflows. For example, this feature makes it really easy to run a job locally without GPUs for a small number of steps to make sure the code doesn’t crash, and then easily move that to the Cloud to run at scale with GPUs.
ksonnet acts as a layer on top of kubectl
. While Kubernetes is typically
managed with static YAML files, ksonnet adds a further abstraction that is
closer to the objects in object-oriented programming.
With ksonnet, you manage your resources as prototypes with empty parameters.
Then you instantiate the prototypes into components by defining values for the
parameters. This system makes it easier to deploy slightly different resources
to different clusters at the same time. In this way you can maintain different
environments for staging and production, for example. You can export your
ksonnet components as standard Kubernetes YAML files with ks show
, or you can
deploy (apply) the components directly to the cluster with ks apply
.
Some useful ksonnet concepts:
Environment: A unique location to deploy to. An environment includes:
Environments can support different settings, so you can deploy slightly different components to different clusters.
Prototype: An object that describes a set of Kubernetes resources and
associated parameters in an abstract way. Kubeflow includes prototypes for
tf-job
(to run a TensorFlow training job), tf-serving
(to serve a trained model), and a few others.
Component: A specific implementation of a prototype. You create a component supplying the empty parameters of a prototype. A component can directly generate standard Kubernetes YAML files, and can be deployed directly to a cluster. It can also hold different parameters for different environments.
Read more about the core ksonnet conceps in the ksonnet documentation.