<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kubeflow – Documentation</title>
    <link>/docs/</link>
    <description>Recent content in Documentation on Kubeflow</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
	  <atom:link href="/docs/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Kubeflow</title>
      <link>/docs/about/kubeflow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/about/kubeflow/</guid>
      <description>
        
        
        &lt;p&gt;The Kubeflow project is dedicated to making deployments of machine learning (ML)
workflows on Kubernetes simple, portable and scalable. Our goal is not to
recreate other services, but to provide a straightforward way to deploy
best-of-breed open-source systems for ML to diverse infrastructures. Anywhere
you are running Kubernetes, you should be able to run Kubeflow.&lt;/p&gt;
&lt;h2 id=&#34;getting-started-with-kubeflow&#34;&gt;Getting started with Kubeflow&lt;/h2&gt;
&lt;p&gt;Read the &lt;a href=&#34;/docs/started/kubeflow-overview/&#34;&gt;Kubeflow overview&lt;/a&gt; for an
introduction to the Kubeflow architecture and to see how you can use Kubeflow
to manage your ML workflow.&lt;/p&gt;
&lt;p&gt;Follow the &lt;a href=&#34;/docs/started/getting-started/&#34;&gt;getting-started guide&lt;/a&gt; to set up
your environment and install Kubeflow.&lt;/p&gt;
&lt;p&gt;Watch the following video which provides an introduction to Kubeflow.&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/cTZArDgbIWw&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id=&#34;what-is-kubeflow&#34;&gt;What is Kubeflow?&lt;/h2&gt;
&lt;p&gt;Kubeflow is &lt;em&gt;the machine learning toolkit for Kubernetes&lt;/em&gt;. Learn about &lt;a href=&#34;/docs/about/use-cases/&#34;&gt;Kubeflow use cases&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To use Kubeflow, the basic workflow is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Download and run the Kubeflow deployment binary.&lt;/li&gt;
&lt;li&gt;Customize the resulting configuration files.&lt;/li&gt;
&lt;li&gt;Run the specified script to deploy your containers to your specific
environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can adapt the configuration to choose the platforms and services that you
want to use for each stage of the ML workflow: data preparation, model training,
prediction serving, and service management.&lt;/p&gt;
&lt;p&gt;You can choose to deploy your Kubernetes workloads locally, on-premises, or to
a cloud environment.&lt;/p&gt;
&lt;p&gt;Read the &lt;a href=&#34;/docs/started/kubeflow-overview/&#34;&gt;Kubeflow overview&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&#34;the-kubeflow-mission&#34;&gt;The Kubeflow mission&lt;/h2&gt;
&lt;p&gt;Our goal is to make scaling machine learning (ML) models and deploying them to
production as simple as possible, by letting Kubernetes do what it&amp;rsquo;s great at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Easy, repeatable, portable deployments on a diverse infrastructure
(for example, experimenting on a laptop, then moving to an on-premises
cluster or to the cloud)&lt;/li&gt;
&lt;li&gt;Deploying and managing loosely-coupled microservices&lt;/li&gt;
&lt;li&gt;Scaling based on demand&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because ML practitioners use a diverse set of tools, one of the key goals is to
customize the stack based on user requirements (within reason) and let the
system take care of the &amp;ldquo;boring stuff&amp;rdquo;. While we have started with a narrow set
of technologies, we are working with many different projects to include
additional tooling.&lt;/p&gt;
&lt;p&gt;Ultimately, we want to have a set of simple manifests that give you an easy to
use ML stack &lt;em&gt;anywhere&lt;/em&gt; Kubernetes is already running, and that can self
configure based on the cluster it deploys into.&lt;/p&gt;
&lt;h2 id=&#34;history&#34;&gt;History&lt;/h2&gt;
&lt;p&gt;Kubeflow started as an open sourcing of the way Google ran &lt;a href=&#34;https://www.tensorflow.org/&#34;&gt;TensorFlow&lt;/a&gt; internally, based on a pipeline called &lt;a href=&#34;https://www.tensorflow.org/tfx/&#34;&gt;TensorFlow Extended&lt;/a&gt;. It began as just a simpler way to run TensorFlow jobs on Kubernetes, but has since expanded to be a multi-architecture, multi-cloud framework for running entire machine learning pipelines.&lt;/p&gt;
&lt;h2 id=&#34;roadmaps&#34;&gt;Roadmaps&lt;/h2&gt;
&lt;p&gt;To see what&amp;rsquo;s coming up in future versions of Kubeflow, refer to the &lt;a href=&#34;https://github.com/kubeflow/kubeflow/blob/master/ROADMAP.md&#34;&gt;Kubeflow roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following components also have roadmaps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/arena/blob/master/ROADMAP.md&#34;&gt;Arena&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/fairing/blob/master/roadmap.md&#34;&gt;Fairing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/pipelines/blob/master/ROADMAP.md&#34;&gt;Kubeflow Pipelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/blob/master/ROADMAP.md&#34;&gt;KF Serving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/ROADMAP.md&#34;&gt;Katib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/mpi-operator/blob/master/ROADMAP.md&#34;&gt;MPI Operator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;getting-involved&#34;&gt;Getting involved&lt;/h2&gt;
&lt;p&gt;There are many ways to contribute to Kubeflow, and we welcome contributions!
Read the &lt;a href=&#34;/docs/about/contributing&#34;&gt;contributor&amp;rsquo;s guide&lt;/a&gt; to get started on the
code, and get to know the community in the
&lt;a href=&#34;/docs/about/community&#34;&gt;community guide&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Overview</title>
      <link>/docs/components/serving/overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/serving/overview/</guid>
      <description>
        
        
        &lt;p&gt;Kubeflow supports two model serving systems that allow multi-framework model
serving: &lt;em&gt;KFServing&lt;/em&gt; and &lt;em&gt;Seldon Core&lt;/em&gt;. Alternatively, you can use a
standalone model serving system. This page gives an overview of the options, so
that you can choose the framework that best supports your model serving
requirements.&lt;/p&gt;
&lt;h2 id=&#34;multi-framework-serving-with-kfserving-or-seldon-core&#34;&gt;Multi-framework serving with KFServing or Seldon Core&lt;/h2&gt;
&lt;p&gt;KFServing and Seldon Core are both open source systems that allow
multi-framework model serving. The following table compares
KFServing and Seldon Core. A check mark (&lt;strong&gt;✓&lt;/strong&gt;) indicates that the system
(KFServing or Seldon Core) supports the feature specified in that row.&lt;/p&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th&gt;Feature&lt;/th&gt;
        &lt;th&gt;Sub-feature&lt;/th&gt;
        &lt;th&gt;KFServing&lt;/th&gt;
        &lt;th&gt;Seldon Core&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;Framework&lt;/td&gt;
        &lt;td&gt;TensorFlow&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/tensorflow&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/servers/tensorflow.html&#34;&gt;docs&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;XGBoost&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/xgboost&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/servers/xgboost.html&#34;&gt;docs&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;scikit-learn&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/sklearn&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/servers/sklearn.html&#34;&gt;docs&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;NVIDIA Triton Inference Server&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/triton&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/examples/nvidia_mnist.html&#34;&gt;docs&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;ONNX&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/onnx&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;PyTorch&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/pytorch&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Graph&lt;/td&gt;
        &lt;td&gt;Transformers&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/blob/master/docs/samples/transformer/image_transformer/kfserving_sdk_transformer.ipynb&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/examples/transformer_spam_model.html&#34;&gt;docs&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;Combiners&lt;/td&gt;
        &lt;td&gt;Roadmap&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/examples/openvino_ensemble.html&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;Routers including &lt;a href=&#34;https://en.wikipedia.org/wiki/Multi-armed_bandit&#34;&gt;MAB&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Roadmap&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/analytics/routers.html&#34;&gt;docs&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Analytics&lt;/td&gt;
        &lt;td&gt;Explanations&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/explanation/alibi&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/analytics/explainers.html&#34;&gt;docs&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Scaling&lt;/td&gt;
        &lt;td&gt;Knative&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/autoscaling&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;GPU AutoScaling&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/autoscaling&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;HPA&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/graph/scaling.html#autoscaling-seldon-deployments&#34;&gt;docs&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Custom&lt;/td&gt;
        &lt;td&gt;Container&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/custom&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/wrappers/language_wrappers.html&#34;&gt;docs&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;Language Wrappers&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/python/index.html&#34;&gt;Python&lt;/a&gt;, &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/java/README.html&#34;&gt;Java&lt;/a&gt;, &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/R/README.html&#34;&gt;R&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;Multi-Container&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/graph/inference-graph.html&#34;&gt;docs&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Rollout&lt;/td&gt;
        &lt;td&gt;Canary&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/rollouts&#34;&gt;sample&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt; &lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/examples/istio_canary.html&#34;&gt;docs&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;Shadow&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Istio&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;&amp;check;&lt;/b&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KFServing and Seldon Core share some technical features, including
explainability (using &lt;a href=&#34;https://github.com/SeldonIO/alibi&#34;&gt;Seldon Alibi
Explain&lt;/a&gt;) and payload logging, as well
as other areas.&lt;/li&gt;
&lt;li&gt;A commercial product,
&lt;a href=&#34;https://www.seldon.io/tech/products/deploy/&#34;&gt;Seldon Deploy&lt;/a&gt;, supports both
KFServing and Seldon in production.&lt;/li&gt;
&lt;li&gt;KFServing is part of the Kubeflow project ecosystem. Seldon Core is an
external project supported within Kubeflow.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Further information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KFServing:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/components/serving/kfserving/&#34;&gt;Kubeflow documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving&#34;&gt;GitHub repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/about/community/&#34;&gt;Community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Seldon Core
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/components/serving/seldon/&#34;&gt;Kubeflow documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/&#34;&gt;Seldon Core documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/SeldonIO/seldon-core&#34;&gt;GitHub repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.seldon.io/projects/seldon-core/en/latest/developer/community.html&#34;&gt;Community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tensorflow-serving&#34;&gt;TensorFlow Serving&lt;/h2&gt;
&lt;p&gt;For TensorFlow models you can use TensorFlow Serving for
&lt;a href=&#34;/docs/components/serving/tfserving_new&#34;&gt;real-time prediction&lt;/a&gt;.
However, if you plan to use multiple frameworks, you should consider KFServing
or Seldon Core as described above.&lt;/p&gt;
&lt;h2 id=&#34;nvidia-triton-inference-server&#34;&gt;NVIDIA Triton Inference Server&lt;/h2&gt;
&lt;p&gt;NVIDIA Triton Inference Server is a REST and GRPC service for deep-learning
inferencing of TensorRT, TensorFlow, Pytorch, ONNX and Caffe2 models. The server is
optimized to deploy machine learning algorithms on both GPUs and
CPUs at scale. Triton Inference Server was previously known as TensorRT Inference Server.&lt;/p&gt;
&lt;p&gt;You can use NVIDIA Triton Inference Server as a
&lt;a href=&#34;/docs/components/serving/tritoninferenceserver&#34;&gt;standalone system&lt;/a&gt;,
but you should consider KFServing as described above. KFServing includes support
for NVIDIA Triton Inference Server.&lt;/p&gt;
&lt;h2 id=&#34;bentoml&#34;&gt;BentoML&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://bentoml.org&#34;&gt;BentoML&lt;/a&gt; is an open-source platform for high-performance ML model
serving. It makes building production API endpoint for your ML model easy and supports
all major machine learning training frameworks, including Tensorflow, Keras, PyTorch,
XGBoost, scikit-learn and etc.&lt;/p&gt;
&lt;p&gt;BentoML comes with a high-performance API model server with adaptive micro-batching
support, which achieves the advantage of batch processing in online serving. It also
provides model management and model deployment functionality, giving ML teams an
end-to-end model serving workflow, with DevOps best practices baked in.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/components/serving/bentoml&#34;&gt;BentoML guide for Kubeflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/bentoml/BentoML&#34;&gt;BentoML GitHub repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.bentoml.org&#34;&gt;BentoML documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.bentoml.org/en/latest/quickstart.html&#34;&gt;Quick start guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://join.slack.com/t/bentoml/shared_invite/enQtNjcyMTY3MjE4NTgzLTU3ZDc1MWM5MzQxMWQxMzJiNTc1MTJmMzYzMTYwMjQ0OGEwNDFmZDkzYWQxNzgxYWNhNjAxZjk4MzI4OGY1Yjg&#34;&gt;Community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Overview of Deployment on Existing Clusters</title>
      <link>/docs/started/k8s/overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/started/k8s/overview/</guid>
      <description>
        
        
        &lt;p&gt;Follow these instructions if you want to install Kubeflow on an existing Kubernetes
cluster. Some &lt;a href=&#34;/docs/started/cloud&#34;&gt;clouds&lt;/a&gt; and Kubernetes distributions provide
Kubeflow specific instructions for getting the most out of their Kubernetes. If your
existing Kubernetes cluster is from one of those, consider following those instructions.&lt;/p&gt;
&lt;h2 id=&#34;minimum-system-requirements&#34;&gt;Minimum system requirements&lt;/h2&gt;
&lt;p&gt;The Kubernetes cluster must meet the following minimum requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your cluster must include at least one worker node with a minimum of:
&lt;ul&gt;
&lt;li&gt;4 CPU&lt;/li&gt;
&lt;li&gt;50 GB storage&lt;/li&gt;
&lt;li&gt;12 GB memory&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;The recommended Kubernetes version is 1.14.
Kubeflow has been validated and tested on Kubernetes
1.14.
&lt;ul&gt;
&lt;li&gt;Your cluster must run at least Kubernetes version
1.11.&lt;/li&gt;
&lt;li&gt;Kubeflow &lt;strong&gt;does not work&lt;/strong&gt; on Kubernetes
1.16.&lt;/li&gt;
&lt;li&gt;Older versions of Kubernetes may not be compatible with the latest Kubeflow versions. The following matrix
provides information about compatibility between Kubeflow and Kubernetes versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th&gt;Kubernetes Versions&lt;/th&gt;
        &lt;th&gt;Kubeflow 0.4&lt;/th&gt;
        &lt;th&gt;Kubeflow 0.5&lt;/th&gt;
        &lt;th&gt;Kubeflow 0.6&lt;/th&gt;
        &lt;th&gt;Kubeflow 0.7&lt;/th&gt;
        &lt;th&gt;Kubeflow 1.0&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;1.11&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;1.12&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;1.13&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;1.14&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;1.15&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;compatible&lt;/b&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;1.16&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;no known issues&lt;/b&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;1.17&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;no known issues&lt;/b&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;1.18&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;incompatible&lt;/td&gt;
        &lt;td&gt;&lt;b&gt;no known issues&lt;/b&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;incompatible&lt;/strong&gt;: the combination does not work at all&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;compatible&lt;/strong&gt;: all Kubeflow features have been tested and verified for the
Kubernetes version&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;no known issues&lt;/strong&gt;: the combination has not been fully tested but there are
no repoted issues&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;kubeflow-deployment-configurations&#34;&gt;Kubeflow Deployment Configurations&lt;/h2&gt;
&lt;p&gt;The following table lists the options for installing Kubeflow on an existing Kubernetes
cluster and links to detailed instructions. These solutions are vendor neutral and are
governed by consensus within the Kubeflow community.&lt;/p&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th&gt;Deployment config&lt;/th&gt;
        &lt;th&gt;Description&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;kfctl_k8s_istio.yaml&lt;/td&gt;
        &lt;td&gt; This config creates a vanilla deployment of Kubeflow with all its core components without any external dependencies. The deployment can be customized based on your environment needs. &lt;br /&gt;Follow instructions: &lt;a href=&#34;/docs/started/k8s/kfctl-k8s-istio/&#34;&gt;Kubeflow Deployment with kfctl_k8s_istio&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;kfctl_istio_dex.yaml&lt;/td&gt;
        &lt;td&gt; This config creates a Kubeflow deployment with all its core components, and uses Dex and Istio for vendor-neutral authentication. &lt;br /&gt;Follow instructions: &lt;a href=&#34;/docs/started/k8s/kfctl-istio-dex/&#34;&gt;Multi-user, auth-enabled Kubeflow with kfctl_istio_dex&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Reference Overview</title>
      <link>/docs/reference/overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/reference/overview/</guid>
      <description>
        
        
        &lt;p&gt;&lt;a id=&#34;tfjob&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;tfjob&#34;&gt;TFJob&lt;/h2&gt;
&lt;p&gt;TFJob is a Kubernetes
&lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/&#34;&gt;custom resource&lt;/a&gt;
that you can use to run TensorFlow training jobs on Kubernetes. For help with
using TFJob with Kubeflow, see the &lt;a href=&#34;/docs/components/tftraining/&#34;&gt;user guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;API references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/reference/tfjob/v1/tensorflow/&#34;&gt;v1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/reference/tfjob/v1beta2/tensorflow/&#34;&gt;v1beta2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#34;pytorchjob&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;pytorchjob&#34;&gt;PyTorchJob&lt;/h2&gt;
&lt;p&gt;PyTorchJob is a Kubernetes
&lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/&#34;&gt;custom resource&lt;/a&gt;
that you can use to run PyTorch training jobs on Kubernetes. For help with
using PyTorch with Kubeflow, see the &lt;a href=&#34;/docs/components/pytorch/&#34;&gt;user guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;API references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/reference/pytorchjob/v1/pytorch/&#34;&gt;v1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/reference/pytorchjob/v1beta2/pytorch/&#34;&gt;v1beta2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a id=&#34;mpijob&#34;&gt;
&lt;h2 id=&#34;mpijob&#34;&gt;MPIJob&lt;/h2&gt;
&lt;p&gt;MPIJob is a Kubernetes
&lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/&#34;&gt;custom resource&lt;/a&gt;
that you can use to run allreduce-style distributed training jobs on Kubernetes. For help with
using MPIJob with Kubeflow, see the &lt;a href=&#34;/docs/components/mpi/&#34;&gt;user guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;API references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/reference/mpijob/v1alpha2/mpi/&#34;&gt;v1alpha2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a id=&#34;notebook-crd&#34;&gt;
&lt;h2 id=&#34;notebook&#34;&gt;Notebook&lt;/h2&gt;
&lt;p&gt;Notebook CRD is a Kubernetes
&lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/&#34;&gt;custom resource&lt;/a&gt;
that you can use to manage Jupyter Notebook servers on Kubernetes. For help with
using notebooks with Kubeflow, see the &lt;a href=&#34;/docs/components/notebooks/&#34;&gt;user guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;API references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/reference/notebook/v1/&#34;&gt;v1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Set up a GCP Project</title>
      <link>/docs/gke/deploy/project-setup/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/gke/deploy/project-setup/</guid>
      <description>
        
        
        &lt;p&gt;Follow these steps to set up your GCP project:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select or create a project on the
&lt;a href=&#34;https://console.cloud.google.com/cloud-resource-manager&#34;&gt;GCP Console&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure that you have the
&lt;a href=&#34;https://cloud.google.com/iam/docs/understanding-roles#primitive_role_definitions&#34;&gt;owner role&lt;/a&gt;
for the project.
The deployment process creates various service accounts with
appropriate roles in order to enable seamless integration with
GCP services. This process requires that you have the
owner role for the project in order to deploy Kubeflow.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure that billing is enabled for your project. See the guide to
&lt;a href=&#34;https://cloud.google.com/billing/docs/how-to/modify-project&#34;&gt;modifying a project&amp;rsquo;s billing
settings&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to the following pages on the GCP Console and ensure that the
specified APIs are enabled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://console.cloud.google.com/apis/library/compute.googleapis.com&#34;&gt;Compute Engine API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://console.cloud.google.com/apis/library/container.googleapis.com&#34;&gt;Kubernetes Engine API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://console.cloud.google.com/apis/library/iam.googleapis.com&#34;&gt;Identity and Access Management (IAM) API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://console.cloud.google.com/apis/library/deploymentmanager.googleapis.com&#34;&gt;Deployment Manager API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://console.developers.google.com/apis/library/cloudresourcemanager.googleapis.com&#34;&gt;Cloud Resource Manager API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://console.developers.google.com/apis/library/file.googleapis.com&#34;&gt;Cloud Filestore API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://console.developers.google.com/apis/library/ml.googleapis.com&#34;&gt;AI Platform Training &amp;amp; Prediction API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://console.cloud.google.com/apis/library/cloudbuild.googleapis.com&#34;&gt;Cloud Build API&lt;/a&gt; (It&amp;rsquo;s required if you plan to use &lt;a href=&#34;https://www.kubeflow.org/docs/fairing/&#34;&gt;Fairing&lt;/a&gt; in your Kubeflow cluster)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you are using the
&lt;a href=&#34;https://cloud.google.com/free/docs/gcp-free-tier&#34;&gt;GCP Free Tier&lt;/a&gt; or the
12-month trial period with $300 credit, note that you can&amp;rsquo;t run the default
GCP installation of Kubeflow, because the free tier does not offer enough
resources. You need to
&lt;a href=&#34;https://cloud.google.com/free/docs/gcp-free-tier#how-to-upgrade&#34;&gt;upgrade to a paid account&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more information, see the following issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/website/issues/1065&#34;&gt;kubeflow/website #1065&lt;/a&gt;
reports the problem.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kubeflow/issues/3936&#34;&gt;kubeflow/kubeflow #3936&lt;/a&gt;
requests a Kubeflow configuration to work with a free trial project.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Read the GCP guide to &lt;a href=&#34;https://cloud.google.com/compute/quotas&#34;&gt;resource quotas&lt;/a&gt;
to understand the quotas on resource usage that Compute Engine enforces, and
to learn how to check your quota and how to request an increase in quota.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You do not need a running GKE cluster. The deployment process creates a
cluster for you.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;/docs/gke/deploy/oauth-setup&#34;&gt;Set up an OAuth credential&lt;/a&gt; if you want to use
&lt;a href=&#34;https://cloud.google.com/iap/docs/&#34;&gt;Cloud Identity-Aware Proxy (Cloud IAP)&lt;/a&gt;.
Cloud IAP is recommended for production deployments or deployments with access
to sensitive data. You can skip this step if you want to test Kubeflow
in a non-production environment.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose one of the following ways to deploy Kubeflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/gke/deploy/deploy-ui&#34;&gt;Using the UI&lt;/a&gt;. This option provides a simple
way to deploy Kubeflow.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/gke/deploy/deploy-cli&#34;&gt;Using the CLI&lt;/a&gt;. This option provides more
control over the deployment process.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Use Cases</title>
      <link>/docs/about/use-cases/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/about/use-cases/</guid>
      <description>
        
        
        &lt;p&gt;The end goal of every organization is to have their machine learning (ML) model successfully running in production  and generating value to the business. But what does it take to reach that point? Before a model ends up in production, there are potentially many steps required to build and deploy an ML model: data loading, verification, splitting, processing, feature engineering, model training and verification, hyperparameter tuning, and model serving. In addition, ML models can require more observation than traditional applications, because your data inputs can drift over time. Manually rebuilding models and data sets is time consuming and error prone. To simplify these requirements and challenges, we introduce Kubeflow.&lt;/p&gt;
&lt;h2 id=&#34;deploying-and-managing-a-complex-ml-system-at-scale&#34;&gt;Deploying and managing a complex ML system at scale&lt;/h2&gt;
&lt;p&gt;Kubeflow is a scalable, portable, distributed ML platform that runs on Kubernetes, meaning that all capabilities of Kubernetes are available to a Kubeflow user. With Kubeflow you can manage the entire AI organization at scale and still be able to maintain the same quality of control. Kubeflow and Kubernetes provide consistent and efficient operations and optimized infrastructure. This means that your top researchers have more time to focus on the valuable tasks of developing domain specific intellectual property rather than debugging DevOps configuration issues. Kubeflow’s core and ecosystem critical user journeys (CUJs) provide software solutions for end-to-end workflows i.e. build, train and deploy and/or develop a model and create, run and explore a pipeline.&lt;/p&gt;
&lt;h2 id=&#34;experimentation-with-training-an-ml-model&#34;&gt;Experimentation with training an ML model&lt;/h2&gt;
&lt;p&gt;Rapid experimentation is critical to building high quality machine learning models quickly. Kubeflow offers a user-friendly interface (UI) that allows you to track and compare experiments. You can decide later on which experiment was the best and use it as a main source for your future steps. On top of that Kubeflow 1.0 provides stable software sub-systems for model training including Jupyter notebooks, popular ML training operators such as Tensorflow and Pytorch that run efficiently and securely in Kubernetes isolated namespaces. The ML training operators simplify configuration and operations of scaling ML training tasks. In addition, Kubeflow has delivered Critical User Journeys(CUJs), such as the build, train and deploy, which provide end-to-end workflows that speed development. You can read more about the CUJs in the Kubeflow roadmap.&lt;/p&gt;
&lt;h2 id=&#34;end-to-end-hybrid-and-multi-cloud-ml-workloads&#34;&gt;End to end hybrid and multi-cloud ML workloads&lt;/h2&gt;
&lt;p&gt;The development of ML models can require hybrid and multi-cloud portability and secure sharing between teams, clusters and clouds. Kubeflow is supported by all major cloud providers and available for on-premises installation. If you need to develop on your laptop, train with GPU on your on-prem cluster and serve in the cloud, Kubeflow provides the portability to support fast experimentation, rapid training and robust deployment in the same or different environments with minimal operational overhead.&lt;/p&gt;
&lt;h2 id=&#34;tuning-the-model-hyperparameters-during-training&#34;&gt;Tuning the model hyperparameters during training&lt;/h2&gt;
&lt;p&gt;During the model development part hyperparameters are often hard to tune. Tuning hyperparameters is critical for model performance and accuracy. Manually configuring hyperparameters is time consuming. Kubeflow’s hyperparameter tuner (Katib) provides an automated way to match your objectives. This automation can save days of model testing compute time (freeing up valuable infrastructure), and speed the delivery of improved models.&lt;/p&gt;
&lt;h2 id=&#34;continuous-integration-and-deployment-cicd-for-ml&#34;&gt;Continuous integration and deployment (CI/CD) for ML&lt;/h2&gt;
&lt;p&gt;Kubeflow currently doesn’t have a dedicated tool for this purpose. But our users have been using the Pipelines component and it worked really well for them. Kubeflow Pipelines can be used to create reproducible workflows. These workflows automate the steps needed to build a ML workflow, which delivers consistency, saves iteration time, and helps in debugging, auditability and compliance requirements.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;See these docs for more information on the topics covered above:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/components/hyperparameter-tuning/&#34;&gt;Hyperparameter tuning with Katib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/components/training/&#34;&gt;Training models with operators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.kubeflow.org/docs/pipelines/&#34;&gt;Get started with Pipelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/notebooks/&#34;&gt;Jupyter notebooks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://bit.ly/kf_roadmap&#34;&gt;Kubeflow roadmap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: AWS for Kubeflow</title>
      <link>/docs/started/cloud/getting-started-aws/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/started/cloud/getting-started-aws/</guid>
      <description>
        
        
        &lt;p&gt;Please refer to the &lt;a href=&#34;/docs/aws/deploy&#34;&gt;deployment section&lt;/a&gt; in the
&lt;a href=&#34;/docs/aws/&#34;&gt;AWS docs&lt;/a&gt; for information on setting up your AWS environment and deploying Kubeflow on Amazon Elastic Kubernetes Service (Amazon EKS).&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Azure for Kubeflow</title>
      <link>/docs/started/cloud/getting-started-azure/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/started/cloud/getting-started-azure/</guid>
      <description>
        
        
        &lt;p&gt;Please refer to the &lt;a href=&#34;/docs/azure/deploy&#34;&gt;deployment section&lt;/a&gt; in the
&lt;a href=&#34;/docs/azure/&#34;&gt;Azure docs&lt;/a&gt; for information on setting up your Azure environment and deploying Kubeflow on an existing Azure Resource Group or Cluster for AKS (Azure Kubernetes Service).&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Google Cloud for Kubeflow</title>
      <link>/docs/started/cloud/getting-started-gke/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/started/cloud/getting-started-gke/</guid>
      <description>
        
        
        &lt;p&gt;For details on setting up your GCP
environment and deploying Kubeflow on Kubernetes Engine (GKE),
refer to the &lt;a href=&#34;/docs/gke/deploy/&#34;&gt;deployment section&lt;/a&gt; of the
&lt;a href=&#34;/docs/gke/&#34;&gt;Kubeflow GCP documentation&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: IBM Cloud for Kubeflow</title>
      <link>/docs/started/cloud/getting-started-icp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/started/cloud/getting-started-icp/</guid>
      <description>
        
        
        &lt;p&gt;Please refer to the &lt;a href=&#34;/docs/ibm/install-kubeflow&#34;&gt;installation section&lt;/a&gt; in the
&lt;a href=&#34;/docs/ibm/&#34;&gt;IBM docs&lt;/a&gt; for information on setting up your IKS environment and deploying Kubeflow on IBM Cloud Kubernetes Service (IKS).&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: KFServing</title>
      <link>/docs/components/serving/kfserving/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/serving/kfserving/</guid>
      <description>
        
        
        &lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
  &lt;h4 class=&#34;alert-heading&#34;&gt;Beta&lt;/h4&gt;
  This Kubeflow component has &lt;b&gt;beta&lt;/b&gt; status. See the
  &lt;a href=&#34;/docs/reference/version-policy/&#34;&gt;Kubeflow versioning policies&lt;/a&gt;.
  The Kubeflow team is interested in your   
  &lt;a href=&#34;https://github.com/kubeflow/kfserving/issues&#34;&gt;feedback&lt;/a&gt;&lt;/h4&gt; 
  about the usability of the feature.
&lt;/div&gt;
&lt;p&gt;KFServing enables serverless inferencing on Kubernetes and provides performant, high abstraction interfaces for common machine learning (ML) frameworks like TensorFlow, XGBoost, scikit-learn, PyTorch, and ONNX to solve production model serving use cases.&lt;/p&gt;
&lt;p&gt;You can use KFServing to do the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Provide a Kubernetes &lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/&#34;&gt;Custom Resource Definition&lt;/a&gt; for serving ML models on arbitrary frameworks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Encapsulate the complexity of autoscaling, networking, health checking, and server configuration to bring cutting edge serving features like GPU autoscaling, scale to zero, and canary rollouts to your ML deployments.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enable a simple, pluggable, and complete story for your production ML inference server by providing prediction, pre-processing, post-processing and explainability out of the box.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our strong community contributions help KFServing to grow. We have a Technical Steering Committee driven by Google, IBM, Microsoft, Seldon, and Bloomberg. &lt;a href=&#34;https://github.com/kubeflow/kfserving&#34;&gt;Browse the KFServing GitHub repo&lt;/a&gt; to give us feedback!&lt;/p&gt;
&lt;h2 id=&#34;install-with-kubeflow&#34;&gt;Install with Kubeflow&lt;/h2&gt;
&lt;p&gt;KFServing works with Kubeflow 0.7. Kustomize installation files are &lt;a href=&#34;https://github.com/kubeflow/manifests/tree/master/kfserving&#34;&gt;located in the manifests repo&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&#34;../kfserving.png&#34; alt=&#34;KFServing&#34;&gt;
&lt;h2 id=&#34;examples&#34;&gt;Examples&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/tensorflow&#34;&gt;TensorFlow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/pytorch&#34;&gt;PyTorch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/xgboost&#34;&gt;XGBoost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/sklearn&#34;&gt;scikit-learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/onnx&#34;&gt;ONNX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/custom&#34;&gt;Custom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/triton&#34;&gt;Triton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/accelerators&#34;&gt;GPU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/autoscaling&#34;&gt;Autoscaling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/pipelines&#34;&gt;Pipelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/explanation/alibi&#34;&gt;Explainability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/azure&#34;&gt;Azure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/kafka&#34;&gt;Kafka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/s3&#34;&gt;S3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/pvc&#34;&gt;On-prem cluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sample-notebooks&#34;&gt;Sample notebooks&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/blob/master/docs/samples/client/kfserving_sdk_sample.ipynb&#34;&gt;SDK client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/blob/master/docs/samples/transformer/image_transformer/kfserving_sdk_transformer.ipynb&#34;&gt;Transformer (pre/post processing)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/blob/master/docs/samples/onnx/mosaic-onnx.ipynb&#34;&gt;ONNX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We frequently add examples to our &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/&#34;&gt;GitHub repo&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;learn-more&#34;&gt;Learn more&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Join our &lt;a href=&#34;https://groups.google.com/forum/#!forum/kfserving&#34;&gt;working group&lt;/a&gt; for meeting invitations and discussion.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs&#34;&gt;Read the docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/apis/README.md&#34;&gt;API docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/ROADMAP.md&#34;&gt;Roadmap&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://drive.google.com/file/d/16oqz6dhY5BR0u74pi9mDThU97Np__AFb/view&#34;&gt;KFServing 101 slides&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;Knative Serving (v0.8.0 +) and Istio (v1.1.7+) should be available on your Kubernetes cluster.&lt;/p&gt;
&lt;p&gt;Read more about &lt;a href=&#34;https://github.com/kubeflow/kfserving/blob/master/docs/DEVELOPER_GUIDE.md#install-knative-on-a-kubernetes-cluster&#34;&gt;installing Knative on a Kubernetes cluster&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;kfserving-installation-using-kubectl&#34;&gt;KFServing installation using kubectl&lt;/h2&gt;
&lt;p&gt;The following commands install KFServing 0.2.2, using a yaml file in GitHub repo. See &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/install&#34;&gt;here&lt;/a&gt; for other available releases. Alternatively, you can clone the GitHub repo and run &lt;code&gt;kubectl&lt;/code&gt; on top of it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TAG=0.2.2
CONFIG_URI=https://raw.githubusercontent.com/kubeflow/kfserving/master/install/$TAG/kfserving.yaml
kubectl apply -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;use&#34;&gt;Use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Install the SDK.
&lt;pre&gt;&lt;code&gt;pip install kfserving
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/blob/master/docs/samples/client/kfserving_sdk_sample.ipynb&#34;&gt;Follow the example&lt;/a&gt; to use the KFServing SDK to create, patch, roll out, and delete a KFServing instance.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;contribute&#34;&gt;Contribute&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/DEVELOPER_GUIDE.md&#34;&gt;Developer guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Kubeflow Deployment with kfctl_k8s_istio</title>
      <link>/docs/started/k8s/kfctl-k8s-istio/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/started/k8s/kfctl-k8s-istio/</guid>
      <description>
        
        
        &lt;p&gt;This configuration creates a vanilla deployment of Kubeflow with all its core components without any external dependencies. The deployment can be customized based on your environment needs.&lt;/p&gt;
&lt;h2 id=&#34;before-you-start&#34;&gt;Before you start&lt;/h2&gt;
&lt;p&gt;This Kubeflow deployment requires a default StorageClass with a &lt;a href=&#34;https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/&#34;&gt;dynamic volume provisioner&lt;/a&gt;. Verify the &lt;code&gt;provisioner&lt;/code&gt; field of your default StorageClass definition.
If you don&amp;rsquo;t have a provisioner, ensure that you have configured volume provisioning in your Kubernetes cluster appropriately as mentioned &lt;a href=&#34;#provisioning-of-persistent-volumes-in-kubernetes&#34;&gt;below&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Configuring your installation with kfctl_k8s_istio.v1.0.2.yaml has an option you should consider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Disabling istio installation&lt;/strong&gt; - If your Kubernetes cluster
has an existing Istio installation you may choose to not install Istio by removing
the applications &lt;code&gt;istio-crds&lt;/code&gt; and &lt;code&gt;istio-install&lt;/code&gt; in the configuration file
kfctl_k8s_istio.v1.0.2.yaml&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#34;prepare-environment&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;prepare-your-environment&#34;&gt;Prepare your environment&lt;/h2&gt;
&lt;p&gt;Follow these steps to download the kfctl binary for the Kubeflow CLI and set
some handy environment variables:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the kfctl v1.0.2 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.0.2&#34;&gt;Kubeflow releases
page&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the tar ball:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -xvf kfctl_v1.0.2_&amp;lt;platform&amp;gt;.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create environment variables to make the deployment process easier:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# The following command is optional. It adds the kfctl binary to your path.
# If you don&#39;t add kfctl to your path, you must use the full path
# each time you run kfctl.
# Use only alphanumeric characters or - in the directory name.
export PATH=$PATH:&amp;quot;&amp;lt;path-to-kfctl&amp;gt;&amp;quot;

# Set KF_NAME to the name of your Kubeflow deployment. You also use this
# value as directory name when creating your configuration directory.
# For example, your deployment name can be &#39;my-kubeflow&#39; or &#39;kf-test&#39;.
export KF_NAME=&amp;lt;your choice of name for the Kubeflow deployment&amp;gt;

# Set the path to the base directory where you want to store one or more 
# Kubeflow deployments. For example, /opt/.
# Then set the Kubeflow application directory for this deployment.
export BASE_DIR=&amp;lt;path to a base directory&amp;gt;
export KF_DIR=${BASE_DIR}/${KF_NAME}

# Set the configuration file to use when deploying Kubeflow.
# The following configuration installs Istio by default. Comment out 
# the Istio components in the config file to skip Istio installation. 
# See https://github.com/kubeflow/kubeflow/pull/3663
export CONFIG_URI=&amp;quot;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_NAME}&lt;/strong&gt; - The name of your Kubeflow deployment.
If you want a custom deployment name, specify that name here.
For example,  &lt;code&gt;my-kubeflow&lt;/code&gt; or &lt;code&gt;kf-test&lt;/code&gt;.
The value of KF_NAME must consist of lower case alphanumeric characters or
&amp;lsquo;-&amp;rsquo;, and must start and end with an alphanumeric character.
The value of this variable cannot be greater than 25 characters. It must
contain just a name, not a directory path.
You also use this value as directory name when creating the directory where
your Kubeflow  configurations are stored, that is, the Kubeflow application
directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_DIR}&lt;/strong&gt; - The full path to your Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_URI}&lt;/strong&gt; - The GitHub address of the configuration YAML file that
you want to use to deploy Kubeflow. The URI used in this guide is
&lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&lt;/a&gt;.
When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt; (see the next step), kfctl creates
a local version of the configuration YAML file which you can further
customize if necessary.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#34;set-up-and-deploy&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;set-up-and-deploy-kubeflow&#34;&gt;Set up and deploy Kubeflow&lt;/h2&gt;
&lt;p&gt;To set up and deploy Kubeflow using the &lt;strong&gt;default settings&lt;/strong&gt;,
run the &lt;code&gt;kfctl apply&lt;/code&gt; command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Check the resources deployed in namespace &lt;code&gt;kubeflow&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n kubeflow get all
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a id=&#34;alt-set-up-and-deploy&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;alternatively-set-up-your-configuration-for-later-deployment&#34;&gt;Alternatively, set up your configuration for later deployment&lt;/h2&gt;
&lt;p&gt;If you want to customize your configuration before deploying Kubeflow, you can
set up your configuration files first, then edit the configuration, then
deploy Kubeflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Run the &lt;code&gt;kfctl build&lt;/code&gt; command to set up your configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl build -V -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit the configuration files, as described in the guide to
&lt;a href=&#34;/docs/other-guides/kustomize/&#34;&gt;customizing your Kubeflow deployment&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set an environment variable pointing to your local configuration file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CONFIG_FILE=${KF_DIR}/kfctl_k8s_istio.v1.0.2.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the &lt;code&gt;kfctl apply&lt;/code&gt; command to deploy Kubeflow:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kfctl apply -V -f ${CONFIG_FILE}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;access-the-kubeflow-user-interface-ui&#34;&gt;Access the Kubeflow user interface (UI)&lt;/h2&gt;
&lt;p&gt;After Kubeflow is deployed, the Kubeflow Dashboard can be accessed via &lt;code&gt;istio-ingressgateway&lt;/code&gt; service. If loadbalancer is not available in your environment, NodePort or Port forwarding can be used to access the Kubeflow Dashboard. Refer to  &lt;a href=&#34;https://istio.io/docs/tasks/traffic-management/ingress/ingress-control/&#34;&gt;Ingress Gateway guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;delete-kubeflow&#34;&gt;Delete Kubeflow&lt;/h2&gt;
&lt;p&gt;Run the following commands to delete your deployment and reclaim all resources:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#204a87&#34;&gt;cd&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KF_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# If you want to delete all the resources, run:&lt;/span&gt;
kfctl delete -f &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;CONFIG_FILE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;understanding-the-deployment-process&#34;&gt;Understanding the deployment process&lt;/h2&gt;
&lt;p&gt;The kfctl deployment process includes the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kfctl build&lt;/code&gt; - (Optional) Creates configuration files defining the various
resources in your deployment. You only need to run &lt;code&gt;kfctl build&lt;/code&gt; if you want
to edit the resources before running &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfctl apply&lt;/code&gt; - Creates or updates the resources.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfctl delete&lt;/code&gt; - Deletes the resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;application-layout&#34;&gt;Application layout&lt;/h2&gt;
&lt;p&gt;Your Kubeflow application directory &lt;strong&gt;${KF_DIR}&lt;/strong&gt; contains the following files
and directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_FILE}&lt;/strong&gt; is a YAML file that defines configurations related to your
Kubeflow deployment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This file is a copy of the GitHub-based configuration YAML file that
you used when deploying Kubeflow: &lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt;, kfctl creates
a local version of the configuration file, &lt;code&gt;${CONFIG_FILE}&lt;/code&gt;,
which you can further customize if necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;kustomize&lt;/strong&gt; is a directory that contains the kustomize packages for Kubeflow
applications. See
&lt;a href=&#34;/docs/other-guides/kustomize/&#34;&gt;how Kubeflow uses kustomize&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory is created when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can customize the Kubernetes resources by modifying the manifests and
running &lt;code&gt;kfctl apply&lt;/code&gt; again.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We recommend that you check in the contents of your &lt;code&gt;${KF_DIR}&lt;/code&gt; directory
into source control.&lt;/p&gt;
&lt;h2 id=&#34;provisioning-of-persistent-volumes-in-kubernetes&#34;&gt;Provisioning of Persistent Volumes in Kubernetes&lt;/h2&gt;
&lt;p&gt;Note that you can skip this step if you have a dynamic volume provisioner already installed in your cluster.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t have one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can choose to create PVs manually after deployment of Kubeflow.&lt;/li&gt;
&lt;li&gt;Or install a dynamic volume provisioner like &lt;a href=&#34;https://github.com/rancher/local-path-provisioner#deployment&#34;&gt;Local Path Provisioner&lt;/a&gt;. Ensure that the StorageClass used by this provisioner is the default StorageClass.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h2&gt;
&lt;h3 id=&#34;persistent-volume-claims-are-in-pending-state&#34;&gt;Persistent Volume Claims are in Pending State&lt;/h3&gt;
&lt;p&gt;Check if PersistentVolumeClaims get &lt;code&gt;Bound&lt;/code&gt; to PersistentVolumes.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n kubeflow get pvc

&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If the PersistentVolumeClaims (PVCs) are in &lt;code&gt;Pending&lt;/code&gt; state after deployment and they are not bound to PersistentVolumes (PVs), you may have to either manually create PVs for each PVC in your Kubernetes Cluster or an alternative is to set up &lt;a href=&#34;#provisioning-of-persistent-volumes-in-kubernetes&#34;&gt;dynamic volume provisioning&lt;/a&gt; to create PVs on demand and redeploy Kubeflow after deleting existing PVCs.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Run a &lt;a href=&#34;/docs/examples/kubeflow-samples/&#34;&gt;sample machine learning workflow&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Get started with &lt;a href=&#34;/docs/pipelines/pipelines-quickstart/&#34;&gt;Kubeflow Pipelines&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Set up OAuth for Cloud IAP</title>
      <link>/docs/gke/deploy/oauth-setup/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/gke/deploy/oauth-setup/</guid>
      <description>
        
        
        &lt;p&gt;If you want to use
&lt;a href=&#34;https://cloud.google.com/iap/docs/&#34;&gt;Cloud Identity-Aware Proxy (Cloud IAP)&lt;/a&gt;
when deploying Kubeflow on GCP,
then you must follow these instructions to create an OAuth client for use
with Kubeflow.&lt;/p&gt;
&lt;p&gt;You can skip the instructions on this page if you want to use basic
authentication (username and password) with Kubeflow instead of Cloud IAP.
Cloud IAP is recommended for production deployments or deployments with access
to sensitive data.&lt;/p&gt;
&lt;p&gt;Follow the steps below to create an OAuth client ID that identifies Cloud IAP
when requesting access to a user&amp;rsquo;s email account. Kubeflow uses the email
address to verify the user&amp;rsquo;s identity.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Set up your OAuth &lt;a href=&#34;https://console.cloud.google.com/apis/credentials/consent&#34;&gt;consent screen&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In the &lt;strong&gt;Application name&lt;/strong&gt; box, enter the name of your application.
The example below uses the name &amp;ldquo;Kubeflow&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Under &lt;strong&gt;Support email&lt;/strong&gt;, select the email address that you want to display
as a public contact. You must use either your email address or a Google
Group that you own.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you see &lt;strong&gt;Authorized domains&lt;/strong&gt;, enter&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;project&amp;gt;.cloud.goog
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;where &amp;lt;project&amp;gt; is your Google Cloud Platform (GCP) project ID.&lt;/li&gt;
&lt;li&gt;If you are using your own domain, such as &lt;strong&gt;acme.com&lt;/strong&gt;, you should add
that as well&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Authorized domains&lt;/strong&gt; option appears only for certain project
configurations. If you don&amp;rsquo;t see the option, then there&amp;rsquo;s nothing you
need to set.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Here&amp;rsquo;s an example of the completed form:&lt;br&gt;
&lt;img src=&#34;/docs/images/consent-screen.png&#34; 
alt=&#34;OAuth consent screen&#34;
class=&#34;mt-3 mb-3 p-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the &lt;a href=&#34;https://console.cloud.google.com/apis/credentials&#34;&gt;credentials screen&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Create credentials&lt;/strong&gt;, and then click &lt;strong&gt;OAuth client ID&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Application type&lt;/strong&gt;, select &lt;strong&gt;Web application&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Name&lt;/strong&gt; box enter any name for your OAuth client ID. This is &lt;em&gt;not&lt;/em&gt;
the name of your application nor the name of your Kubeflow deployment. It&amp;rsquo;s
just a way to help you identify the OAuth client ID.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Create&lt;/strong&gt;. A dialog box appears, like the one below:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/new-oauth.png&#34; 
alt=&#34;OAuth consent screen&#34;
class=&#34;mt-3 mb-3 p-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy the &lt;strong&gt;client ID&lt;/strong&gt; shown in the dialog box, because you need the client
ID in the next step.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the &lt;strong&gt;Create credentials&lt;/strong&gt; screen, find your newly created OAuth
credential and click the pencil icon to edit it:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/oauth-edit.png&#34; 
alt=&#34;OAuth consent screen&#34;
class=&#34;mt-3 mb-3 p-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the &lt;strong&gt;Authorized redirect URIs&lt;/strong&gt; box, enter the following (if it&amp;rsquo;s not
already present in the list of authorized redirect URIs):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://iap.googleapis.com/v1/oauth/clientIds/&amp;lt;CLIENT_ID&amp;gt;:handleRedirect
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;CLIENT_ID&amp;gt;&lt;/code&gt; is the OAuth client ID that you copied from the dialog box in
step four. It looks like &lt;code&gt;XXX.apps.googleusercontent.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Note that the URI is not dependent on the Kubeflow deployment or endpoint.
Multiple Kubeflow deployments can share the same OAuth client without the
need to modify the redirect URIs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Press &lt;strong&gt;Enter/Return&lt;/strong&gt; to add the URI. Check that the URI now appears as
a confirmed item under &lt;strong&gt;Authorized redirect URIs&lt;/strong&gt;. (The URI should no longer be
editable.)&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example of the completed form:
&lt;img src=&#34;/docs/images/oauth-credential.png&#34; 
alt=&#34;OAuth credentials&#34;
class=&#34;mt-3 mb-3 p-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make note that you can find your OAuth client credentials in the credentials
section of the GCP Console. You need to retrieve the &lt;strong&gt;client ID&lt;/strong&gt; and
&lt;strong&gt;client secret&lt;/strong&gt; later when you&amp;rsquo;re ready to enable Cloud IAP.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Choose one of the following ways to deploy Kubeflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/gke/deploy/deploy-ui&#34;&gt;Using the UI&lt;/a&gt;. This option provides a simple
way to deploy Kubeflow.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/gke/deploy/deploy-cli&#34;&gt;Using the CLI&lt;/a&gt;. This option provides more
control over the deployment process.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Contributing to Kubeflow</title>
      <link>/docs/about/contributing/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/about/contributing/</guid>
      <description>
        
        
        &lt;p&gt;Welcome to the Kubeflow project!&lt;/p&gt;
&lt;h2 id=&#34;getting-started-as-a-kubeflow-contributor&#34;&gt;Getting started as a Kubeflow contributor&lt;/h2&gt;
&lt;p&gt;This document is the single source of truth for how to contribute to the code base.
We&amp;rsquo;d love to accept your patches and contributions to this project. There are
just a few small guidelines you need to follow.&lt;/p&gt;
&lt;h3 id=&#34;sign-the-cla&#34;&gt;Sign the CLA&lt;/h3&gt;
&lt;p&gt;Contributions to this project must be accompanied by a Contributor License Agreement (CLA).
You (or your employer) retain the copyright to your contribution.
This gives us permission to use and redistribute your contributions as
part of the project. Head over to &lt;a href=&#34;https://cla.developers.google.com/&#34;&gt;https://cla.developers.google.com/&lt;/a&gt; to see
your current agreements on file or to sign a new one.&lt;/p&gt;
&lt;p&gt;You generally only need to submit a CLA once, so if you&amp;rsquo;ve already submitted one
(even if it was for a different project), you probably don&amp;rsquo;t need to do it
again.&lt;/p&gt;
&lt;h3 id=&#34;follow-the-code-of-conduct&#34;&gt;Follow the code of conduct&lt;/h3&gt;
&lt;p&gt;Please make sure to read and observe our &lt;a href=&#34;https://github.com/kubeflow/community/blob/master/CODE_OF_CONDUCT.md&#34;&gt;Code of Conduct&lt;/a&gt; and &lt;a href=&#34;https://github.com/kubeflow/community/blob/master/INCLUSIVITY.md&#34;&gt;inclusivity document&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;consider-participating-in-kubeflow-user-research&#34;&gt;Consider participating in Kubeflow user research&lt;/h3&gt;
&lt;p&gt;Maggie Lynn, a user experience researcher, is conducting user studies to inform future developments for Kubeflow. These typically involve a one hour study session conducted online with a thank you gift for providing your feedback. As a member of the Kubeflow community, your feedback and expertise are extremely valuable to us, so if you have time in the next month, please consider participating. To gather your interest, availability, and some basic information about you, please fill out this form where you’ll find out more details about this research opportunity: &lt;a href=&#34;https://goo.gl/forms/sv5sRo3UfsgeUEjK2&#34;&gt;https://goo.gl/forms/sv5sRo3UfsgeUEjK2&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;joining-the-community&#34;&gt;Joining the community&lt;/h2&gt;
&lt;p&gt;Follow these instructions if you want to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Become a member of the Kubeflow GitHub org (see below)&lt;/li&gt;
&lt;li&gt;Become part of the Kubeflow build cop or release teams&lt;/li&gt;
&lt;li&gt;Be recognized as an individual or organization contributing to Kubeflow&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;joining-the-kubeflow-github-org&#34;&gt;Joining the Kubeflow GitHub Org&lt;/h3&gt;
&lt;p&gt;Before asking to join the community, we ask that you first make a small number of contributions
to demonstrate your intent to continue contributing to Kubeflow.&lt;/p&gt;
&lt;p&gt;There are are a number of ways to contribute to Kubeflow&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Submit PRs&lt;/li&gt;
&lt;li&gt;File issues reporting bugs or providing feedback&lt;/li&gt;
&lt;li&gt;Answer questions on Slack or GitHub issues&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can use this &lt;a href=&#34;http://devstats.kubeflow.org/d/9/developers-summary&#34;&gt;table&lt;/a&gt; to see how many contributions
you&amp;rsquo;ve made&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Note&lt;/strong&gt;: This only counts GitHub related ways of contributing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you are ready to join&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Send a PR adding yourself as a member in &lt;a href=&#34;https://github.com/kubeflow/internal-acls/blob/master/github-orgs/kubeflow/org.yaml#L19&#34;&gt;org.yaml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;After the PR is merged an admin will send you an invitation
&lt;ul&gt;
&lt;li&gt;This is a manual process that&amp;rsquo;s generally run a couple times a week&lt;/li&gt;
&lt;li&gt;If a week passes without receiving an invitation reach out on &lt;a href=&#34;https://kubeflow.slack.com/messages/C8Q0QJYNB/convo/CABQ2BWHW-1544147308.002500/&#34;&gt;kubeflow#community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;companiesorganizations&#34;&gt;Companies/organizations&lt;/h3&gt;
&lt;p&gt;If you would like your company or organization to be acknowledged for contributing to
Kubeflow or participating in the community (being a user counts) please send a PR
adding the relevant info to
&lt;a href=&#34;https://github.com/kubeflow/community/blob/master/member_organizations.yaml&#34;&gt;member_organizations.yaml&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you want your employee&amp;rsquo;s GitHub contributions to be attributed to your company please ask them to set
the company field in their GitHub profile.&lt;/p&gt;
&lt;h3 id=&#34;community-discussions&#34;&gt;Community discussions&lt;/h3&gt;
&lt;p&gt;There are many ways to contribute! Join one of our communication channels,
attend a community meeting, get to know the community. Read the details in
our &lt;a href=&#34;/docs/about/community&#34;&gt;community guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;your-first-contribution&#34;&gt;Your first contribution&lt;/h2&gt;
&lt;h3 id=&#34;find-something-to-work-on&#34;&gt;Find something to work on&lt;/h3&gt;
&lt;p&gt;Help is always welcome! For example, documentation (like the text you are reading
now) can always use improvement. There&amp;rsquo;s always code that can be clarified and
variables or functions that can be renamed or commented. There&amp;rsquo;s always a need
for more test coverage. You get the idea - if you ever see something you think
should be fixed, you should own it. Here is how you get started.&lt;/p&gt;
&lt;h3 id=&#34;starter-issues&#34;&gt;Starter issues&lt;/h3&gt;
&lt;p&gt;To find Kubeflow issues that make good entry points:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start with issues labeled &lt;strong&gt;good first issue&lt;/strong&gt;. For example, see the good
first issues in the &lt;a href=&#34;https://github.com/kubeflow/website/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&#34;&gt;kubeflow/website
repository&lt;/a&gt;
for doc updates, and in the &lt;a href=&#34;https://github.com/kubeflow/kubeflow/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&#34;&gt;kubeflow/kubeflow
repository&lt;/a&gt;
for updates to the core Kubeflow code.&lt;/li&gt;
&lt;li&gt;For issues that require deeper knowledge of one or more technical aspects,
look at issues labeled &lt;strong&gt;help wanted&lt;/strong&gt;. For example, see these issues in the
&lt;a href=&#34;https://github.com/kubeflow/kubeflow/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22&#34;&gt;kubeflow/kubeflow
repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Examine the issues in any of the
&lt;a href=&#34;https://github.com/kubeflow&#34;&gt;Kubeflow repositories&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;owners-files-and-pr-workflow&#34;&gt;Owners files and PR workflow&lt;/h2&gt;
&lt;p&gt;Our PR workflow is nearly identical to Kubernetes&#39;. Most of these instructions are a
modified version of Kubernetes&#39; &lt;a href=&#34;https://github.com/kubernetes/community/blob/master/contributors/guide/README.md&#34;&gt;contributors&lt;/a&gt;
and &lt;a href=&#34;https://github.com/kubernetes/community/blob/master/contributors/guide/owners.md#code-review-using-owners-files&#34;&gt;owners&lt;/a&gt;
guides.&lt;/p&gt;
&lt;h3 id=&#34;overview-of-owners-files&#34;&gt;Overview of OWNERS files&lt;/h3&gt;
&lt;p&gt;OWNERS files are used to designate responsibility over different parts of the Kubeflow codebase.
Today, we use them to assign the &lt;strong&gt;reviewer&lt;/strong&gt; and &lt;strong&gt;approver&lt;/strong&gt; roles used in our two-phase code
review process. Our OWNERS files were inspired by &lt;a href=&#34;https://chromium.googlesource.com/chromium/src/+/master/docs/code_reviews.md&#34;&gt;Chromium OWNERS
files&lt;/a&gt;, which in turn
inspired &lt;a href=&#34;https://help.github.com/articles/about-codeowners/&#34;&gt;GitHub&amp;rsquo;s CODEOWNERS files&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The velocity of a project that uses code review is limited by the number of people capable of
reviewing code. The quality of a person&amp;rsquo;s code review is limited by their familiarity with the code
under review. Our goal is to address both of these concerns through the prudent use and maintenance
of OWNERS files&lt;/p&gt;
&lt;h3 id=&#34;owners--a-nameowners-1a&#34;&gt;OWNERS  &lt;a name=&#34;owners-1&#34;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Each directory that contains a unit of independent code or content may also contain an OWNERS file.
This file applies to everything within the directory, including the OWNERS file itself, sibling
files, and child directories.&lt;/p&gt;
&lt;p&gt;OWNERS files are in YAML format and support the following keys:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;approvers&lt;/code&gt;: a list of GitHub usernames or aliases that can &lt;code&gt;/approve&lt;/code&gt; a PR&lt;/li&gt;
&lt;li&gt;&lt;code&gt;labels&lt;/code&gt;: a list of GitHub labels to automatically apply to a PR&lt;/li&gt;
&lt;li&gt;&lt;code&gt;options&lt;/code&gt;: a map of options for how to interpret this OWNERS file, currently only one:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;no_parent_owners&lt;/code&gt;: defaults to &lt;code&gt;false&lt;/code&gt; if not present; if &lt;code&gt;true&lt;/code&gt;, exclude parent OWNERS files.
Allows the use case where &lt;code&gt;a/deep/nested/OWNERS&lt;/code&gt; file prevents &lt;code&gt;a/OWNERS&lt;/code&gt; file from having any
effect on &lt;code&gt;a/deep/nested/bit/of/code&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reviewers&lt;/code&gt;: a list of GitHub usernames or aliases that are good candidates to &lt;code&gt;/lgtm&lt;/code&gt; a PR&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All users are expected to be assignable. In GitHub terms, this means they are either collaborators
of the repo, or members of the organization to which the repo belongs.&lt;/p&gt;
&lt;p&gt;A typical OWNERS file looks like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;approvers:
  - alice
  - bob     # this is a comment
reviewers:
  - alice
  - carol   # this is another comment
  - sig-foo # this is an alias
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;owners_aliases&#34;&gt;OWNERS_ALIASES&lt;/h4&gt;
&lt;p&gt;Each repo may contain at its root an OWNERS_ALIAS file.&lt;/p&gt;
&lt;p&gt;OWNERS_ALIAS files are in YAML format and support the following keys:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aliases&lt;/code&gt;: a mapping of alias name to a list of GitHub usernames&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We use aliases for groups instead of GitHub Teams, because changes to GitHub Teams are not
publicly auditable.&lt;/p&gt;
&lt;p&gt;A sample OWNERS_ALIASES file looks like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;aliases:
  sig-foo:
    - david
    - erin
  sig-bar:
    - bob
    - frank
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;GitHub usernames and aliases listed in OWNERS files are case-insensitive.&lt;/p&gt;
&lt;h3 id=&#34;the-code-review-process&#34;&gt;The code review process&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;strong&gt;author&lt;/strong&gt; submits a PR&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Phase 0: Automation suggests &lt;strong&gt;reviewers&lt;/strong&gt; and &lt;strong&gt;approvers&lt;/strong&gt; for the PR&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Determine the set of OWNERS files nearest to the code being changed&lt;/li&gt;
&lt;li&gt;Choose at least two suggested &lt;strong&gt;reviewers&lt;/strong&gt;, trying to find a unique reviewer for every leaf
OWNERS file, and request their reviews on the PR&lt;/li&gt;
&lt;li&gt;Choose suggested &lt;strong&gt;approvers&lt;/strong&gt;, one from each OWNERS file, and list them in a comment on the PR&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Phase 1: Humans review the PR&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reviewers&lt;/strong&gt; look for general code quality, correctness, sane software engineering, style, etc.&lt;/li&gt;
&lt;li&gt;Anyone in the organization can act as a &lt;strong&gt;reviewer&lt;/strong&gt; with the exception of the individual who
opened the PR&lt;/li&gt;
&lt;li&gt;If the code changes look good to them, a &lt;strong&gt;reviewer&lt;/strong&gt; types &lt;code&gt;/lgtm&lt;/code&gt; in a PR comment or review;
if they change their mind, they &lt;code&gt;/lgtm cancel&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Once a &lt;strong&gt;reviewer&lt;/strong&gt; has &lt;code&gt;/lgtm&lt;/code&gt;&amp;lsquo;ed, &lt;a href=&#34;https://prow.k8s.io&#34;&gt;prow&lt;/a&gt;
(&lt;a href=&#34;https://github.com/k8s-ci-robot/&#34;&gt;@k8s-ci-robot&lt;/a&gt;) applies an &lt;code&gt;lgtm&lt;/code&gt; label to the PR&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Phase 2: Humans approve the PR&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The PR &lt;strong&gt;author&lt;/strong&gt; &lt;code&gt;/assign&lt;/code&gt;&amp;rsquo;s all suggested &lt;strong&gt;approvers&lt;/strong&gt; to the PR, and optionally notifies
them (eg: &amp;ldquo;pinging @foo for approval&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Only people listed in the relevant OWNERS files, either directly or through an alias, can act
as &lt;strong&gt;approvers&lt;/strong&gt;, including the individual who opened the PR&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Approvers&lt;/strong&gt; look for holistic acceptance criteria, including dependencies with other features,
forwards/backwards compatibility, API and flag definitions, etc&lt;/li&gt;
&lt;li&gt;If the code changes look good to them, an &lt;strong&gt;approver&lt;/strong&gt; types &lt;code&gt;/approve&lt;/code&gt; in a PR comment or
review; if they change their mind, they &lt;code&gt;/approve cancel&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://prow.k8s.io&#34;&gt;prow&lt;/a&gt; (&lt;a href=&#34;https://github.com/k8s-ci-robot/&#34;&gt;@k8s-ci-robot&lt;/a&gt;) updates its
comment in the PR to indicate which &lt;strong&gt;approvers&lt;/strong&gt; still need to approve&lt;/li&gt;
&lt;li&gt;Once all &lt;strong&gt;approvers&lt;/strong&gt; (one from each of the previously identified OWNERS files) have approved,
&lt;a href=&#34;https://prow.k8s.io&#34;&gt;prow&lt;/a&gt; (&lt;a href=&#34;https://github.com/k8s-ci-robot/&#34;&gt;@k8s-ci-robot&lt;/a&gt;) applies an
&lt;code&gt;approved&lt;/code&gt; label&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Phase 3: Automation merges the PR:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If all of the following are true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All required labels are present (eg: &lt;code&gt;lgtm&lt;/code&gt;, &lt;code&gt;approved&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Any blocking labels are missing (eg: there is no &lt;code&gt;do-not-merge/hold&lt;/code&gt;, &lt;code&gt;needs-rebase&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And if any of the following are true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;there are no presubmit prow jobs configured for this repo&lt;/li&gt;
&lt;li&gt;there are presubmit prow jobs configured for this repo, and they all pass after automatically
being re-run one last time&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Then the PR will automatically be merged&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;quirks-of-the-process&#34;&gt;Quirks of the process&lt;/h3&gt;
&lt;p&gt;There are a number of behaviors we&amp;rsquo;ve observed that while &lt;em&gt;possible&lt;/em&gt; are discouraged, as they go
against the intent of this review process.  Some of these could be prevented in the future, but this
is the state of today.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;approver&lt;/strong&gt;&amp;rsquo;s &lt;code&gt;/lgtm&lt;/code&gt; is simultaneously interpreted as an &lt;code&gt;/approve&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;While a convenient shortcut for some, it can be surprising that the same command is interpreted
in one of two ways depending on who the commenter is&lt;/li&gt;
&lt;li&gt;Instead, explicitly write out &lt;code&gt;/lgtm&lt;/code&gt; and &lt;code&gt;/approve&lt;/code&gt; to help observers, or save the &lt;code&gt;/lgtm&lt;/code&gt; for
a &lt;strong&gt;reviewer&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;This goes against the idea of having at least two sets of eyes on a PR, and may be a sign that
there are too few &lt;strong&gt;reviewers&lt;/strong&gt; (who aren&amp;rsquo;t also &lt;strong&gt;approver&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Technically, anyone who is a member of the Kubeflow GitHub organization can drive-by &lt;code&gt;/lgtm&lt;/code&gt; a
PR
&lt;ul&gt;
&lt;li&gt;Drive-by reviews from non-members are encouraged as a way of demonstrating experience and
intent to become a collaborator or reviewer&lt;/li&gt;
&lt;li&gt;Drive-by &lt;code&gt;/lgtm&lt;/code&gt;&amp;rsquo;s from members may be a sign that our OWNERS files are too small, or that the
existing &lt;strong&gt;reviewers&lt;/strong&gt; are too unresponsive&lt;/li&gt;
&lt;li&gt;This goes against the idea of specifying &lt;strong&gt;reviewers&lt;/strong&gt; in the first place, to ensure that
&lt;strong&gt;author&lt;/strong&gt; is getting actionable feedback from people knowledgeable with the code&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reviewers&lt;/strong&gt;, and &lt;strong&gt;approvers&lt;/strong&gt; are unresponsive
&lt;ul&gt;
&lt;li&gt;This causes a lot of frustration for &lt;strong&gt;authors&lt;/strong&gt; who often have little visibility into why their
PR is being ignored&lt;/li&gt;
&lt;li&gt;Many &lt;strong&gt;reviewers&lt;/strong&gt; and &lt;strong&gt;approvers&lt;/strong&gt; are so overloaded by GitHub notifications that @mention&amp;rsquo;ing
is unlikely to get a quick response&lt;/li&gt;
&lt;li&gt;If an &lt;strong&gt;author&lt;/strong&gt; &lt;code&gt;/assign&lt;/code&gt;&amp;rsquo;s a PR, &lt;strong&gt;reviewers&lt;/strong&gt; and &lt;strong&gt;approvers&lt;/strong&gt; will be made aware of it on
their &lt;a href=&#34;https://k8s-gubernator.appspot.com/pr&#34;&gt;PR dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;author&lt;/strong&gt; can work around this by manually reading the relevant OWNERS files,
&lt;code&gt;/unassign&lt;/code&gt;&amp;lsquo;ing unresponsive individuals, and &lt;code&gt;/assign&lt;/code&gt;&amp;lsquo;ing others&lt;/li&gt;
&lt;li&gt;This is a sign that our OWNERS files are stale; pruning the &lt;strong&gt;reviewers&lt;/strong&gt; and &lt;strong&gt;approvers&lt;/strong&gt; lists
would help with this&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authors&lt;/strong&gt; are unresponsive
&lt;ul&gt;
&lt;li&gt;This costs a tremendous amount of attention as context for an individual PR is lost over time&lt;/li&gt;
&lt;li&gt;This hurts the project in general as its general noise level increases over time&lt;/li&gt;
&lt;li&gt;Instead, close PR&amp;rsquo;s that are untouched after too long (we currently have a bot do this after 90
days)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;automation-using-owners-files&#34;&gt;Automation using OWNERS files&lt;/h2&gt;
&lt;h3 id=&#34;prowhttpsgitk8siotest-infraprow&#34;&gt;&lt;a href=&#34;https://git.k8s.io/test-infra/prow&#34;&gt;&lt;code&gt;prow&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Prow receives events from GitHub, and reacts to them. It is effectively stateless. The following
pieces of prow are used to implement the code review process above.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.k8s.io/test-infra/prow/cmd/tide&#34;&gt;cmd: tide&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;per-repo configuration:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;labels&lt;/code&gt;: list of labels required to be present for merge (eg: &lt;code&gt;lgtm&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;missingLabels&lt;/code&gt;: list of labels required to be missing for merge (eg: &lt;code&gt;do-not-merge/hold&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reviewApprovedRequired&lt;/code&gt;: defaults to &lt;code&gt;false&lt;/code&gt;; when true, require that there must be at least
one &lt;a href=&#34;https://help.github.com/articles/about-pull-request-reviews/&#34;&gt;approved pull request review&lt;/a&gt;
present for merge&lt;/li&gt;
&lt;li&gt;&lt;code&gt;merge_method&lt;/code&gt;: defaults to &lt;code&gt;merge&lt;/code&gt;; when &lt;code&gt;squash&lt;/code&gt; or &lt;code&gt;rebase&lt;/code&gt;, use that merge method instead
when clicking a PR&amp;rsquo;s merge button&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;merges PR&amp;rsquo;s once they meet the appropriate criteria as configured above&lt;/li&gt;
&lt;li&gt;if there are any presubmit prow jobs for the repo the PR is against, they will be re-run one
final time just prior to merge&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.k8s.io/test-infra/prow/plugins/assign&#34;&gt;plugin: assign&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;assigns GitHub users in response to &lt;code&gt;/assign&lt;/code&gt; comments on a PR&lt;/li&gt;
&lt;li&gt;unassigns GitHub users in response to &lt;code&gt;/unassign&lt;/code&gt; comments on a PR&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.k8s.io/test-infra/prow/plugins/assign&#34;&gt;plugin: approve&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;per-repo configuration:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;issue_required&lt;/code&gt;: defaults to &lt;code&gt;false&lt;/code&gt;; when &lt;code&gt;true&lt;/code&gt;, require that the PR description link to
an issue, or that at least one &lt;strong&gt;approver&lt;/strong&gt; issues a &lt;code&gt;/approve no-isse&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;implicit_self_approve&lt;/code&gt;: defaults to &lt;code&gt;false&lt;/code&gt;; when &lt;code&gt;true&lt;/code&gt;, if the PR author is in relevant
OWNERS files, act as if they have implicitly &lt;code&gt;/approve&lt;/code&gt;&amp;rsquo;d&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;adds the  &lt;code&gt;approved&lt;/code&gt; label once an &lt;strong&gt;approver&lt;/strong&gt; for each of the required
OWNERS files has &lt;code&gt;/approve&lt;/code&gt;&amp;rsquo;d&lt;/li&gt;
&lt;li&gt;comments as required OWNERS files are satisfied&lt;/li&gt;
&lt;li&gt;removes outdated approval status comments&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.k8s.io/test-infra/prow/plugins/assign&#34;&gt;plugin: blunderbuss&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;determines &lt;strong&gt;reviewers&lt;/strong&gt; and requests their reviews on PR&amp;rsquo;s&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.k8s.io/test-infra/prow/plugins/lgtm&#34;&gt;plugin: lgtm&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;adds the &lt;code&gt;lgtm&lt;/code&gt; label when a &lt;strong&gt;reviewer&lt;/strong&gt; comments &lt;code&gt;/lgtm&lt;/code&gt; on a PR&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;PR author&lt;/strong&gt; may not &lt;code&gt;/lgtm&lt;/code&gt; their own PR&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.k8s.io/test-infra/prow/repoowners/repoowners.go&#34;&gt;pkg: k8s.io/test-infra/prow/repoowners&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;parses OWNERS and OWNERS_ALIAS files&lt;/li&gt;
&lt;li&gt;if the &lt;code&gt;no_parent_owners&lt;/code&gt; option is encountered, parent owners are excluded from having
any influence over files adjacent to or underneath of the current OWNERS file&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;maintaining-owners-files&#34;&gt;Maintaining OWNERS files&lt;/h2&gt;
&lt;p&gt;OWNERS files should be regularly maintained.&lt;/p&gt;
&lt;p&gt;We encourage people to self-nominate or self-remove from OWNERS files via PR&amp;rsquo;s. Ideally in the future
we could use metrics-driven automation to assist in this process.&lt;/p&gt;
&lt;p&gt;We should strive to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;grow the number of OWNERS files&lt;/li&gt;
&lt;li&gt;add new people to OWNERS files&lt;/li&gt;
&lt;li&gt;ensure OWNERS files only contain org members and repo collaborators&lt;/li&gt;
&lt;li&gt;ensure OWNERS files only contain people are actively contributing to or reviewing the code they own&lt;/li&gt;
&lt;li&gt;remove inactive people from OWNERS files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bad examples of OWNERS usage:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;directories that lack OWNERS files, resulting in too many hitting root OWNERS&lt;/li&gt;
&lt;li&gt;OWNERS files that have a single person as both approver and reviewer&lt;/li&gt;
&lt;li&gt;OWNERS files that haven&amp;rsquo;t been touched in over 6 months&lt;/li&gt;
&lt;li&gt;OWNERS files that have non-collaborators present&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Good examples of OWNERS usage:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;there are more &lt;code&gt;reviewers&lt;/code&gt; than &lt;code&gt;approvers&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;approvers&lt;/code&gt; are not in the &lt;code&gt;reviewers&lt;/code&gt; section&lt;/li&gt;
&lt;li&gt;OWNERS files that are regularly updated (at least once per release)&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Deploy using UI</title>
      <link>/docs/gke/deploy/deploy-ui/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/gke/deploy/deploy-ui/</guid>
      <description>
        
        
        &lt;p&gt;This page provides instructions for using the Kubeflow deployment web app to
deploy Kubeflow on GCP. The deployment web app currently supports
&lt;strong&gt;Kubeflow v1.0.0&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For more control over your deployment, see the guide to
&lt;a href=&#34;/docs/gke/deploy/deploy-cli&#34;&gt;deployment using the CLI&lt;/a&gt;.
The CLI supports Kubeflow v1.0.2 and later versions.&lt;/p&gt;
&lt;h2 id=&#34;before-you-start&#34;&gt;Before you start&lt;/h2&gt;
&lt;p&gt;Check the following requirements before installing Kubeflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Make sure that your GCP project meets the minimum requirements
described in the &lt;a href=&#34;/docs/gke/deploy/project-setup/&#34;&gt;project setup guide&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you want to use &lt;a href=&#34;https://cloud.google.com/iap/docs/&#34;&gt;Cloud Identity-Aware Proxy (Cloud
IAP)&lt;/a&gt; for access control, follow the guide
to &lt;a href=&#34;/docs/gke/deploy/oauth-setup/&#34;&gt;setting up OAuth credentials&lt;/a&gt;.
Cloud IAP is recommended for production deployments or deployments with
access to sensitive data.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;deploy-kubeflow&#34;&gt;Deploy Kubeflow&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s a partial screenshot of the deployment user interface (UI):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/kubeflow-deployment.png&#34; 
alt=&#34;Kubeflow deployment UI&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;p&gt;Follow these steps to open the deployment UI and deploy Kubeflow on GCP:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open &lt;a href=&#34;https://deploy.kubeflow.cloud/#/deploy&#34;&gt;https://deploy.kubeflow.cloud/&lt;/a&gt;
in your web browser. You should see a form like the one in the above
screenshot.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sign in to your browser using an account that has the
&lt;a href=&#34;https://cloud.google.com/iam/docs/understanding-roles&#34;&gt;&lt;code&gt;owner&lt;/code&gt; role&lt;/a&gt;
for your GCP project.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Complete the following fields on the form:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Project ID:&lt;/strong&gt; Enter your GCP project ID.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deployment name:&lt;/strong&gt; Enter a short name that you can use to recognize this
deployment of Kubeflow.
The maximum length for the deployment name is 25 characters.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Choose how to connect to Kubeflow service:&lt;/strong&gt; You can choose one of the
following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Login with GCP IAP:&lt;/strong&gt; Choose this option if you want to use &lt;a href=&#34;https://cloud.google.com/iap/docs/&#34;&gt;Cloud
Identity-Aware Proxy (Cloud
IAP)&lt;/a&gt; for access control.
Cloud IAP is the best option for production deployments or deployments
with access to sensitive data. See more details &lt;a href=&#34;#cloud-iap&#34;&gt;below&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Login with Username Password:&lt;/strong&gt; &lt;strong&gt;Warning: This option is deprecated in Kubeflow 1.0 and
will be removed in the next version. We recommend switching to IAP.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GKE zone:&lt;/strong&gt; Enter the
&lt;a href=&#34;https://cloud.google.com/compute/docs/regions-zones/&#34;&gt;GCP zone&lt;/a&gt; in which
to create your deployment. The default is &lt;code&gt;us-central-1a&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Kubeflow version:&lt;/strong&gt; Choose one of the available versions of Kubeflow.
You can see all the versions on the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/&#34;&gt;Kubeflow releases page&lt;/a&gt;.
If you need a version that does not show on the deployment UI, you need to
&lt;a href=&#34;/docs/gke/deploy/deploy-cli&#34;&gt;deploy Kubeflow using the CLI&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Share Anonymous Usage Report:&lt;/strong&gt; Check this option to allow Kubeflow to
report usage data using &lt;a href=&#34;https://github.com/kubernetes-incubator/spartakus&#34;&gt;Spartakus&lt;/a&gt;. Spartakus does not report any personal information. The
default is to enable the reporting of usage data.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Create Deployment&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Watch for the deployment updates in the information box at the bottom of the
deployment UI.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a id=&#34;cloud-iap&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;authenticating-with-cloud-iap&#34;&gt;Authenticating with Cloud IAP&lt;/h2&gt;
&lt;p&gt;This section contains details about using &lt;a href=&#34;https://cloud.google.com/iap/docs/&#34;&gt;Cloud
IAP&lt;/a&gt; to control access to Kubeflow.
Cloud IAP is the best option for production deployments or deployments with
access to sensitive data.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Follow the guide to &lt;a href=&#34;/docs/gke/deploy/oauth-setup/&#34;&gt;setting up OAuth
credentials&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose the &lt;strong&gt;Login with GCP IAP&lt;/strong&gt; option on the Kubeflow deployment UI.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enter your &lt;strong&gt;IAP OAuth client ID&lt;/strong&gt; and &lt;strong&gt;IAP OAuth client secret&lt;/strong&gt; into the
corresponding fields on the deployment UI.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Complete the rest of the form as described above.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Kubeflow will be available at the following URI:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://&amp;lt;deployment_name&amp;gt;.endpoints.&amp;lt;project&amp;gt;.cloud.goog/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It can take 10-15 minutes for the URI to become available. You can watch
for updates in the information box on the deployment UI. If the deployment
takes longer than expected, click &lt;strong&gt;Kubeflow Service Endpoint&lt;/strong&gt; to try
accessing your Kubeflow URI.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#34;basic-auth&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;authenticating-with-username-and-password&#34;&gt;Authenticating with username and password&lt;/h2&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;No longer supported&lt;/h4&gt;
Basic authentication is not supported in Kubeflow v1.0.0 and will be removed entirely in the
next version. We highly recommend switching to deploying Kubeflow with IAP.
&lt;/div&gt;

&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Run a full ML workflow on Kubeflow, using the
&lt;a href=&#34;/docs/gke/gcp-e2e/&#34;&gt;end-to-end MNIST tutorial&lt;/a&gt; or the
&lt;a href=&#34;https://github.com/kubeflow/examples/tree/master/github_issue_summarization&#34;&gt;GitHub issue summarization
example&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;See how to delete your Kubeflow deployment using the
&lt;a href=&#34;/docs/gke/deploy/delete-cli&#34;&gt;CLI&lt;/a&gt;
or the &lt;a href=&#34;/docs/gke/deploy/delete-ui&#34;&gt;GCP Console&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;See how to &lt;a href=&#34;/docs/gke/customizing-gke&#34;&gt;customize&lt;/a&gt; your Kubeflow
deployment.&lt;/li&gt;
&lt;li&gt;See how to &lt;a href=&#34;/docs/upgrading/upgrade/&#34;&gt;upgrade Kubeflow&lt;/a&gt; and how to
&lt;a href=&#34;/docs/pipelines/upgrade/&#34;&gt;upgrade or reinstall a Kubeflow Pipelines
deployment&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/gke/troubleshooting-gke&#34;&gt;Troubleshoot&lt;/a&gt; any issues you may
find.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Chainer Training</title>
      <link>/docs/components/training/chainer/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/training/chainer/</guid>
      <description>
        
        
        &lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
  &lt;h4 class=&#34;alert-heading&#34;&gt;Alpha&lt;/h4&gt;
  This Kubeflow component has &lt;b&gt;alpha&lt;/b&gt; status with limited support. See the
  &lt;a href=&#34;/docs/reference/version-policy/&#34;&gt;Kubeflow versioning policies&lt;/a&gt;.
  The Kubeflow team is interested in your   
  &lt;a href=&#34;https://github.com/kubeflow/chainer-operator/issues&#34;&gt;feedback&lt;/a&gt;&lt;/h4&gt; 
  about the usability of the feature.
&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/kubeflow/chainer-operator&#34;&gt;Chainer&lt;/a&gt; is not supported in
Kubeflow versions greater than v0.6. See the &lt;a href=&#34;https://v0-6.kubeflow.org/docs/components/training/chainer/&#34;&gt;Kubeflow v0.6
documentation&lt;/a&gt;
for earlier support for Chainer training.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Community</title>
      <link>/docs/about/community/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/about/community/</guid>
      <description>
        
        
        &lt;p&gt;In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to make participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of
experience, education, socio-economic status, nationality, personal appearance,
race, religion, or sexual identity and orientation.&lt;/p&gt;
&lt;p&gt;The Kubeflow community is guided by our &lt;a href=&#34;https://github.com/kubeflow/community/blob/master/CODE_OF_CONDUCT.md&#34;&gt;Code of
Conduct&lt;/a&gt;,
which we encourage everybody to read before participating. We hold our leaders
accountable for the guidelines in
&lt;a href=&#34;https://github.com/kubeflow/community/blob/master/INCLUSIVITY.md&#34;&gt;this document&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;welcome-to-all-google-summer-of-code-gsoc-participants&#34;&gt;Welcome to all Google Summer of Code (GSoC) participants&lt;/h2&gt;
&lt;p&gt;The Kubeflow community is delighted to be part of
&lt;strong&gt;Google Summer of Code 2020&lt;/strong&gt;. Community
mentors look forward to working with students on their GSoC projects.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/docs/about/gsoc/&#34;&gt;Visit the Kubeflow GSoC page&lt;/a&gt; to find handy information and
links for GSoC students and mentors.&lt;/p&gt;
&lt;h2 id=&#34;community-discussions&#34;&gt;Community discussions&lt;/h2&gt;
&lt;p&gt;There are many ways to contribute! Join one of our communication channels,
attend a community meeting, get to know the community, discuss updates, suggest
exciting new integrations.&lt;/p&gt;
&lt;h3 id=&#34;community-meetings&#34;&gt;Community meetings&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://calendar.google.com/calendar/embed?src=kubeflow.org_7l5vnbn8suj2se10sen81d9428%40group.calendar.google.com&amp;amp;ctz=America%2FLos_Angeles&#34;&gt;&lt;strong&gt;Meeting calendar&lt;/strong&gt;&lt;/a&gt; (&lt;a href=&#34;https://calendar.google.com/calendar/ical/kubeflow.org_7l5vnbn8suj2se10sen81d9428%40group.calendar.google.com/public/basic.ics&#34;&gt;iCal version&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://bit.ly/kf-meeting-notes&#34;&gt;Meeting notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If your group has a regular meeting, talk to
&lt;a href=&#34;https://github.com/ewilderj&#34;&gt;@ewilderj&lt;/a&gt; about getting it added to the calendar.&lt;/p&gt;
&lt;h3 id=&#34;kubeflow-community-call&#34;&gt;Kubeflow community call&lt;/h3&gt;
&lt;p&gt;The project team holds a weekly community call on Tuesdays. This call alternates
weekly between US East/EMEA and US West/APAC friendly times. Joining the
&lt;a href=&#34;https://groups.google.com/forum/#!forum/kubeflow-discuss&#34;&gt;kubeflow-discuss&lt;/a&gt;
mailing list will automatically send you calendar invitations for the meetings,
or you can subscribe to the community meeting calendar above.&lt;/p&gt;
&lt;p&gt;Agenda, notes, and a reminder of the next call are sent to the kubeflow-discuss
mailing list.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#34;slack&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;slack-community-and-channels&#34;&gt;Slack community and channels&lt;/h3&gt;
&lt;p&gt;The Kubeflow Slack workspace is
&lt;a href=&#34;https://kubeflow.slack.com/&#34;&gt;kubeflow.slack.com&lt;/a&gt;. To join, click this
&lt;a href=&#34;https://join.slack.com/t/kubeflow/shared_invite/zt-cpr020z4-PfcAue_2nw67~iIDy7maAQ&#34;&gt;&lt;strong&gt;invitation to our Slack
workspace&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Kubeflow Slack workspace offers several channels. Here are a few examples:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Topic&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Slack channel&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;General discussion&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;https://kubeflow.slack.com/messages/C7REE0EHK&#34;&gt;#general&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Community meeting chat&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;https://kubeflow.slack.com/messages/C8Q0QJYNB&#34;&gt;#community&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;TF Operator (&lt;a href=&#34;https://github.com/kubeflow/tf-operator&#34;&gt;GitHub&lt;/a&gt;)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;https://kubeflow.slack.com/messages/C985VJN9F&#34;&gt;#tf-operator&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;KFServing (&lt;a href=&#34;https://github.com/kubeflow/kfserving&#34;&gt;GitHub&lt;/a&gt;)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;https://kubeflow.slack.com/messages/CH6E58LNP&#34;&gt;#kfserving&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Pipelines (&lt;a href=&#34;https://github.com/kubeflow/pipelines&#34;&gt;GitHub&lt;/a&gt;)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;https://kubeflow.slack.com/messages/CE10KS9M4&#34;&gt;#kubeflow-pipelines&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Examples (&lt;a href=&#34;https://github.com/kubeflow/examples&#34;&gt;GitHub&lt;/a&gt;)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;https://kubeflow.slack.com/messages/CA30Q9A4U&#34;&gt;#kubeflow-examples&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Documentation (&lt;a href=&#34;https://github.com/kubeflow/website&#34;&gt;GitHub&lt;/a&gt;)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;https://kubeflow.slack.com/messages/CA4M298LD&#34;&gt;#website&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Product management&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;https://kubeflow.slack.com/messages/CGP3DKT5E&#34;&gt;#product-management&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Google Summer of Code (GSoC)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;https://kubeflow.slack.com/messages/CUF1GCJ4Q&#34;&gt;#gsoc&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;mailing-lists&#34;&gt;Mailing lists&lt;/h3&gt;
&lt;p&gt;The primary mailing list (email group) is
&lt;a href=&#34;https://groups.google.com/forum/#!forum/kubeflow-discuss&#34;&gt;kubeflow-discuss&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;More detail about the Kubeflow mailing lists:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Topic&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Mailing list&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;General discussion&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;https://groups.google.com/forum/#!forum/kubeflow-discuss&#34;&gt;kubeflow-discuss&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;TF Operator (&lt;a href=&#34;https://github.com/kubeflow/tf-operator&#34;&gt;GitHub&lt;/a&gt;)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;https://groups.google.com/a/kubeflow.org/forum/#!forum/tf-operator&#34;&gt;tf-operator&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;who-should-consider-contributing-to-kubeflow&#34;&gt;Who should consider contributing to Kubeflow?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Folks who want to add support for other ML frameworks (e.g. PyTorch, XGBoost, scikit-learn)&lt;/li&gt;
&lt;li&gt;Folks who want to bring more Kubernetes magic to ML (e.g. ISTIO integration for prediction)&lt;/li&gt;
&lt;li&gt;Folks who want to make Kubeflow a richer ML platform (e.g. support for ML pipelines, hyperparameter tuning)&lt;/li&gt;
&lt;li&gt;Folks who want to tune Kubeflow for their particular Kubernetes distribution or Cloud&lt;/li&gt;
&lt;li&gt;Folks who want to write tutorials or blog posts showing how to use Kubeflow to solve ML problems&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For details on contributing please look at &lt;a href=&#34;/docs/about/contributing/&#34;&gt;the contributor&amp;rsquo;s guide&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Deploy using CLI</title>
      <link>/docs/gke/deploy/deploy-cli/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/gke/deploy/deploy-cli/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to use the &lt;code&gt;kfctl&lt;/code&gt; command line interface (CLI) to
deploy Kubeflow on GCP. The command line deployment gives you more control over
the deployment process and configuration than you get if you use the deployment
UI. If you&amp;rsquo;re looking for a simpler deployment procedure, see how to deploy
Kubeflow &lt;a href=&#34;/docs/gke/deploy/deploy-ui&#34;&gt;using the deployment UI&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;before-you-start&#34;&gt;Before you start&lt;/h2&gt;
&lt;p&gt;Before installing Kubeflow on the command line:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Ensure you have installed the following tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kubernetes.io/docs/tasks/tools/install-kubectl/&#34;&gt;kubectl&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.google.com/sdk/&#34;&gt;gcloud&lt;/a&gt;. If you already have &lt;code&gt;gcloud&lt;/code&gt;
installed, run &lt;code&gt;gcloud components update&lt;/code&gt; to
get the latest version of all your installed Cloud SDK components.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you&amp;rsquo;re using
&lt;a href=&#34;https://cloud.google.com/shell/&#34;&gt;Cloud Shell&lt;/a&gt;, enable
&lt;a href=&#34;https://cloud.google.com/shell/docs/features#boost_mode&#34;&gt;boost mode&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure that your GCP project meets the minimum requirements
described in the &lt;a href=&#34;/docs/gke/deploy/project-setup/&#34;&gt;project setup guide&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Follow the guide
&lt;a href=&#34;/docs/gke/deploy/oauth-setup/&#34;&gt;setting up OAuth credentials&lt;/a&gt;.
to create OAuth credentials for &lt;a href=&#34;https://cloud.google.com/iap/docs/&#34;&gt;Cloud Identity-Aware Proxy (Cloud
IAP)&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a id=&#34;prepare-environment&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;prepare-your-environment&#34;&gt;Prepare your environment&lt;/h2&gt;
&lt;p&gt;Follow these steps to download the kfctl binary for the Kubeflow CLI and set
some handy environment variables:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the kfctl v1.0.2 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.0.2&#34;&gt;kfctl releases page&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the tar ball:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -xvf kfctl_v1.0.2_&amp;lt;platform&amp;gt;.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Log in. You only need to run this command once:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcloud auth login
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create user credentials. You only need to run this command once:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcloud auth application-default login
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure gcloud default values for zone and project&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Set your GCP project ID and the zone where you want to create 
# the Kubeflow deployment:
export PROJECT=&amp;lt;your GCP project ID&amp;gt;
export ZONE=&amp;lt;your GCP zone&amp;gt;

gcloud config set project ${PROJECT}    
gcloud config set compute/zone ${ZONE}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kfctl&lt;/code&gt; by default uses the gcloud defaults for zone and project&lt;/li&gt;
&lt;li&gt;You can override this by explicitly setting zone and project in your &lt;code&gt;KFDef&lt;/code&gt;
file&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the KFDef spec to use as the basis for your deployment&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CONFIG_URI=&amp;quot;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_gcp_iap.v1.0.2.yaml&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create environment variables containing the OAuth client ID and secret that you created earlier&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CLIENT_ID=&amp;lt;CLIENT_ID from OAuth page&amp;gt;
export CLIENT_SECRET=&amp;lt;CLIENT_SECRET from OAuth page&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;The CLIENT_ID and CLIENT_SECRET can be obtained from the Cloud Console by selecting
&lt;strong&gt;APIs &amp;amp; Services -&amp;gt; Credentials&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pick a name &lt;strong&gt;KF_NAME&lt;/strong&gt; for your Kubeflow deployment and directory for
your configuration.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export KF_NAME=&amp;lt;your choice of name for the Kubeflow deployment&amp;gt;
export BASE_DIR=&amp;lt;path to a base directory&amp;gt;
export KF_DIR=${BASE_DIR}/${KF_NAME}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;For example, your kubeflow deployment name might be &amp;lsquo;my-kubeflow&amp;rsquo; or &amp;lsquo;kf-test&amp;rsquo;.&lt;/li&gt;
&lt;li&gt;Set base directory where you want to store one or more Kubeflow deployments.
For example, ${HOME}/kf_deployments.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(Optional) Add the kfctl binary to your path. If you don&amp;rsquo;t add kfctl to your path, you must use the full path
each time you run kfctl.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export PATH=$PATH:&amp;lt;path to your kfctl file&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${PROJECT}&lt;/strong&gt; - The project ID of the GCP project where you want Kubeflow
deployed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${ZONE}&lt;/strong&gt; - The GCP zone where you want to create the Kubeflow deployment.
You can see a list of zones in the
&lt;a href=&#34;https://cloud.google.com/compute/docs/regions-zones/#available&#34;&gt;Compute Engine documentation&lt;/a&gt;.
If you plan to use accelerators, you must choose a zone that supports the
type you want. See the guide to
&lt;a href=&#34;/docs/gke/customizing-gke/#gpu-config&#34;&gt;customizing your Kubeflow deployment&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_URI}&lt;/strong&gt; - The GitHub address of the configuration YAML file that
you want to use to deploy Kubeflow. For GCP deployments, the recommended
configuration is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_gcp_iap.v1.0.2.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt; (see the next step), kfctl creates
a local version of the configuration YAML file which you can further
customize if necessary.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_NAME}&lt;/strong&gt; - The name of your Kubeflow deployment.
If you want a custom deployment name, specify that name here.
For example,  &lt;code&gt;my-kubeflow&lt;/code&gt; or &lt;code&gt;kf-test&lt;/code&gt;.
The value of KF_NAME must consist of lower case alphanumeric characters or
&amp;lsquo;-&amp;rsquo;, and must start and end with an alphanumeric character.
The value of this variable cannot be greater than 25 characters. It must
contain just a name, not a directory path.
You also use this value as directory name when creating the directory where
your Kubeflow  configurations are stored, that is, the Kubeflow application
directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_DIR}&lt;/strong&gt; - The full path to your Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#34;set-up-and-deploy&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;deploying-kubeflow&#34;&gt;Deploying Kubeflow&lt;/h2&gt;
&lt;p&gt;To deploy Kubeflow using the &lt;strong&gt;default settings&lt;/strong&gt;,
run the &lt;code&gt;kfctl apply&lt;/code&gt; command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;kfctl will try to populate the KFDef spec with various defaults automatically&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;project&lt;/strong&gt; and &lt;strong&gt;zone&lt;/strong&gt; will be set based on your gcloud config defaults&lt;/li&gt;
&lt;li&gt;the name for the deployment will be inferred from the directory ${KF_DIR}&lt;/li&gt;
&lt;li&gt;You can override these values by modifying your KFDef spec before running the &lt;code&gt;build&lt;/code&gt; and &lt;code&gt;apply&lt;/code&gt;
commands&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can follow the instructions in the next section to override these defaults.&lt;/p&gt;
&lt;h2 id=&#34;customizing-your-kubeflow-deployment&#34;&gt;Customizing your Kubeflow deployment&lt;/h2&gt;
&lt;p&gt;The process outlined in the previous step configures Kubeflow with various defaults.
You can follow the instructions below to have greater control.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the KFDef file to your local directory to allow modifications&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ${KF_DIR}
cd ${KF_DIR}
curl -L -o ${CONFIG_FILE} https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_gcp_iap.v1.0.2.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CONFIG_FILE&lt;/strong&gt; should be the name you would like to use for your local config file; e.g. &amp;ldquo;kfdef.yaml&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit the KFDef spec in the yaml file. The following snippet shows you how to set values in the configuration file
using &lt;a href=&#34;https://github.com/mikefarah/yq/releases&#34;&gt;yq&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yq w -i ${CONFIG_FILE} &#39;spec.plugins[0].spec.project&#39; ${PROJECT}
yq w -i ${CONFIG_FILE} &#39;spec.plugins[0].spec.zone&#39; ${ZONE}
yq w -i ${CONFIG_FILE} &#39;metadata.name&#39; ${KF_NAME}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PROJECT:&lt;/strong&gt; The GCP project to deploy in&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ZONE:&lt;/strong&gt; The zone to deploy in&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KF_NAME&lt;/strong&gt;: The name used for your deployment.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the &lt;code&gt;kfctl build&lt;/code&gt; command to generate kustomize and GCP Deployment manager configuration files for your deployment:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ${KF_DIR}
kfctl build -V -f ${CONFIG_FILE}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To customize your GKE cluster modify the deployment manager configuration files
in the directory &lt;code&gt;${KF_DIR}/gcp_config&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For more information refer to:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/gke/customizing-gke/&#34;&gt;customizing your Kubeflow deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.google.com/deployment-manager/docs&#34;&gt;deployment manager docs&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To customize individual Kubeflow applications modify the Kustomize manifests in the directory
&lt;code&gt;${KF_DIR}/kustomize&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For more information please refer to the &lt;a href=&#34;https://github.com/kubernetes-sigs/kustomize/tree/master/docs&#34;&gt;kustomize docs&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the &lt;code&gt;kfctl apply&lt;/code&gt; command to deploy Kubeflow:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kfctl apply -V -f ${CONFIG_FILE}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;check-your-deployment&#34;&gt;Check your deployment&lt;/h2&gt;
&lt;p&gt;Follow these steps to verify the deployment:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The deployment process creates a separate deployment for your data storage.
After running &lt;code&gt;kfctl apply&lt;/code&gt; you should notice two new
&lt;a href=&#34;https://console.cloud.google.com/dm/deployments&#34;&gt;deployments&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;{KF_NAME}-storage&lt;/strong&gt;: This deployment has persistent volumes for your
pipelines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;{KF_NAME}&lt;/strong&gt;: This deployment has all the components of Kubeflow, including
a &lt;a href=&#34;https://console.cloud.google.com/kubernetes/list&#34;&gt;GKE cluster&lt;/a&gt;
named &lt;strong&gt;${KF_NAME}&lt;/strong&gt; with Kubeflow installed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When the deployment finishes, check the resources installed in the namespace
&lt;code&gt;kubeflow&lt;/code&gt; in your new cluster.  To do this from the command line, first set
your &lt;code&gt;kubectl&lt;/code&gt; credentials to point to the new cluster:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcloud container clusters get-credentials ${KF_NAME} --zone ${ZONE} --project ${PROJECT}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then see what&amp;rsquo;s installed in the &lt;code&gt;kubeflow&lt;/code&gt; namespace of your GKE cluster:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n kubeflow get all
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;access-the-kubeflow-user-interface-ui&#34;&gt;Access the Kubeflow user interface (UI)&lt;/h2&gt;
&lt;p&gt;Follow these steps to access the Kubeflow central dashboard:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Enter the following URI into your browser address bar. It can take 20
minutes for the URI to become available:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://&amp;lt;KF_NAME&amp;gt;.endpoints.&amp;lt;project-id&amp;gt;.cloud.goog/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can run the following command to get the URI for your deployment:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n istio-system get ingress
NAME            HOSTS                                                      ADDRESS         PORTS   AGE
envoy-ingress   your-kubeflow-name.endpoints.your-gcp-project.cloud.goog   34.102.232.34   80      5d13h
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The following command sets an environment variable named &lt;code&gt;HOST&lt;/code&gt; to the URI:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export HOST=$(kubectl -n istio-system get ingress envoy-ingress -o=jsonpath={.spec.rules[0].host})
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Follow the instructions on the UI to create a namespace. See the guide to
&lt;a href=&#34;/docs/components/multi-tenancy/getting-started/#automatic-creation-of-profiles&#34;&gt;creation of profiles&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It can take 20 minutes for the URI to become available.
Kubeflow needs to provision a signed SSL certificate and register a DNS
name.&lt;/li&gt;
&lt;li&gt;If you own or manage the domain or a subdomain with
&lt;a href=&#34;https://cloud.google.com/dns/docs/&#34;&gt;Cloud DNS&lt;/a&gt;
then you can configure this process to be much faster.
See &lt;a href=&#34;https://github.com/kubeflow/kubeflow/issues/731&#34;&gt;kubeflow/kubeflow#731&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;understanding-the-deployment-process&#34;&gt;Understanding the deployment process&lt;/h2&gt;
&lt;p&gt;This section gives you more details about the kfctl configuration and
deployment process, so that you can customize your Kubeflow deployment if
necessary.&lt;/p&gt;
&lt;h3 id=&#34;kfctl-process-and-configuration&#34;&gt;kfctl process and configuration&lt;/h3&gt;
&lt;p&gt;The kfctl deployment process includes the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kfctl build&lt;/code&gt; - (Optional) Creates configuration files defining the various
resources in your deployment. You only need to run &lt;code&gt;kfctl build&lt;/code&gt; if you want
to edit the resources before running &lt;code&gt;kfctl apply&lt;/code&gt;. See the guide to
&lt;a href=&#34;/docs/gke/customizing-gke/&#34;&gt;customizing your Kubeflow deployment&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfctl apply&lt;/code&gt; - Creates or updates the resources.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfctl delete&lt;/code&gt; - Deletes the resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The kfctl deployment process applies default values to certain properties
as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Email address:&lt;/strong&gt; kfctl attempts to fetch your email address from your
Cloud SDK configuration. You can run &lt;code&gt;gcloud config list&lt;/code&gt; to see the default
email address, which the command output lists as the &lt;strong&gt;account&lt;/strong&gt;.
If kfctl can&amp;rsquo;t find a valid email address, you must use the
flag &lt;code&gt;--email &amp;lt;your email address&amp;gt;&lt;/code&gt; to pass a valid email address. This email
address becomes an administrator in the configuration of your Kubeflow
deployment.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GCP project ID:&lt;/strong&gt; kfctl attempts to fetch your project ID from your
Cloud SDK configuration. You can run &lt;code&gt;gcloud config list&lt;/code&gt; to see your
active project ID.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GCP zone:&lt;/strong&gt; kfctl attempts to fetch the zone from your Cloud SDK
configuration. You can run &lt;code&gt;gcloud config list&lt;/code&gt; to see your active zone.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Kubeflow deployment name:&lt;/strong&gt; kfctl defaults to the name of the directory
where you run the &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt; command.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can also explicitly set the following values in your &lt;code&gt;${CONFIG_FILE}&lt;/code&gt;
configuration file:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubeflow deployment name&lt;/li&gt;
&lt;li&gt;GCP project&lt;/li&gt;
&lt;li&gt;GCP zone&lt;/li&gt;
&lt;li&gt;Email address&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following snippet shows you how to set values in the configuration file
using &lt;a href=&#34;https://github.com/mikefarah/yq/releases&#34;&gt;yq&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yq w -i ${CONFIG_FILE} &#39;spec.plugins[0].spec.project&#39; ${PROJECT}
yq w -i ${CONFIG_FILE} &#39;spec.plugins[0].spec.zone&#39; ${ZONE}
yq w -i ${CONFIG_FILE} &#39;metadata.name&#39; ${KF_NAME}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;application-layout&#34;&gt;Application layout&lt;/h3&gt;
&lt;p&gt;Your Kubeflow application directory &lt;strong&gt;${KF_DIR}&lt;/strong&gt; contains the following files and
directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_FILE}&lt;/strong&gt; is a YAML file that defines configurations related to your
Kubeflow deployment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This file is a copy of the GitHub-based configuration YAML file that
you used when deploying Kubeflow:
&lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_gcp_iap.v1.0.2.yaml&#34;&gt;kfctl_gcp_iap.v1.0.0.yaml&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt;, kfctl creates
a local version of the configuration file, &lt;strong&gt;${CONFIG_FILE}&lt;/strong&gt;,
which you can further customize if necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;gcp_config&lt;/strong&gt; is a directory that contains
&lt;a href=&#34;https://cloud.google.com/deployment-manager/docs/configuration/&#34;&gt;Deployment Manager configuration files&lt;/a&gt;
defining your GCP infrastructure.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory is created when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can modify these configurations to customize your GCP infrastructure.
After modifying a configuration, run &lt;code&gt;kfctl apply&lt;/code&gt; again.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;kustomize&lt;/strong&gt; is a directory that contains the kustomize packages for Kubeflow
applications. See
&lt;a href=&#34;/docs/other-guides/kustomize/&#34;&gt;how Kubeflow uses kustomize&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory is created when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can customize the Kubernetes resources by modifying the manifests and
running &lt;code&gt;kfctl apply&lt;/code&gt; again.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We recommend that you check in the contents of your &lt;strong&gt;${KF_DIR}&lt;/strong&gt; directory
into source control.&lt;/p&gt;
&lt;h3 id=&#34;gcp-service-accounts&#34;&gt;GCP service accounts&lt;/h3&gt;
&lt;p&gt;The kfctl deployment process creates three service accounts in your
GCP project. These service accounts follow the &lt;a href=&#34;https://en.wikipedia.org/wiki/Principle_of_least_privilege&#34;&gt;principle of least
privilege&lt;/a&gt;.
The service accounts are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;${KF_NAME}-admin&lt;/code&gt; is used for some admin tasks like configuring the load
balancers. The principle is that this account is needed to deploy Kubeflow but
not needed to actually run jobs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;${KF_NAME}-user&lt;/code&gt; is intended to be used by training jobs and models to access
GCP resources (Cloud Storage, BigQuery, etc.). This account has a much smaller
set of privileges compared to &lt;code&gt;admin&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;${KF_NAME}-vm&lt;/code&gt; is used only for the virtual machine (VM) service account. This
account has the minimal permissions needed to send metrics and logs to
&lt;a href=&#34;https://cloud.google.com/stackdriver/&#34;&gt;Stackdriver&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;basic-authentication-deprecated&#34;&gt;Basic authentication (deprecated)&lt;/h2&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;No longer supported&lt;/h4&gt;
Basic authentication is not supported in Kubeflow v1.0.0 and will be removed entirely in the
next version. We highly recommend switching to deploying Kubeflow with IAP.
&lt;/div&gt;

&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Run a full ML workflow on Kubeflow, using the
&lt;a href=&#34;/docs/gke/gcp-e2e/&#34;&gt;end-to-end MNIST tutorial&lt;/a&gt; or the
&lt;a href=&#34;https://github.com/kubeflow/examples/tree/master/github_issue_summarization/pipelines&#34;&gt;GitHub issue summarization Pipelines
example&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;See how to &lt;a href=&#34;/docs/gke/deploy/delete-cli/&#34;&gt;delete&lt;/a&gt; your Kubeflow deployment
using the CLI.&lt;/li&gt;
&lt;li&gt;See how to &lt;a href=&#34;/docs/gke/customizing-gke/&#34;&gt;customize&lt;/a&gt; your Kubeflow
deployment.&lt;/li&gt;
&lt;li&gt;See how to &lt;a href=&#34;/docs/upgrading/upgrade/&#34;&gt;upgrade Kubeflow&lt;/a&gt; and how to
&lt;a href=&#34;/docs/pipelines/upgrade/&#34;&gt;upgrade or reinstall a Kubeflow Pipelines
deployment&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/gke/troubleshooting-gke/&#34;&gt;Troubleshoot&lt;/a&gt; any issues you may
find.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Install Kubeflow</title>
      <link>/docs/aws/deploy/install-kubeflow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/aws/deploy/install-kubeflow/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to use the kfctl CLI to
deploy Kubeflow on Amazon Web Services (AWS).&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href=&#34;https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl&#34;&gt;kubectl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Install and configure the AWS Command Line Interface (AWS CLI):
&lt;ul&gt;
&lt;li&gt;Install the &lt;a href=&#34;https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html&#34;&gt;AWS Command Line Interface&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Configure the AWS CLI by running the following command: &lt;code&gt;aws configure&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enter your Access Keys (&lt;a href=&#34;https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys&#34;&gt;Access Key ID and Secret Access Key&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Enter your preferred AWS Region and default output options.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Install &lt;a href=&#34;https://github.com/weaveworks/eksctl&#34;&gt;eksctl&lt;/a&gt; (version 0.1.31 or newer) and the &lt;a href=&#34;https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html&#34;&gt;aws-iam-authenticator&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;eks-cluster&#34;&gt;EKS cluster&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;re many ways to provision EKS cluster, using AWS EKS CLI, CloudFormation or Terraform, AWS CDK or eksctl.
Here, we highly recommend you to create an EKS cluster using &lt;a href=&#34;https://github.com/weaveworks/eksctl&#34;&gt;eksctl&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You are required to have an existing Amazon Elastic Kubernetes Service (Amazon EKS) cluster before moving the next step.&lt;/p&gt;
&lt;p&gt;The installation tool uses the &lt;code&gt;eksctl&lt;/code&gt; command and doesn&amp;rsquo;t support the &lt;code&gt;--profile&lt;/code&gt; option in that command.
If you need to switch role, use the &lt;code&gt;aws sts assume-role&lt;/code&gt; commands. See the AWS guide to &lt;a href=&#34;https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html&#34;&gt;using temporary security credentials to request access to AWS resources&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#34;prepare-environment&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;prepare-your-environment&#34;&gt;Prepare your environment&lt;/h2&gt;
&lt;p&gt;In order to deploy Kubeflow on your existing Amazon EKS cluster, you need to provide &lt;code&gt;AWS_CLUSTER_NAME&lt;/code&gt;, &lt;code&gt;cluster region&lt;/code&gt; and &lt;code&gt;worker roles&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Follow these steps to download the kfctl binary for the Kubeflow CLI and set
some handy environment variables:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the kfctl v1.0.2 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.0.2&#34;&gt;Kubeflow releases
page&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the tar ball:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -xvf kfctl_v1.0.2_&amp;lt;platform&amp;gt;.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create environment variables to make the deployment process easier:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Add kfctl to PATH, to make the kfctl binary easier to use.
export PATH=$PATH:&amp;quot;&amp;lt;path to kfctl&amp;gt;&amp;quot;

# Use the following kfctl configuration file for the AWS setup without authentication:
export CONFIG_URI=&amp;quot;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_aws.v1.0.2.yaml&amp;quot;

# Alternatively, use the following kfctl configuration if you want to enable
# authentication, authorization and multi-user:
export CONFIG_URI=&amp;quot;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_aws_cognito.v1.0.2.yaml&amp;quot;

# Set an environment variable for your AWS cluster name, and set the name
# of the Kubeflow deployment to the same as the cluster name.
export AWS_CLUSTER_NAME=&amp;lt;YOUR EKS CLUSTER NAME&amp;gt;
export KF_NAME=${AWS_CLUSTER_NAME}

# Set the path to the base directory where you want to store one or more
# Kubeflow deployments. For example, /opt/.
# Then set the Kubeflow application directory for this deployment.
export BASE_DIR=&amp;lt;path to a base directory&amp;gt;
export KF_DIR=${BASE_DIR}/${KF_NAME}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_URI}&lt;/strong&gt; - The GitHub address of the configuration YAML file that
you want to use to deploy Kubeflow. For AWS deployments, the following
configurations are available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_aws.v1.0.2.yaml&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_aws_cognito.v1.0.2.yaml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt; (see the next step), kfctl creates
a local version of the configuration YAML file which you can further
customize if necessary.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_NAME}&lt;/strong&gt; - The name of your Kubeflow deployment.
You should set this value to be the same as your AWS cluster name.
The value of KF_NAME must consist of lower case alphanumeric characters or
&amp;lsquo;-&amp;rsquo;, and must start and end with an alphanumeric character.
The value of this variable cannot be greater than 25 characters. It must
contain just a name, not a directory path.
This value also becomes the name of the directory where your Kubeflow
configurations are stored, that is, the Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_DIR}&lt;/strong&gt; - The full path to your Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;set-up-your-kubeflow-configuration&#34;&gt;Set up your Kubeflow configuration&lt;/h2&gt;
&lt;p&gt;Download your configuration files, so that you can customize the
configuration before deploying Kubeflow:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ${KF_DIR}
cd ${KF_DIR}

wget -O kfctl_aws.yaml $CONFIG_URI
export CONFIG_FILE=${KF_DIR}/kfctl_aws.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;configure-kubeflow&#34;&gt;Configure Kubeflow&lt;/h2&gt;
&lt;p&gt;In v1.0.1, Kubeflow supports to use &lt;a href=&#34;https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html&#34;&gt;AWS IAM Roles for Service Account&lt;/a&gt; to fine grain control AWS service access.
kfctl will create two roles &lt;code&gt;kf-admin-${cluster_name}&lt;/code&gt; and &lt;code&gt;kf-user-${cluster_name}&lt;/code&gt; and Kubernetes service account &lt;code&gt;kf-admin&lt;/code&gt; and &lt;code&gt;kf-user&lt;/code&gt; under kubeflow namespace. &lt;code&gt;kf-admin-${cluster_name}&lt;/code&gt; will be assumed by components like &lt;code&gt;alb-ingress-controller&lt;/code&gt;, &lt;code&gt;profile-controller&lt;/code&gt; or any Kubeflow control plane components which need to talk to AWS services. &lt;code&gt;kf-user-${cluster_name}&lt;/code&gt; can be used by user&amp;rsquo;s application.&lt;/p&gt;
&lt;p&gt;This is only available on EKS, for DIY Kubernetes on AWS, check out &lt;a href=&#34;https://github.com/aws/amazon-eks-pod-identity-webhook/&#34;&gt;aws/amazon-eks-pod-identity-webhook&lt;/a&gt; to setup webhook.&lt;/p&gt;
&lt;p&gt;Traditional way to attach IAM policies to node group role is still working, feel free choose the way you like to use.&lt;/p&gt;
&lt;h3 id=&#34;option-1-use-iam-for-service-account&#34;&gt;Option 1: Use IAM For Service Account&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;kfctl&lt;/code&gt; will help create or reuse IAM OIDC Identity Provider, create role and handle trust relationship binding with Kubernetes Service Accounts.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: By default, we don&amp;rsquo;t attach any policies to &lt;code&gt;kf-user-${cluster_name}&lt;/code&gt;, you can attach policies based on your need.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Add &lt;code&gt;enablePodIamPolicy: true&lt;/code&gt; in your &lt;code&gt;${CONFIG_FILE}&lt;/code&gt; file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;region: us-west-2
enablePodIamPolicy: true

# you can delete following roles settings.
#roles:
#- eksctl-kubeflow-example-nodegroup-ng-185-NodeInstanceRole-1DDJJXQBG9EM6
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Check &lt;a href=&#34;/docs/aws/iam-for-sa&#34;&gt;IAM Role For Service Account&lt;/a&gt; for more usage.&lt;/p&gt;
&lt;h3 id=&#34;option-2-use-node-group-role&#34;&gt;Option 2: Use Node Group Role&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Replace the AWS cluster name in your &lt;code&gt;${CONFIG_FILE}&lt;/code&gt; file, by changing
the value &lt;code&gt;kubeflow-aws&lt;/code&gt; to &lt;code&gt;${AWS_CLUSTER_NAME}&lt;/code&gt; in multiple locations in
the file. For example, use this &lt;code&gt;sed&lt;/code&gt; command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sed -i&#39;.bak&#39; -e &#39;s/kubeflow-aws/&#39;&amp;quot;$AWS_CLUSTER_NAME&amp;quot;&#39;/&#39; ${CONFIG_FILE}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Retrieve the AWS Region and IAM role name for your worker nodes.
To get the IAM role name for your Amazon EKS worker node, run the following
command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;aws iam list-roles \
    | jq -r &amp;quot;.Roles[] \
    | select(.RoleName \
    | startswith(\&amp;quot;eksctl-$AWS_CLUSTER_NAME\&amp;quot;) and contains(\&amp;quot;NodeInstanceRole\&amp;quot;)) \
    .RoleName&amp;quot;

eksctl-kubeflow-example-nodegroup-ng-185-NodeInstanceRole-1DDJJXQBG9EM6
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note: The above command assumes that you used &lt;code&gt;eksctl&lt;/code&gt; to create your
cluster. If you use other provisioning tools to create your worker node
groups, find the role that is associated with your worker nodes in the
Amazon EC2 console.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change cluster region and worker role names in your &lt;code&gt;${CONFIG_FILE}&lt;/code&gt; file:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;region: us-west-2
roles:
- eksctl-kubeflow-example-nodegroup-ng-185-NodeInstanceRole-1DDJJXQBG9EM6
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you have multiple node groups, you will see corresponding number of node group roles. In that case, please provide the role names as an array.&lt;/p&gt;
&lt;h2 id=&#34;deploy-kubeflow&#34;&gt;Deploy Kubeflow&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Run the following commands to initialize the Kubeflow cluster:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_FILE}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;Important!!!&lt;/em&gt; By default, these scripts create an AWS Application Load Balancer for Kubeflow that is open to public. This is good for development testing and for short term use, but we do not recommend that you use this configuration for production workloads.&lt;/p&gt;
&lt;p&gt;To secure your installation, Follow the &lt;a href=&#34;/docs/aws/authentication&#34;&gt;instructions&lt;/a&gt; to add authentication and authorization.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait for all the resources to become ready in the &lt;code&gt;kubeflow&lt;/code&gt; namespace.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n kubeflow get all
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;access-kubeflow-central-dashboard&#34;&gt;Access Kubeflow central dashboard&lt;/h2&gt;
&lt;p&gt;If you are using &lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_aws_cognito.v1.0.2.yaml,&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_aws_cognito.v1.0.2.yaml,&lt;/a&gt; run following command to get Kubeflow service endpoint host name and copy link in browser.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl get ingress -n istio-system

NAMESPACE      NAME            HOSTS   ADDRESS                                                             PORTS   AGE
istio-system   istio-ingress   *       a743484b-istiosystem-istio-2af2-xxxxxx.us-west-2.elb.amazonaws.com   80      1h
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This deployment may take 3-5 minutes to become ready. Verify that the address works by opening it in your preferred Internet browser.&lt;/p&gt;
&lt;p&gt;If you are using &lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_aws.v1.0.2.yaml,&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_aws.v1.0.2.yaml,&lt;/a&gt; the Kubeflow Dashboard can be accessed via istio-ingressgateway service.&lt;/p&gt;
&lt;p&gt;You can run following command to port forward to local, then open &lt;code&gt;http://localhost:8080&lt;/code&gt; in browser.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Check more details &lt;a href=&#34;https://istio.io/docs/tasks/traffic-management/ingress/ingress-control/&#34;&gt;Ingress Gateway guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To expose Kubeflow with a LoadBalancer Service, just change the type of the &lt;code&gt;istio-ingressgateway&lt;/code&gt; Service to &lt;code&gt;LoadBalancer&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl patch service -n istio-system istio-ingressgateway -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;spec&amp;#34;: {&amp;#34;type&amp;#34;: &amp;#34;LoadBalancer&amp;#34;}}&amp;#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;While the change is being applied, you can watch the service until below command prints a value under the &lt;code&gt;EXTERNAL-IP&lt;/code&gt; column:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl get -w -n istio-system svc/istio-ingressgateway&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The external IP should be accessible by visiting http://&lt;EXTERNAL-IP&gt;. Note that above installation instructions do not create any protection for the external endpoint so it will be accessible to anyone without any authentication. To secure your installation, use &lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_aws_cognito.v1.0.2.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_aws_cognito.v1.0.2.yaml&lt;/a&gt; and follow the &lt;a href=&#34;/docs/aws/authentication&#34;&gt;instructions&lt;/a&gt; to add authentication and authorization.&lt;/p&gt;
&lt;h2 id=&#34;post-installation&#34;&gt;Post Installation&lt;/h2&gt;
&lt;p&gt;Kubeflow provides multi-tenancy support and user are not able to create notebooks in &lt;code&gt;kubeflow&lt;/code&gt;, &lt;code&gt;default&lt;/code&gt; namespace.&lt;/p&gt;
&lt;p&gt;The first time you visit the cluster, you can ceate a namespace &lt;code&gt;anonymous&lt;/code&gt; to use. If you want to create different users, you can create &lt;code&gt;Profile&lt;/code&gt; and then &lt;code&gt;kubectl apply -f profile.yaml&lt;/code&gt;. Profile controller will create new namespace and service account which is allowed to create notebook in that namespace.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kubeflow.org/v1beta1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Profile&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;aws-sample-user&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;owner&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;User&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;aws-sample-user&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Check &lt;a href=&#34;/docs/components/multi-tenancy&#34;&gt;Multi-Tenancy in Kubeflow&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&#34;understanding-the-deployment-process&#34;&gt;Understanding the deployment process&lt;/h2&gt;
&lt;p&gt;The kfctl deployment process is controlled by the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kfctl build&lt;/code&gt; - (Optional) Creates configuration files defining the various
resources in your deployment. You only need to run &lt;code&gt;kfctl build&lt;/code&gt; if you want
to edit the resources before running &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfctl apply&lt;/code&gt; - Creates or updates the resources.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfctl delete&lt;/code&gt; - Deletes the resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;app-layout&#34;&gt;App layout&lt;/h3&gt;
&lt;p&gt;Your Kubeflow app directory &lt;strong&gt;${KF_DIR}&lt;/strong&gt; contains the following files and directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_FILE}&lt;/strong&gt; is a YAML file that defines configurations related to your
Kubeflow deployment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This file is a copy of the GitHub-based configuration YAML file that
you used when deploying Kubeflow.&lt;/li&gt;
&lt;li&gt;When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt;, kfctl creates
a local version of the configuration file, &lt;code&gt;${CONFIG_FILE},&lt;/code&gt;
which you can further customize if necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;aws_config&lt;/strong&gt; is a directory that contains a sample &lt;code&gt;eksctl&lt;/code&gt; cluster configuration file that defines the AWS cluster and policy files to attach to your node group roles.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can modify the &lt;code&gt;cluster_config.yaml&lt;/code&gt; and &lt;code&gt;cluster_features.yaml&lt;/code&gt; files to customize your AWS infrastructure.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;kustomize&lt;/strong&gt; is a directory that contains the kustomize packages for Kubeflow applications.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory is created when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can customize the Kubernetes resources (modify the manifests and run &lt;code&gt;kfctl apply&lt;/code&gt; again).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The provisioning scripts can either bring up a new cluster and install Kubeflow on it, or you can install Kubeflow on your existing cluster. We recommend that you create a new cluster for better isolation.&lt;/p&gt;
&lt;p&gt;If you experience any issues running these scripts, see the &lt;a href=&#34;/docs/aws/troubleshooting-aws&#34;&gt;troubleshooting guidance&lt;/a&gt; for more information.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Install Kubeflow</title>
      <link>/docs/azure/deploy/install-kubeflow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/azure/deploy/install-kubeflow/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to use the kfctl binary to
deploy Kubeflow on Azure.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href=&#34;https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux&#34;&gt;kubectl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Install and configure the &lt;a href=&#34;https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest&#34;&gt;Azure Command Line Interface (Az)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Log in with &lt;code&gt;az login&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(Optional) Install Docker
&lt;ul&gt;
&lt;li&gt;For Windows and WSL: &lt;a href=&#34;https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly&#34;&gt;Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For other OS: &lt;a href=&#34;https://hub.docker.com/?overlay=onboarding&#34;&gt;Docker Desktop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You do not need to have an existing Azure Resource Group or Cluster for AKS (Azure Kubernetes Service). You can create a cluster in the deployment process.&lt;/p&gt;
&lt;h2 id=&#34;understanding-the-deployment-process&#34;&gt;Understanding the deployment process&lt;/h2&gt;
&lt;p&gt;The deployment process is controlled by the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;build&lt;/strong&gt; - (Optional) Creates configuration files defining the various
resources in your deployment. You only need to run &lt;code&gt;kfctl build&lt;/code&gt; if you want
to edit the resources before running &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;apply&lt;/strong&gt; - Creates or updates the resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;delete&lt;/strong&gt; - Deletes the resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;app-layout&#34;&gt;App layout&lt;/h3&gt;
&lt;p&gt;Your Kubeflow application directory &lt;strong&gt;${KF_DIR}&lt;/strong&gt; contains the following files and
directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_FILE}&lt;/strong&gt; is a YAML file that defines configurations related to your
Kubeflow deployment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This file is a copy of the GitHub-based configuration YAML file that
you used when deploying Kubeflow. For example, &lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt;, kfctl creates
a local version of the configuration file, &lt;code&gt;${CONFIG_FILE}&lt;/code&gt;,
which you can further customize if necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;kustomize&lt;/strong&gt; is a directory that contains the kustomize packages for Kubeflow applications.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory is created when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can customize the Kubernetes resources (modify the manifests and run &lt;code&gt;kfctl apply&lt;/code&gt; again).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you experience any issues running these scripts, see the &lt;a href=&#34;/docs/azure/troubleshooting-azure&#34;&gt;troubleshooting guidance&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2 id=&#34;azure-setup&#34;&gt;Azure setup&lt;/h2&gt;
&lt;h3 id=&#34;login-to-azure&#34;&gt;Login to Azure&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;az login
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;initial-cluster-setup-for-new-cluster&#34;&gt;Initial cluster setup for new cluster&lt;/h3&gt;
&lt;p&gt;Create a resource group:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;az group create -n &amp;lt;RESOURCE_GROUP_NAME&amp;gt; -l &amp;lt;LOCATION&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Example variables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RESOURCE_GROUP_NAME=KubeTest&lt;/li&gt;
&lt;li&gt;LOCATION=westus&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Create a specifically defined cluster:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;az aks create -g &amp;lt;RESOURCE_GROUP_NAME&amp;gt; -n &amp;lt;NAME&amp;gt; -s &amp;lt;AGENT_SIZE&amp;gt; -c &amp;lt;AGENT_COUNT&amp;gt; -l &amp;lt;LOCATION&amp;gt; --generate-ssh-keys
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Example variables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NAME=KubeTestCluster&lt;/li&gt;
&lt;li&gt;AGENT_SIZE=Standard_D4s_v3&lt;/li&gt;
&lt;li&gt;AGENT_COUNT=2&lt;/li&gt;
&lt;li&gt;Use the same resource group and name from the previous step&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;NOTE:  If you are using a GPU based AKS cluster (For example: AGENT_SIZE=Standard_NC6), you also need to &lt;a href=&#34;https://docs.microsoft.com/azure/aks/gpu-cluster#install-nvidia-drivers&#34;&gt;install the NVidia drivers&lt;/a&gt; on the cluster nodes before you can use GPUs with Kubeflow.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;kubeflow-installation&#34;&gt;Kubeflow installation&lt;/h2&gt;
&lt;p&gt;Run the following commands to set up and deploy Kubeflow.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create user credentials. You only need to run this command once.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; az aks get-credentials -n &amp;lt;NAME&amp;gt; -g &amp;lt;RESOURCE_GROUP_NAME&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download the kfctl v1.0.2 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.0.2&#34;&gt;Kubeflow releases
page&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the tar ball&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; tar -xvf kfctl_v1.0.2_&amp;lt;platform&amp;gt;.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following commands to set up and deploy Kubeflow. The code below includes an optional command to add the binary kfctl to your path. If you don’t add the binary to your path, you must use the full path to the kfctl binary each time you run it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# The following command is optional, to make kfctl binary easier to use.
export PATH=$PATH:&amp;lt;path to where kfctl was unpacked&amp;gt;

# Set KF_NAME to the name of your Kubeflow deployment. This also becomes the
# name of the directory containing your configuration.
# For example, your deployment name can be &#39;my-kubeflow&#39; or &#39;kf-test&#39;.
export KF_NAME=&amp;lt;your choice of name for the Kubeflow deployment&amp;gt;

# Set the path to the base directory where you want to store one or more 
# Kubeflow deployments. For example, /opt/.
# Then set the Kubeflow application directory for this deployment.
export BASE_DIR=&amp;lt;path to a base directory&amp;gt;
export KF_DIR=${BASE_DIR}/${KF_NAME}

# Set the configuration file to use, such as the file specified below:
export CONFIG_URI=&amp;quot;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&amp;quot;

# Generate and deploy Kubeflow:
mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_NAME}&lt;/strong&gt; - The name of your Kubeflow deployment.
If you want a custom deployment name, specify that name here.
For example,  &lt;code&gt;my-kubeflow&lt;/code&gt; or &lt;code&gt;kf-test&lt;/code&gt;.
The value of KF_NAME must consist of lower case alphanumeric characters or
&amp;lsquo;-&amp;rsquo;, and must start and end with an alphanumeric character.
The value of this variable cannot be greater than 25 characters. It must
contain just a name, not a directory path.
This value also becomes the name of the directory where your Kubeflow
configurations are stored, that is, the Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_DIR}&lt;/strong&gt; - The full path to your Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check the resources deployed correctly in namespace &lt;code&gt;kubeflow&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; kubectl get all -n kubeflow
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Kubeflow Dashboard&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The default installation does not create an external endpoint but you can use port-forwarding to visit your cluster. Run the following command and visit http://localhost:8080.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To open the dashboard to a public IP address, you should first implement a solution to prevent unauthorized access. You can read more about Azure authentication options from &lt;a href=&#34;/docs/azure/authentication&#34;&gt;Access Control for Azure Deployment&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;additional-information&#34;&gt;Additional information&lt;/h2&gt;
&lt;p&gt;You can find general information about Kubeflow configuration in the guide to &lt;a href=&#34;/docs/other-guides/kustomize/&#34;&gt;configuring Kubeflow with kfctl and kustomize&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Install Kubeflow</title>
      <link>/docs/ibm/install-kubeflow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/ibm/install-kubeflow/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to use the kfctl binary to
deploy Kubeflow on IBM Cloud.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;h3 id=&#34;installing-the-ibm-cloud-developer-tools&#34;&gt;Installing the IBM Cloud developer tools&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;If you already have &lt;code&gt;ibmcloud&lt;/code&gt; installed with the latest &lt;code&gt;ibmcloud ks&lt;/code&gt; (Kubernetes Service) plug-in, you
can skip these steps.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download and install the &lt;code&gt;ibmcloud&lt;/code&gt; command line tool:
&lt;a href=&#34;https://cloud.ibm.com/docs/cli?topic=cloud-cli-getting-started#overview&#34;&gt;https://cloud.ibm.com/docs/cli?topic=cloud-cli-getting-started#overview&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the &lt;a href=&#34;https://cloud.ibm.com/docs/cli?topic=containers-cli-plugin-kubernetes-service-cli&#34;&gt;Kubernetes Service plug-in&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud plugin install container-service
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Authorize &lt;code&gt;ibmcloud&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud login
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;setting-environment-variables&#34;&gt;Setting environment variables&lt;/h3&gt;
&lt;p&gt;To simplify the command lines for this walkthrough, you need to define a few
environment variables.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Set &lt;code&gt;CLUSTER_NAME&lt;/code&gt; and &lt;code&gt;CLUSTER_ZONE&lt;/code&gt; variables:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CLUSTER_NAME=kubeflow
export CLUSTER_ZONE=dal13
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CLUSTER_NAME&lt;/code&gt; must be lowercase and unique among any other Kubernetes
clusters in the specified CLUSTER_ZONE.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLUSTER_ZONE&lt;/code&gt; identifies the location where CLUSTER_NAME will be created. Run &lt;code&gt;ibmcloud ks locations&lt;/code&gt; to list supported IBM Cloud Kubernetes Service locations. For example, choose &lt;code&gt;dal13&lt;/code&gt; to create CLUSTER_NAME in the Dallas (US) data center.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;creating-a-ibm-cloud-kubernetes-cluster&#34;&gt;Creating a IBM Cloud Kubernetes cluster&lt;/h3&gt;
&lt;p&gt;To make sure the cluster is large enough to host all the Knative and Istio
components, the recommended configuration for a cluster is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes version 1.15&lt;/li&gt;
&lt;li&gt;4 vCPU nodes with 16GB memory (&lt;code&gt;b2c.4x16&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a Kubernetes cluster on IKS with the required specifications:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud ks cluster create classic \
  --flavor b2c.4x16 \
  --name $CLUSTER_NAME \
  --zone=$CLUSTER_ZONE \
  --workers=3
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you&amp;rsquo;re starting in a fresh account with no public and private VLANs, they
are created automatically for you. If you already have VLANs configured in
your account, get them via &lt;code&gt;ibmcloud ks vlans --zone $CLUSTER_ZONE&lt;/code&gt; and
include the public/private VLAN id in the &lt;code&gt;cluster create&lt;/code&gt; command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud ks cluster create classic \
  --machine-type=b2c.4x16 \
  --name=$CLUSTER_NAME \
  --zone=$CLUSTER_ZONE \
  --workers=3 \
  --private-vlan $PRIVATE_VLAN_ID \
  --public-vlan $PUBLIC_VLAN_ID 
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait until your Kubernetes cluster is deployed:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud ks clusters | grep $CLUSTER_NAME
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It can take a while for your cluster to be deployed. Repeat the above
command until the state of your cluster is &amp;ldquo;normal&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Point &lt;code&gt;kubectl&lt;/code&gt; to the cluster:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud ks cluster config --cluster $CLUSTER_NAME
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure all nodes are up:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl get nodes
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Make sure all the nodes are in &lt;code&gt;Ready&lt;/code&gt; state. You are now ready to install
Istio into your cluster.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;ibm-cloud-block-storage-setup&#34;&gt;IBM Cloud Block Storage Setup&lt;/h2&gt;
&lt;p&gt;By default, IBM Cloud Kubernetes cluster uses &lt;a href=&#34;https://www.ibm.com/cloud/file-storage&#34;&gt;IBM Cloud File Storage&lt;/a&gt; based on NFS as the default storage class. File Storage is designed to run RWX (read-write multiple nodes) workloads with proper security built around it. Therefore, File Storage &lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-security#container&#34;&gt;does not allow &lt;code&gt;fsGroup&lt;/code&gt; securityContext&lt;/a&gt; which is needed for DEX and Kubeflow Jupyter Server.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ibm.com/cloud/block-storage&#34;&gt;IBM Cloud Block Storage&lt;/a&gt; provides a fast way to store data and
satisfy many of the Kubeflow persistent volume requirements such as &lt;code&gt;fsGroup&lt;/code&gt; out of the box and optimized RWO (read-write single node) which is used on all Kubeflow&amp;rsquo;s persistent volume claim.&lt;/p&gt;
&lt;p&gt;Therefore, we strongly recommend to set up &lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-block_storage#add_block&#34;&gt;IBM Cloud Block Storage&lt;/a&gt; as the default storage class so that you can
get the best experience from Kubeflow.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://helm.sh/docs/intro/install/&#34;&gt;Follow the instructions&lt;/a&gt; to install the Helm version 3 client on your local machine.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the IBM Cloud Helm chart repository to the cluster where you want to use the IBM Cloud Block Storage plug-in.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;helm repo add iks-charts https://icr.io/helm/iks-charts
helm repo update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the IBM Cloud Block Storage plug-in. When you install the plug-in, pre-defined block storage classes are added to your cluster.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;helm install 1.6.0 iks-charts/ibmcloud-block-storage-plugin -n kube-system
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NAME: 1.6.0
LAST DEPLOYED: Thu Feb 27 11:41:35 2020
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
NOTES:
Thank you for installing: ibmcloud-block-storage-plugin.   Your release is named: 1.6.0
...
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the installation was successful.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl get pod -n kube-system &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; grep block
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the storage classes for Block Storage were added to your cluster.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl get storageclasses | grep block
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the Block Storage as the default storageclass.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl patch storageclass ibmc-block-gold -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;metadata&amp;#34;: {&amp;#34;annotations&amp;#34;:{&amp;#34;storageclass.kubernetes.io/is-default-class&amp;#34;:&amp;#34;true&amp;#34;}}}&amp;#39;&lt;/span&gt;
kubectl patch storageclass ibmc-file-bronze -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;metadata&amp;#34;: {&amp;#34;annotations&amp;#34;:{&amp;#34;storageclass.kubernetes.io/is-default-class&amp;#34;:&amp;#34;false&amp;#34;}}}&amp;#39;&lt;/span&gt;
   
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Check the default storageclass is block storage&lt;/span&gt;
kubectl get storageclass &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; grep &lt;span style=&#34;color:#4e9a06&#34;&gt;\(&lt;/span&gt;default&lt;span style=&#34;color:#4e9a06&#34;&gt;\)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmc-block-gold (default)   ibm.io/ibmc-block   65s
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;understanding-the-kubeflow-deployment-process&#34;&gt;Understanding the Kubeflow deployment process&lt;/h2&gt;
&lt;p&gt;The deployment process is controlled by the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;build&lt;/strong&gt; - (Optional) Creates configuration files defining the various
resources in your deployment. You only need to run &lt;code&gt;kfctl build&lt;/code&gt; if you want
to edit the resources before running &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;apply&lt;/strong&gt; - Creates or updates the resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;delete&lt;/strong&gt; - Deletes the resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;app-layout&#34;&gt;App layout&lt;/h3&gt;
&lt;p&gt;Your Kubeflow application directory &lt;strong&gt;${KF_DIR}&lt;/strong&gt; contains the following files and
directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_FILE}&lt;/strong&gt; is a YAML file that defines configurations related to your
Kubeflow deployment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This file is a copy of the GitHub-based configuration YAML file that
you used when deploying Kubeflow. For example, &lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt;, kfctl creates
a local version of the configuration file, &lt;code&gt;${CONFIG_FILE}&lt;/code&gt;,
which you can further customize if necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;kustomize&lt;/strong&gt; is a directory that contains the kustomize packages for Kubeflow applications.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory is created when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can customize the Kubernetes resources (modify the manifests and run &lt;code&gt;kfctl apply&lt;/code&gt; again).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;kubeflow-installation&#34;&gt;Kubeflow installation&lt;/h2&gt;
&lt;p&gt;Run the following commands to set up and deploy Kubeflow.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the kfctl v1.0.2 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.0.2&#34;&gt;Kubeflow releases
page&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the tar ball&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -xvf kfctl_v1.0.2_&amp;lt;platform&amp;gt;.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following commands to set up and deploy Kubeflow. The code below includes an optional command to add the binary kfctl to your path. If you don’t add the binary to your path, you must use the full path to the kfctl binary each time you run it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# The following command is optional, to make kfctl binary easier to use.
export PATH=$PATH:&amp;lt;path to where kfctl was unpacked&amp;gt;

# Set KF_NAME to the name of your Kubeflow deployment. This also becomes the
# name of the directory containing your configuration.
# For example, your deployment name can be &#39;my-kubeflow&#39; or &#39;kf-test&#39;.
export KF_NAME=&amp;lt;your choice of name for the Kubeflow deployment&amp;gt;

# Set the path to the base directory where you want to store one or more 
# Kubeflow deployments. For example, /opt/.
# Then set the Kubeflow application directory for this deployment.
export BASE_DIR=&amp;lt;path to a base directory&amp;gt;
export KF_DIR=${BASE_DIR}/${KF_NAME}

# Set the configuration file to use, such as the file specified below:
export CONFIG_URI=&amp;quot;https://raw.githubusercontent.com/kubeflow/manifests/master/kfdef/kfctl_ibm.yaml&amp;quot;

# Generate and deploy Kubeflow:
mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_NAME}&lt;/strong&gt; - The name of your Kubeflow deployment.
If you want a custom deployment name, specify that name here.
For example,  &lt;code&gt;my-kubeflow&lt;/code&gt; or &lt;code&gt;kf-test&lt;/code&gt;.
The value of KF_NAME must consist of lower case alphanumeric characters or
&amp;lsquo;-&amp;rsquo;, and must start and end with an alphanumeric character.
The value of this variable cannot be greater than 25 characters. It must
contain just a name, not a directory path.
This value also becomes the name of the directory where your Kubeflow
configurations are stored, that is, the Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_DIR}&lt;/strong&gt; - The full path to your Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check the resources deployed correctly in namespace &lt;code&gt;kubeflow&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl get all -n kubeflow
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Kubeflow Dashboard. The default installation does not create an external endpoint but you can use port-forwarding to visit your cluster. Run the following command and visit http://localhost:8080.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In case you want to expose the Kubeflow Dashboard over an external IP, you can change the type of the ingress gateway. To do that, you can edit the service:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; kubectl edit -n istio-system svc/istio-ingressgateway
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From that file, replace &lt;code&gt;type: NodePort&lt;/code&gt; with &lt;code&gt;type: LoadBalancer&lt;/code&gt; and save.&lt;/p&gt;
&lt;p&gt;While the change is being applied, you can watch the service until below command prints a value under the &lt;code&gt;EXTERNAL-IP&lt;/code&gt; column:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; kubectl get -w -n istio-system svc/istio-ingressgateway
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The external IP should be accessible by visiting http://&lt;EXTERNAL-IP&gt;. Note that above installation instructions do not create any protection for the external endpoint so it will be accessible to anyone without any authentication.&lt;/p&gt;
&lt;h2 id=&#34;additional-information&#34;&gt;Additional information&lt;/h2&gt;
&lt;p&gt;You can find general information about Kubeflow configuration in the guide to &lt;a href=&#34;/docs/other-guides/kustomize/&#34;&gt;configuring Kubeflow with kfctl and kustomize&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Install Kubeflow</title>
      <link>/docs/openshift/install-kubeflow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/openshift/install-kubeflow/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to use the &lt;code&gt;kfctl&lt;/code&gt; CLI to deploy Kubeflow 0.7 on an existing OpenShift 4.2 cluster.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;h3 id=&#34;openshift-4-cluster&#34;&gt;OpenShift 4 cluster&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;You need to have access to an OpenShift 4 cluster as &lt;code&gt;cluster-admin&lt;/code&gt; to be able to deploy Kubeflow.&lt;/li&gt;
&lt;li&gt;You can use &lt;a href=&#34;https://code-ready.github.io/crc/&#34;&gt;Code Ready Containers&lt;/a&gt; (CRC) to run a local cluster, use &lt;a href=&#34;https://try.openshift.com&#34;&gt;try.openshift.com&lt;/a&gt; to create a new cluster or use an existing cluster.&lt;/li&gt;
&lt;li&gt;Install &lt;a href=&#34;https://docs.openshift.com/container-platform/4.2/cli_reference/openshift_cli/getting-started-cli.html&#34;&gt;&lt;code&gt;oc&lt;/code&gt; command-line tool&lt;/a&gt; to communicate with the cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;code-ready-containers&#34;&gt;Code Ready Containers&lt;/h4&gt;
&lt;p&gt;If you are using Code Ready Containers, you need to make sure you have enough resources configured for the VM:&lt;/p&gt;
&lt;p&gt;Recommended:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;16 GB memory
6 CPU
45 GB disk space
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Minimal:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10 GB memory
6 CPU
30 GB disk space (default for CRC)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;installing-kubeflow&#34;&gt;Installing Kubeflow&lt;/h2&gt;
&lt;p&gt;Use the following steps to install Kubeflow 0.7 on OpenShift 4.2.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Clone the [opendatahub/manifests]
(&lt;a href=&#34;https://github.com/opendatahub-io/manifests&#34;&gt;https://github.com/opendatahub-io/manifests&lt;/a&gt;) repository. This repository defaults to the &lt;code&gt;v0.7.0-branch-openshift&lt;/code&gt; branch.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/opendatahub-io/manifests.git
cd manifests
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build the deployment configuration using the OpenShift KFDef file and local downloaded manifests.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;At the time this document was written, &lt;a href=&#34;https://github.com/kubeflow/kubeflow/issues/4678&#34;&gt;Kubeflow issue #4678&lt;/a&gt; prevents downloading the manifests during a build process. Update the manifest repo URI. Copy the KFDef file to the Kubeflow application directory. And finally build the configuration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;# update the manifest repo URI
sed -i &#39;s#uri: .*#uri: &#39;$PWD&#39;#&#39; ./kfdef/kfctl_openshift.yaml

# set the Kubeflow application diretory for this deployment, for example /opt/openshift-kfdef
export KF_DIR=&amp;lt;path-to-kfdef&amp;gt;
mkdir -p ${KF_DIR}
cp ./kfdef/kfctl_openshift.yaml ${KF_DIR}
   
# build deployment configuration
cd ${KF_DIR}
kfctl build --file=kfctl_openshift.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apply the generated deployment configuration.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kfctl apply --file=kfctl_openshift.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait until all the pods are running.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ oc get pods -n kubeflow
NAME                                                           READY     STATUS             RESTARTS   AGE
argo-ui-7c584fc474-k5blx                                       1/1       Running            0          3m46s
centraldashboard-678f74d985-rblnm                              1/1       Running            0          3m41s
jupyter-web-app-deployment-57977c6965-2qznb                    1/1       Running            0          3m37s
katib-controller-fddbb4864-fdzf5                               1/1       Running            1          3m4s
katib-db-6b9b5bc446-6pbtp                                      1/1       Running            0          3m3s
katib-manager-7797db7f7c-p5ztb                                 1/1       Running            1          3m3s
katib-ui-5bdbb97475-585rp                                      1/1       Running            0          3m2s
metadata-db-c88c9bf6f-5ddbz                                    1/1       Running            0          3m30s
metadata-deployment-969879b6c-swvqf                            1/1       Running            0          3m30s
metadata-envoy-deployment-69766744b5-75t5l                     1/1       Running            0          3m29s
metadata-grpc-deployment-578956fc6d-msvj5                      1/1       Running            3          3m29s
metadata-ui-57f9b8d667-dckm4                                   1/1       Running            0          3m28s
minio-784784b9bb-bqslk                                         1/1       Running            0          2m56s
ml-pipeline-687969b966-wx6jd                                   1/1       Running            0          2m59s
ml-pipeline-ml-pipeline-visualizationserver-57997bdc64-jw6l4   1/1       Running            0          2m37s
ml-pipeline-persistenceagent-b74f6455b-z9nzw                   1/1       Running            0          2m51s
...
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The command below looks up the URL of Kubeflow user interface assigned by the OpenShift cluster. You can open the printed URL in your broser to access the Kubeflow user interface.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;oc get routes -n istio-system istio-ingressgateway -o jsonpath=&#39;http://{.spec.host}/&#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Learn about the &lt;a href=&#34;https://developers.redhat.com/blog/2020/02/10/installing-kubeflow-v0-7-on-openshift-4-2/&#34;&gt;changes made&lt;/a&gt; to Kubeflow manifests to enable deployment on OpenShift&lt;/li&gt;
&lt;li&gt;See how to &lt;a href=&#34;/docs/upgrading/upgrade/&#34;&gt;upgrade Kubeflow&lt;/a&gt; and how to
&lt;a href=&#34;/docs/pipelines/upgrade/&#34;&gt;upgrade or reinstall a Kubeflow Pipelines deployment&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;See how to &lt;a href=&#34;/docs/openshift/uninstall-kubeflow&#34;&gt;uninstall&lt;/a&gt; your Kubeflow deployment
using the CLI.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Multi-user, auth-enabled Kubeflow with kfctl_existing_arrikto</title>
      <link>/docs/started/k8s/kfctl-existing-arrikto/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/started/k8s/kfctl-existing-arrikto/</guid>
      <description>
        
        
        &lt;p&gt;If you were using the &lt;code&gt;kfctl_existing_arrikto&lt;/code&gt; configuration in Kubeflow v0.7 or earlier, you should use kfctl_istio_dex.v1.0.2.yaml in Kubeflow v1.0.2. Follow the instructions in the &lt;a href=&#34;/docs/started/k8s/kfctl-istio-dex/&#34;&gt;guide to &lt;code&gt;kfctl_istio_dex&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Multi-user, auth-enabled Kubeflow with kfctl_istio_dex</title>
      <link>/docs/started/k8s/kfctl-istio-dex/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/started/k8s/kfctl-istio-dex/</guid>
      <description>
        
        
        &lt;p&gt;Follow these instructions if you want to install Kubeflow on an existing Kubernetes cluster.&lt;/p&gt;
&lt;p&gt;This installation of Kubeflow is geared towards existing Kubernetes
clusters and does not depend on any cloud-specific feature.&lt;/p&gt;
&lt;h2 id=&#34;architecture-overview&#34;&gt;Architecture overview&lt;/h2&gt;
&lt;p&gt;In this reference architecture, we use &lt;a href=&#34;https://github.com/dexidp/dex&#34;&gt;Dex&lt;/a&gt; and
&lt;a href=&#34;https://istio.io/&#34;&gt;Istio&lt;/a&gt; for vendor-neutral authentication.&lt;/p&gt;
&lt;p&gt;This deployment works well for on-premises installations, where companies/organizations need LDAP/AD integration for multi-user authentication, and they don&amp;rsquo;t want to depend on any cloud-specific feature.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;../../kfctl_istio_dex-architecture.svg&#34; alt=&#34;kfctl_istio_dex_architecture&#34;&gt;&lt;/p&gt;
&lt;p&gt;Read the relevant &lt;a href=&#34;https://journal.arrikto.com/kubeflow-authentication-with-istio-dex-5eafdfac4782&#34;&gt;article&lt;/a&gt; for more info about this architecture.&lt;/p&gt;
&lt;h2 id=&#34;before-you-start&#34;&gt;Before you start&lt;/h2&gt;
&lt;p&gt;The instructions below assume that you have an existing Kubernetes cluster.&lt;/p&gt;
&lt;h3 id=&#34;default-storageclass-for-on-premises-deployments&#34;&gt;Default StorageClass for on-premises deployments&lt;/h3&gt;
&lt;p&gt;This Kubeflow deployment requires a default StorageClass with a &lt;a href=&#34;https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/&#34;&gt;dynamic volume provisioner&lt;/a&gt;. Verify the &lt;code&gt;provisioner&lt;/code&gt; field of your default StorageClass definition.
If you don&amp;rsquo;t have a provisioner, ensure that you have configured volume provisioning in your Kubernetes cluster appropriately as mentioned &lt;a href=&#34;#provisioning-of-persistent-volumes-in-kubernetes&#34;&gt;below&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;notes-on-the-configuration-file&#34;&gt;Notes on the configuration file&lt;/h3&gt;
&lt;p&gt;Configuring your installation with kfctl_istio_dex.v1.0.2.yaml has a few options you should consider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Disabling istio installation&lt;/strong&gt; - If your Kubernetes cluster
has an existing Istio installation you may choose to not install Istio by removing
the applications &lt;code&gt;istio-crds&lt;/code&gt; and &lt;code&gt;istio-install&lt;/code&gt; in the configuration file
kfctl_istio_dex.v1.0.2.yaml.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Istio configuration for trustworthy JWTs&lt;/strong&gt; - This configuration uses Istio version
1.3.1 with SDS enabled, which requires Kubernetes 1.13 or later.
Follow &lt;a href=&#34;https://istio.io/blog/2019/trustworthy-jwt-sds/&#34;&gt;Istio&amp;rsquo;s blog&lt;/a&gt; to add API server configurations to your Kubernetes cluster.
Ensure that the &lt;code&gt;TokenRequest&lt;/code&gt; feature flag is set to &lt;code&gt;true&lt;/code&gt; in the cluster.
For &lt;code&gt;kubeadm&lt;/code&gt; created clusters, set the API server flags in the pod manifest at &lt;code&gt;/etc/kubernetes/manifests/kube-apiserver.yaml&lt;/code&gt;.
For example, the Istio community runs their test-infrastructure with the following API server flags:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;quot;service-account-issuer&amp;quot;: &amp;quot;kubernetes.default.svc&amp;quot;
&amp;quot;service-account-signing-key-file&amp;quot;: &amp;quot;/etc/kubernetes/pki/sa.key&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Default password in static file configuration for Dex&lt;/strong&gt; - The configuration file
kfctl_istio_dex.v1.0.2.yaml contains a default
&lt;a href=&#34;https://github.com/dexidp/dex/blob/0f8c4db9f61476a8f80e60f5950992149a1cc0cb/examples/config-dev.yaml#L91-L95&#34;&gt;staticPasswords&lt;/a&gt;
user with email set to &lt;code&gt;admin@kubeflow.org&lt;/code&gt; and password
&lt;code&gt;12341234&lt;/code&gt;. You should change this configuration or replace it with a
&lt;a href=&#34;https://github.com/dexidp/dex#connectors&#34;&gt;Dex connector&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#34;prepare-environment&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;prepare-your-environment&#34;&gt;Prepare your environment&lt;/h2&gt;
&lt;p&gt;Follow these steps to download the kfctl binary for the Kubeflow CLI and set
some handy environment variables:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the kfctl v1.0.2 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.0.2&#34;&gt;Kubeflow releases
page&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the tar ball:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -xvf kfctl_&amp;lt;release tag&amp;gt;_&amp;lt;platform&amp;gt;.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create environment variables to make the deployment process easier:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Add kfctl to PATH, to make the kfctl binary easier to use.&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Use only alphanumeric characters or - in the directory name.&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;PATH&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$PATH&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;lt;path-to-kfctl&amp;gt;&amp;#34;&lt;/span&gt;

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Set the following kfctl configuration file:&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;CONFIG_URI&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_istio_dex.v1.0.2.yaml&amp;#34;&lt;/span&gt;

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Set KF_NAME to the name of your Kubeflow deployment. You also use this&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# value as directory name when creating your configuration directory.&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# For example, your deployment name can be &amp;#39;my-kubeflow&amp;#39; or &amp;#39;kf-test&amp;#39;.&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;KF_NAME&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;your choice of name &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;for&lt;/span&gt; the Kubeflow deployment&amp;gt;

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Set the path to the base directory where you want to store one or more &lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Kubeflow deployments. For example, /opt.&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Then set the Kubeflow application directory for this deployment.&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;BASE_DIR&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;path to a base directory&amp;gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;KF_DIR&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;BASE_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;/&lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KF_NAME&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_NAME}&lt;/strong&gt; - The name of your Kubeflow deployment.
If you want a custom deployment name, specify that name here.
For example,  &lt;code&gt;my-kubeflow&lt;/code&gt; or &lt;code&gt;kf-test&lt;/code&gt;.
The value of KF_NAME must consist of lower case alphanumeric characters or
&amp;lsquo;-&amp;rsquo;, and must start and end with an alphanumeric character.
The value of this variable cannot be greater than 25 characters. It must
contain just a name, not a directory path.
You also use this value as directory name when creating the directory where
your Kubeflow  configurations are stored, that is, the Kubeflow application
directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_DIR}&lt;/strong&gt; - The full path to your Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_URI}&lt;/strong&gt; - The GitHub address of the configuration YAML file that
you want to use to deploy Kubeflow. The URI used in this guide is
&lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_istio_dex.v1.0.2.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_istio_dex.v1.0.2.yaml&lt;/a&gt;.
When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt; (see the next step), kfctl creates
a local version of the configuration YAML file which you can further
customize if necessary.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#34;set-up-and-deploy&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;set-up-and-deploy-kubeflow&#34;&gt;Set up and deploy Kubeflow&lt;/h2&gt;
&lt;p&gt;To set up and deploy Kubeflow using the &lt;strong&gt;default settings&lt;/strong&gt;,
run the &lt;code&gt;kfctl apply&lt;/code&gt; command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;mkdir -p &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KF_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;cd&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KF_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Download the config file and change the default login credentials.&lt;/span&gt;
wget -O kfctl_istio_dex.yaml &lt;span style=&#34;color:#000&#34;&gt;$CONFIG_URI&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;CONFIG_FILE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KF_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;/kfctl_istio_dex.yaml

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Credentials for the default user are admin@kubeflow.org:12341234&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# To change them, please edit the dex-auth application parameters&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# inside the KfDef file.&lt;/span&gt;
vim &lt;span style=&#34;color:#000&#34;&gt;$CONFIG_FILE&lt;/span&gt;

kfctl apply -V -f &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;CONFIG_FILE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;alternatively-set-up-your-configuration-for-later-deployment&#34;&gt;Alternatively, set up your configuration for later deployment&lt;/h2&gt;
&lt;p&gt;If you want to customize your configuration before deploying Kubeflow, you can
set up your configuration files first, then edit the configuration, then
deploy Kubeflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Run the &lt;code&gt;kfctl build&lt;/code&gt; command to set up your configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl build -V -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit the configuration files, as described in the guide to
&lt;a href=&#34;/docs/other-guides/kustomize/&#34;&gt;customizing your Kubeflow deployment&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set an environment variable pointing to your local configuration file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CONFIG_FILE=${KF_DIR}/kfctl_istio_dex.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the &lt;code&gt;kfctl apply&lt;/code&gt; command to deploy Kubeflow:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kfctl apply -V -f ${CONFIG_FILE}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;accessing-kubeflow&#34;&gt;Accessing Kubeflow&lt;/h2&gt;
&lt;h3 id=&#34;log-in-as-a-static-user&#34;&gt;Log in as a static user&lt;/h3&gt;
&lt;p&gt;The default way of accessing Kubeflow is via port-forward.
This enables you to get started quickly without imposing any requirements on your environment.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Kubeflow will be available at localhost:8080&lt;/span&gt;
kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The credentials are the ones you specified in the KfDef file, or the default (&lt;code&gt;admin@kubeflow.org&lt;/code&gt;:&lt;code&gt;12341234&lt;/code&gt;).
It is highly recommended to change the default credentials.
To add static users or change the existing one, see &lt;a href=&#34;#add-static-users-for-basic-auth&#34;&gt;the relevant section&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When you&amp;rsquo;re ready, you can expose your Kubeflow deployment with a LoadBalancer Service or an Ingress.
For more information, see the &lt;a href=&#34;#expose-kubeflow&#34;&gt;expose kubeflow section&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;add-static-users-for-basic-auth&#34;&gt;Add static users for basic auth&lt;/h3&gt;
&lt;p&gt;To add users to basic auth, you just have to edit the Dex ConfigMap under the key &lt;code&gt;staticPasswords&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Download the dex config&lt;/span&gt;
kubectl get configmap dex -n auth -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.data.config\.yaml}&amp;#39;&lt;/span&gt; &amp;gt; dex-config.yaml

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Edit the dex config with extra users.&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# The password must be hashed with bcrypt with an at least 10 difficulty level.&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# You can use an online tool like: https://passwordhashing.com/BCrypt&lt;/span&gt;

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# After editing the config, update the ConfigMap&lt;/span&gt;
kubectl create configmap dex --from-file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;config.yaml&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;dex-config.yaml -n auth --dry-run -oyaml &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; kubectl apply -f -

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Restart Dex to pick up the changes in the ConfigMap&lt;/span&gt;
kubectl rollout restart deployment dex -n auth
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;log-in-with-ldap--active-directory&#34;&gt;Log in with LDAP / Active Directory&lt;/h3&gt;
&lt;p&gt;As you saw in the overview, we use &lt;a href=&#34;https://github.com/dexidp/dex&#34;&gt;Dex&lt;/a&gt; for providing user authentication.
Dex supports several authentication methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Static users, as described above&lt;/li&gt;
&lt;li&gt;LDAP / Active Directory&lt;/li&gt;
&lt;li&gt;External Identity Provider (IdP) (for example Google, LinkedIn, GitHub, &amp;hellip;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This section focuses on setting up Dex to authenticate with an existing LDAP database.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;(Optional)&lt;/strong&gt;&lt;/em&gt; If you don&amp;rsquo;t have an LDAP database, you can set one up following these instructions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Deploy a new LDAP Server as a StatefulSet. This also deploys phpLDAPadmin, a GUI for interacting with your LDAP Server.&lt;/p&gt;
 &lt;details&gt;
 &lt;summary&gt;LDAP Server Manifest&lt;/summary&gt;
 &lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap-service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kubeflow&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ClusterIP&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;clusterIP&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;None&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ports&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;port&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;389&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;selector&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;---&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;apps/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;StatefulSet&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kubeflow&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;serviceName&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap-service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;replicas&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;selector&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;matchLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;template&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;containers&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;osixia/openldap:1.2.4&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;volumeMounts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap-data&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;mountPath&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;/var/lib/ldap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap-config&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;mountPath&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;/etc/ldap/slapd.d&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ports&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;containerPort&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;389&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;openldap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;env&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;LDAP_LOG_LEVEL&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;256&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;LDAP_ORGANISATION&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Example&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;LDAP_DOMAIN&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;example.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;LDAP_ADMIN_PASSWORD&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;admin&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;LDAP_CONFIG_PASSWORD&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;config&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;LDAP_BACKEND&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;mdb&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;LDAP_TLS&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;LDAP_REPLICATION&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KEEP_EXISTING_CONFIG&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;LDAP_REMOVE_CONFIG_AFTER_SETUP&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;volumes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap-config&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;emptyDir&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;{}&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;volumeClaimTemplates&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap-data&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;accessModes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ReadWriteOnce&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;requests&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;storage&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;10Gi&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;---&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;phpldapadmin&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;phpldapadmin-service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kubeflow&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ClusterIP&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ports&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;port&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;80&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;selector&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;phpldapadmin&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;---&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;apps/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Deployment&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;phpldapadmin&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kubeflow&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;phpldapadmin&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;replicas&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;selector&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;matchLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;phpldapadmin&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;template&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;phpldapadmin&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;containers&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;phpldapadmin&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;osixia/phpldapadmin:0.8.0&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ports&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;http-server&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;containerPort&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;80&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;env&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;PHPLDAPADMIN_HTTPS&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;PHPLDAPADMIN_LDAP_HOSTS&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;value &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;#PYTHON2BASH:[{&amp;#39;ldap-service.kubeflow.svc.cluster.local&amp;#39;: [{&amp;#39;server&amp;#39;: [{&amp;#39;tls&amp;#39;: False}]},{&amp;#39;login&amp;#39;: [        {&amp;#39;bind_id&amp;#39;: &amp;#39;cn=admin,dc=example,dc=com&amp;#39;}]}]}]&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/details&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Seed the LDAP database with new entries.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl &lt;span style=&#34;color:#204a87&#34;&gt;exec&lt;/span&gt; -it -n kubeflow ldap-0 -- bash
ldapadd -x -D &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;cn=admin,dc=example,dc=com&amp;#34;&lt;/span&gt; -W
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Enter password &amp;#34;admin&amp;#34;.&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Press Ctrl+D to complete after pasting the snippet below.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;details&gt;
 &lt;summary&gt;LDAP Seed Users and Groups&lt;/summary&gt;
&lt;pre&gt;&lt;code class=&#34;language-ldif&#34; data-lang=&#34;ldif&#34;&gt;# If you used the OpenLDAP Server deployment in step 1,
# then this object already exists.
# If it doesn&#39;t, uncomment this.
#dn: dc=example,dc=com
#objectClass: dcObject
#objectClass: organization
#o: Example
#dc: example
       
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
       
dn: cn=Nick Kiliadis,ou=People,dc=example,dc=com
objectClass: person
objectClass: inetOrgPerson
givenName: Nick
sn: Kiliadis
cn: Nick Kiliadis
uid: nkili
mail: nkili@example.com
userpassword: 12341234
       
dn: cn=Robin Spanakopita,ou=People,dc=example,dc=com
objectClass: person
objectClass: inetOrgPerson
givenName: Robin
sn: Spanakopita
cn: Robin Spanakopita
uid: rspanakopita
mail: rspanakopita@example.com
userpassword: 43214321
       
# Group definitions.
       
dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: Groups
       
dn: cn=admins,ou=Groups,dc=example,dc=com
objectClass: groupOfNames
cn: admins
member: cn=Nick Kiliadis,ou=People,dc=example,dc=com
       
dn: cn=developers,ou=Groups,dc=example,dc=com
objectClass: groupOfNames
cn: developers
member: cn=Nick Kiliadis,ou=People,dc=example,dc=com
member: cn=Robin Spanakopita,ou=People,dc=example,dc=com
&lt;/code&gt;&lt;/pre&gt; &lt;/details&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To use your LDAP/AD server with Dex, you have to edit the Dex config. To edit the ConfigMap containing the Dex config, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Get the current Dex config from the corresponding Config Map.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;        kubectl get configmap dex -n auth -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.data.config\.yaml}&amp;#39;&lt;/span&gt; &amp;gt; dex-config.yaml
        &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the LDAP-specific options. Here is an example to help you out. It is configured to work with the example LDAP Server you set up previously.&lt;/p&gt;
 &lt;details&gt;
 &lt;summary&gt;Dex LDAP Config Section&lt;/summary&gt;
 &lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;connectors&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Required field for connector id.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Required field for connector name.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;LDAP&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Host and optional port of the LDAP server in the form &amp;#34;host:port&amp;#34;.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# If the port is not supplied, it will be guessed based on &amp;#34;insecureNoSSL&amp;#34;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# and &amp;#34;startTLS&amp;#34; flags. 389 for insecure or StartTLS connections, 636&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# otherwise.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;host&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ldap-service.kubeflow.svc.cluster.local:389&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Following field is required if the LDAP host is not using TLS (port 389).&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Because this option inherently leaks passwords to anyone on the same network&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# as dex, THIS OPTION MAY BE REMOVED WITHOUT WARNING IN A FUTURE RELEASE.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;insecureNoSSL&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# If a custom certificate isn&amp;#39;t provide, this option can be used to turn off&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# TLS certificate checks. As noted, it is insecure and shouldn&amp;#39;t be used outside&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# of explorative phases.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;insecureSkipVerify&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# When connecting to the server, connect using the ldap:// protocol then issue&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# a StartTLS command. If unspecified, connections will use the ldaps:// protocol&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;startTLS&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Path to a trusted root certificate file. Default: use the host&amp;#39;s root CA.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# rootCA: /etc/dex/ldap.ca&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# clientCert: /etc/dex/ldap.cert&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# clientKey: /etc/dex/ldap.key&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# A raw certificate file can also be provided inline.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# rootCAData: ( base64 encoded PEM file )&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# The DN and password for an application service account. The connector uses&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# these credentials to search for users and groups. Not required if the LDAP&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# server provides access for anonymous auth.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Please note that if the bind password contains a `$`, it has to be saved in an&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# environment variable which should be given as the value to `bindPW`.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;bindDN&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;cn=admin,dc=example,dc=com&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;bindPW&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;admin&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# The attribute to display in the provided password prompt. If unset, will&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# display &amp;#34;Username&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;usernamePrompt&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;username&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# User search maps a username and password entered by a user to a LDAP entry.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;userSearch&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# BaseDN to start the search from. It will translate to the query&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# &amp;#34;(&amp;amp;(objectClass=person)(uid=&amp;lt;username&amp;gt;))&amp;#34;.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;baseDN&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ou=People,dc=example,dc=com&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Optional filter to apply when searching the directory.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;filter&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;(objectClass=inetOrgPerson)&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# username attribute used for comparing user entries. This will be translated&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# and combined with the other filter as &amp;#34;(&amp;lt;attr&amp;gt;=&amp;lt;username&amp;gt;)&amp;#34;.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;username&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;uid&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# The following three fields are direct mappings of attributes on the user entry.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# String representation of the user.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;idAttr&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;uid&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Required. Attribute to map to Email.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;emailAttr&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;mail&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Maps to display name of users. No default value.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;nameAttr&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;givenName&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Group search queries for groups given a user entry.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;groupSearch&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# BaseDN to start the search from. It will translate to the query&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# &amp;#34;(&amp;amp;(objectClass=group)(member=&amp;lt;user uid&amp;gt;))&amp;#34;.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;baseDN&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ou=Groups,dc=example,dc=com&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Optional filter to apply when searching the directory.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;filter&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;(objectClass=groupOfNames)&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Following two fields are used to match a user to a group. It adds an additional&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# requirement to the filter that an attribute in the group must match the user&amp;#39;s&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# attribute value.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;userAttr&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;DN&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;groupAttr&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;member&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Represents group name.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;nameAttr&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;cn&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/details&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Append the LDAP config section to the dex config.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;        cat dex-config.yaml dex-config-ldap-partial.yaml &amp;gt; dex-config-final.yaml
        &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apply the new config.
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;        kubectl create configmap dex --from-file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;config.yaml&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;dex-config-final.yaml -n auth --dry-run -oyaml &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; kubectl apply -f -
        &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart the Dex deployment: &lt;code&gt;kubectl rollout restart deployment dex -n auth&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;expose-kubeflow&#34;&gt;Expose Kubeflow&lt;/h3&gt;
&lt;p&gt;While port-forward is a great way to get started, it is not a long-term, production-ready solution.
In this section, we explore the process of exposing your cluster to the outside world.&lt;/p&gt;
&lt;p&gt;NOTE: It is highly recommended to change the default credentials before exposing your Kubeflow cluster.
See &lt;a href=&#34;#add-static-users-for-basic-auth&#34;&gt;the relevant section&lt;/a&gt; for how to edit Dex static users.&lt;/p&gt;
&lt;h4 id=&#34;secure-with-https&#34;&gt;Secure with HTTPS&lt;/h4&gt;
&lt;p&gt;Since we are exposing our cluster to the outside world, it&amp;rsquo;s important to secure it with HTTPS.
Here we will configure automatic self-signed certificates.&lt;/p&gt;
&lt;p&gt;Edit the Istio Gateway Object and expose port 443 with HTTPS.
In addition, make port 80 redirect to 443:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl edit -n kubeflow gateways.networking.istio.io kubeflow-gateway&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The Gateway Spec should look like the following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;selector&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;istio&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ingressgateway&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;servers&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;hosts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;*&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;port&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;http&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;number&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;80&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;protocol&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;HTTP&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Upgrade HTTP to HTTPS&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tls&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;httpsRedirect&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;hosts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;*&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;port&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;https&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;number&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;443&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;protocol&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;HTTPS&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tls&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;mode&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;SIMPLE&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;privateKey&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;/etc/istio/ingressgateway-certs/tls.key&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;serverCertificate&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;/etc/istio/ingressgateway-certs/tls.crt&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;expose-with-a-loadbalancer&#34;&gt;Expose with a LoadBalancer&lt;/h4&gt;
&lt;p&gt;If you don&amp;rsquo;t have support for LoadBalancer on your cluster, please follow the instructions below to deploy MetalLB in Layer 2 mode. (You can read more about Layer 2 mode in the &lt;a href=&#34;https://metallb.universe.tf/configuration/#layer-2-configuration&#34;&gt;MetalLB docs&lt;/a&gt;.)&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;MetalLB deployment&lt;/summary&gt;
&lt;p&gt;&lt;strong&gt;Deploy MetalLB:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Apply the manifest:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Allocate a pool of addresses on your local network for MetalLB to use. You
need at least one address for the Istio Gateway. This example assumes
addresses &lt;code&gt;10.0.0.100-10.0.0.110&lt;/code&gt;. &lt;em&gt;You must modify these addresses based on
your environment&lt;/em&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 10.0.0.100-10.0.0.110
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Ensure that MetalLB works as expected (optional):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a dummy service:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl create service loadbalancer nginx --tcp=80:80
service/nginx created
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensure that MetalLB has allocated an IP address for the service:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl describe service nginx
...
Events:
  Type    Reason       Age   From                Message
  ----    ------       ----  ----                -------
  Normal  IPAllocated  69s   metallb-controller  Assigned IP &amp;quot;10.0.0.101&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check the corresponding MetalLB logs:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl logs -n metallb-system -l component=controller
...
{&amp;quot;caller&amp;quot;:&amp;quot;service.go:98&amp;quot;,&amp;quot;event&amp;quot;:&amp;quot;ipAllocated&amp;quot;,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.101&amp;quot;,&amp;quot;msg&amp;quot;:&amp;quot;IP address assigned by controller&amp;quot;,&amp;quot;service&amp;quot;:&amp;quot;default/nginx&amp;quot;,&amp;quot;ts&amp;quot;:&amp;quot;2019-08-09T15:12:09.376779263Z&amp;quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a pod that will be exposed with the service:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl run nginx --image nginx --restart=Never -l app=nginx
pod/nginx created
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensure that MetalLB has assigned a node to announce the allocated IP address:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl describe service nginx
...
Events:
  Type    Reason       Age   From                Message
  ----    ------       ----  ----                -------
   Normal  nodeAssigned  4s    metallb-speaker     announcing from node &amp;quot;node-2&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check the corresponding MetalLB logs:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl logs -n metallb-system -l component=speaker
...
{&amp;quot;caller&amp;quot;:&amp;quot;main.go:246&amp;quot;,&amp;quot;event&amp;quot;:&amp;quot;serviceAnnounced&amp;quot;,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.101&amp;quot;,&amp;quot;msg&amp;quot;:&amp;quot;service has IP, announcing&amp;quot;,&amp;quot;pool&amp;quot;:&amp;quot;default&amp;quot;,&amp;quot;protocol&amp;quot;:&amp;quot;layer2&amp;quot;,&amp;quot;service&amp;quot;:&amp;quot;default/nginx&amp;quot;,&amp;quot;ts&amp;quot;:&amp;quot;2019-08-09T15:14:02.433876894Z&amp;quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check that MetalLB responds to ARP requests for the allocated IP address:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;arping -I eth0 10.0.0.101
...
ARPING 10.0.0.101 from 10.0.0.204 eth0
Unicast reply from 10.0.0.101 [6A:13:5A:D2:65:CB]  2.619ms
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check the corresponding MetalLB logs:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl logs -n metallb-system -l component=speaker
...
{&amp;quot;caller&amp;quot;:&amp;quot;arp.go:102&amp;quot;,&amp;quot;interface&amp;quot;:&amp;quot;eth0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.101&amp;quot;,&amp;quot;msg&amp;quot;:&amp;quot;got ARP request for service IP, sending response&amp;quot;,&amp;quot;responseMAC&amp;quot;:&amp;quot;6a:13:5a:d2:65:cb&amp;quot;,&amp;quot;senderIP&amp;quot;:&amp;quot;10.0.0.204&amp;quot;,&amp;quot;senderMAC&amp;quot;:&amp;quot;9a:1f:7c:95:ca:dc&amp;quot;,&amp;quot;ts&amp;quot;:&amp;quot;2019-08-09T15:14:52.912056021Z&amp;quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that everything works as expected:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl http://10.0.0.101
...
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Thank you for using nginx.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
...
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Clean up:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl delete service nginx
kubectl delete pod nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/details&gt;
&lt;p&gt;To expose Kubeflow with a LoadBalancer Service, just change the type of the &lt;code&gt;istio-ingressgateway&lt;/code&gt; Service to &lt;code&gt;LoadBalancer&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl patch service -n istio-system istio-ingressgateway -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;spec&amp;#34;: {&amp;#34;type&amp;#34;: &amp;#34;LoadBalancer&amp;#34;}}&amp;#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After that, get the LoadBalancer&amp;rsquo;s IP or Hostname from its status and create the necessary certificate.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl get svc -n istio-system istio-ingressgateway -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.status.loadBalancer.ingress[0]}&amp;#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Create the Certificate with cert-manager:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;cert-manager.io/v1alpha2&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Certificate&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-ingressgateway-certs&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;commonName&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-ingressgateway.istio-system.svc&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Use ipAddresses if your LoadBalancer issues an IP&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ipAddresses&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;LoadBalancer IP&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Use dnsNames if your LoadBalancer issues a hostname (eg on AWS)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;dnsNames&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;LoadBalancer HostName&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;isCA&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;issuerRef&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ClusterIssuer&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kubeflow-self-signing-issuer&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;secretName&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-ingressgateway-certs&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;After applying the above Certificate, cert-manager will generate the TLS certificate inside the istio-ingressgateway-certs secrets.
The istio-ingressgateway-certs secret is mounted on the istio-ingressgateway deployment and used to serve HTTPS.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;code&gt;https://&amp;lt;LoadBalancer Address&amp;gt;/&lt;/code&gt; and start using Kubeflow.&lt;/p&gt;
&lt;h2 id=&#34;delete-kubeflow&#34;&gt;Delete Kubeflow&lt;/h2&gt;
&lt;p&gt;Run the following commands to delete your deployment and reclaim all resources:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#204a87&#34;&gt;cd&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KF_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# If you want to delete all the resources, run:&lt;/span&gt;
kfctl delete -f &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;CONFIG_FILE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;understanding-the-deployment-process&#34;&gt;Understanding the deployment process&lt;/h2&gt;
&lt;p&gt;The kfctl deployment process includes the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kfctl build&lt;/code&gt; - (Optional) Creates configuration files defining the various
resources in your deployment. You only need to run &lt;code&gt;kfctl build&lt;/code&gt; if you want
to edit the resources before running &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfctl apply&lt;/code&gt; - Creates or updates the resources.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfctl delete&lt;/code&gt; - Deletes the resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;application-layout&#34;&gt;Application layout&lt;/h2&gt;
&lt;p&gt;Your Kubeflow application directory &lt;strong&gt;${KF_DIR}&lt;/strong&gt; contains the following files and
directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_FILE}&lt;/strong&gt; is a YAML file that defines configurations related to your
Kubeflow deployment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This file is a copy of the GitHub-based configuration YAML file that
you used when deploying Kubeflow: &lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_istio_dex.v1.0.2.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_istio_dex.v1.0.2.yaml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt;, kfctl creates
a local version of the configuration file, &lt;code&gt;${CONFIG_FILE}&lt;/code&gt;,
which you can further customize if necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;kustomize&lt;/strong&gt; is a directory that contains the kustomize packages for Kubeflow
applications. See
&lt;a href=&#34;/docs/other-guides/kustomize/&#34;&gt;how Kubeflow uses kustomize&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory is created when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can customize the Kubernetes resources by modifying the manifests and
running &lt;code&gt;kfctl apply&lt;/code&gt; again.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We recommend that you check in the contents of your &lt;code&gt;${KF_DIR}&lt;/code&gt; directory
into source control.&lt;/p&gt;
&lt;h2 id=&#34;provisioning-of-persistent-volumes-in-kubernetes&#34;&gt;Provisioning of Persistent Volumes in Kubernetes&lt;/h2&gt;
&lt;p&gt;Note that you can skip this step if you have a dynamic volume provisioner already installed in your cluster.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t have one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can choose to create PVs manually after deployment of Kubeflow.&lt;/li&gt;
&lt;li&gt;Or install a dynamic volume provisioner like &lt;a href=&#34;https://github.com/rancher/local-path-provisioner#deployment&#34;&gt;Local Path Provisioner&lt;/a&gt;. Ensure that the StorageClass used by this provisioner is the default StorageClass.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h2&gt;
&lt;h3 id=&#34;persistent-volume-claims-are-in-pending-state&#34;&gt;Persistent Volume Claims are in Pending State&lt;/h3&gt;
&lt;p&gt;Check if PersistentVolumeClaims get &lt;code&gt;Bound&lt;/code&gt; to PersistentVolumes.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n kubeflow get pvc

&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If the PersistentVolumeClaims (PVCs) are in &lt;code&gt;Pending&lt;/code&gt; state after deployment and they are not bound to PersistentVolumes (PVs), you may have to either manually create PVs for each PVC in your Kubernetes Cluster or an alternative is to set up &lt;a href=&#34;#provisioning-of-persistent-volumes-in-kubernetes&#34;&gt;dynamic volume provisioning&lt;/a&gt; to create PVs on demand and redeploy Kubeflow after deleting existing PVCs.&lt;/p&gt;
&lt;h3 id=&#34;kubeflow-dashboard-is-not-available&#34;&gt;Kubeflow dashboard is not available&lt;/h3&gt;
&lt;p&gt;If the Kubeflow dashboard is not available at &lt;code&gt;https://&amp;lt;kubeflow address&amp;gt;&lt;/code&gt; ensure that:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;the virtual services have been created:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl get virtualservices -n kubeflow
kubectl get virtualservices -n kubeflow centraldashboard -o yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If not, then kfctl has aborted for some reason, and not completed successfully.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;OIDC auth service redirects you to Dex:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -k https://&amp;lt;kubeflow address&amp;gt;/ -v
...
&amp;lt; HTTP/2 302
&amp;lt; content-type: text/html; charset=utf-8
&amp;lt; location:
/dex/auth?client_id=kubeflow-authservice-oidc&amp;amp;redirect_uri=%2Flogin%2Foidc&amp;amp;response_type=code&amp;amp;scope=openid+profile+email+groups&amp;amp;state=vSCMnJ2D
&amp;lt; date: Fri, 09 Aug 2019 14:33:21 GMT
&amp;lt; content-length: 181
&amp;lt; x-envoy-upstream-service-time: 0
&amp;lt; server: istio-envoy
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Some additional debugging information:&lt;/p&gt;
&lt;p&gt;OIDC AuthService logs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl logs -n istio-system -l &lt;span style=&#34;color:#000&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;authservice
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dex logs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl logs -n auth -l &lt;span style=&#34;color:#000&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;dex
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Istio ingress-gateway logs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl logs -n istio-system -l &lt;span style=&#34;color:#000&#34;&gt;istio&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;ingressgateway
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Istio ingressgateway service:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl get service -n istio-system istio-ingressgateway -o yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;MetalLB logs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl logs -n metallb-system -l &lt;span style=&#34;color:#000&#34;&gt;component&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;speaker
...
&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;caller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;arp.go:102&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;interface&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;br100&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ip&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;10.0.0.100&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;got ARP request for service IP, sending response&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;responseMAC&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;62:41:bd:5f:cc:0d&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;senderIP&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;10.0.0.204&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;senderMAC&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;9a:1f:7c:95:ca:dc&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ts&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2019-07-31T13:19:19.7082836Z&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl logs -n metallb-system  -l &lt;span style=&#34;color:#000&#34;&gt;component&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;controller
...
&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;caller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;service.go:98&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;event&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ipAllocated&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ip&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;10.0.0.100&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;IP address assigned by controller&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;service&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;istio-system/istio-ingressgateway&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ts&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2019-07-31T12:17:46.234638607Z&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Please join the &lt;a href=&#34;https://kubeflow.slack.com/join/shared_invite/zt-cpr020z4-PfcAue_2nw67~iIDy7maAQ&#34;&gt;Kubeflow Slack&lt;/a&gt; to report any issues, request help, and give us feedback on this config.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Run a &lt;a href=&#34;/docs/examples/kubeflow-samples/&#34;&gt;sample machine learning workflow&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Get started with &lt;a href=&#34;/docs/pipelines/pipelines-quickstart/&#34;&gt;Kubeflow Pipelines&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Google Summer of Code</title>
      <link>/docs/about/gsoc/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/about/gsoc/</guid>
      <description>
        
        
        &lt;div&gt;
  &lt;img src=&#34;/docs/images/gsoc-icon-192.png&#34; 
    alt=&#34;The Google Summer of Code icon&#34;
    class=&#34;mt-1 mb-3 float-right img-fluid&#34;&gt;
&lt;/div&gt;
&lt;p&gt;The Kubeflow community is delighted to be part of
&lt;a href=&#34;https://summerofcode.withgoogle.com/&#34;&gt;Google Summer of Code (GSoC) 2020&lt;/a&gt;. Community
mentors look forward to working with students on their GSoC projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Top links:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://summerofcode.withgoogle.com/how-it-works/#timeline&#34;&gt;GSoC timeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/document/d/1AQDD9s8VpCf3y8OLKTBSMgDzHSjdsV_DOyL5dc-XCOQ/&#34;&gt;Kubeflow GSoC project
ideas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/document/d/1dnhvxFLV1odqpqdWdujUNNUhVPSykflLy2nLJCz-Yws/edit?usp=sharing&#34;&gt;Kubeflow template for project
proposals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;information-for-students&#34;&gt;Information for students&lt;/h2&gt;
&lt;p&gt;The GSoC student application phase is now closed and student selection is in
progress. See the
&lt;a href=&#34;https://summerofcode.withgoogle.com/how-it-works/#timeline&#34;&gt;GSoC timeline&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;re still welcome to explore Kubeflow. Kubeflow welcomes contributions
at any time, whether within or outside the framework of GSoC. See the
&lt;a href=&#34;/docs/about/community/&#34;&gt;community page&lt;/a&gt; for Slack channels, mailing lists,
meetings, and other ways to connect with the Kubeflow community.&lt;/p&gt;
&lt;p&gt;For more information about GSoC, see the
&lt;a href=&#34;https://developers.google.com/open-source/gsoc/faq&#34;&gt;GSoC docs&lt;/a&gt; and
&lt;a href=&#34;https://developers.google.com/open-source/gsoc/resources/guide&#34;&gt;guides&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;information-for-mentors&#34;&gt;Information for mentors&lt;/h2&gt;
&lt;p&gt;Thanks to all mentors who&amp;rsquo;re interested in helping a GSoC student with their
Kubeflow project.&lt;/p&gt;
&lt;p&gt;To get started:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read the &lt;a href=&#34;https://google.github.io/gsocguides/mentor/&#34;&gt;Google Summer of Code mentor
guide&lt;/a&gt; and the &lt;a href=&#34;https://developers.google.com/open-source/gsoc/help/responsibilities&#34;&gt;roles and
responsibilities&lt;/a&gt;
to understand what is expected of you over the next 6 months.&lt;/li&gt;
&lt;li&gt;Bookmark the
&lt;a href=&#34;https://summerofcode.withgoogle.com/how-it-works/#timeline&#34;&gt;GSoC timeline&lt;/a&gt;
and be prepared to take action in time for the milestones shown on the
timeline, and to help your students meet the deadlines.&lt;/li&gt;
&lt;li&gt;Watch the 5 minute YouTube video: &lt;a href=&#34;https://www.youtube.com/watch?v=3J_eBuYxcyg&#34;&gt;Being a Great GSoC
Mentor&lt;/a&gt;. The video was shot with
GSoC veteran org admins and mentors. It contains helpful information about the
program and how to participate successfully at each step in GSoC.&lt;/li&gt;
&lt;li&gt;If you&amp;rsquo;re not registered as a mentor, email
&lt;a href=&#34;mailto:kubeflow-gsoc-admin@kubeflow.org&#34;&gt;kubeflow-gsoc-admin@kubeflow.org&lt;/a&gt;
to indicate your interest in mentoring a student during GSoC.&lt;/li&gt;
&lt;li&gt;When you receive an invitation, follow the link in the email to register on the
GSoC program site.&lt;/li&gt;
&lt;li&gt;Examine the student proposals. Click &lt;strong&gt;want to mentor&lt;/strong&gt; on the proposals
that you&amp;rsquo;d like to mentor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Start chatting to students:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Join the
&lt;a href=&#34;https://kubeflow.slack.com/messages/CUF1GCJ4Q&#34;&gt;#gsoc&lt;/a&gt; channel on Kubeflow
Slack and answer students&#39; questions.&lt;/li&gt;
&lt;li&gt;Respond to students&#39; questions on the Kubeflow mentors mailing list
(&lt;code&gt;kubeflow-gsoc-mentors@kubeflow.org&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information about GSoC, see the
&lt;a href=&#34;https://developers.google.com/open-source/gsoc/faq&#34;&gt;GSoC docs&lt;/a&gt; and
&lt;a href=&#34;https://developers.google.com/open-source/gsoc/resources/guide&#34;&gt;guides&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;mailing-lists&#34;&gt;Mailing lists&lt;/h2&gt;
&lt;p&gt;These are the Kubeflow mailing lists related to GSoC:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;mailto:kubeflow-gsoc-mentors@kubeflow.org&#34;&gt;kubeflow-gsoc-mentors@kubeflow.org&lt;/a&gt;:
The mentor mailing list for Kubeflow GSoC projects.
Students can email this group to receive feedback on project proposals.
Mentors and org administrators can use this group to discuss Kubeflow GSoC
matters. Group members are Kubeflow GSoC mentors and org administrators.
Messages are visible to sender, CCs, and group members.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;mailto:kubeflow-gsoc-admin@kubeflow.org&#34;&gt;kubeflow-gsoc-admin@kubeflow.org&lt;/a&gt;:
The organization administrator mailing list for Kubeflow&amp;rsquo;s participation in
GSoC.
Students and mentors can email this group to raise Kubeflow GSoC matters with
the administrators. Group members are Kubeflow GSoC org administrators only.
Messages are visible to sender, CCs, and group members.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://groups.google.com/forum/#!forum/kubeflow-discuss&#34;&gt;kubeflow-discuss&lt;/a&gt;:
Kubeflow&amp;rsquo;s primarily mailing list and discussion group. See the
&lt;a href=&#34;/docs/about/community/&#34;&gt;community page&lt;/a&gt; for more information.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Initial cluster setup for existing cluster</title>
      <link>/docs/azure/deploy/existing-cluster/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/azure/deploy/existing-cluster/</guid>
      <description>
        
        
        &lt;h2 id=&#34;initial-setup-for-existing-cluster&#34;&gt;Initial Setup for Existing Cluster&lt;/h2&gt;
&lt;p&gt;Get the Kubeconfig file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;az aks get-credentials -n &amp;lt;NAME&amp;gt; -g &amp;lt;RESOURCE_GROUP_NAME&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From here on, please see &lt;a href=&#34;/docs/azure/deploy/install-kubeflow&#34;&gt;Install Kubeflow&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Initial cluster setup for existing cluster</title>
      <link>/docs/ibm/existing-cluster/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/ibm/existing-cluster/</guid>
      <description>
        
        
        &lt;h2 id=&#34;initial-setup-for-existing-cluster&#34;&gt;Initial Setup for Existing Cluster&lt;/h2&gt;
&lt;p&gt;Get the Kubeconfig file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmcloud ks cluster config --cluster $CLUSTER_NAME
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From here on, please see &lt;a href=&#34;/docs/ibm/install-kubeflow&#34;&gt;Install Kubeflow&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Kubeflow Versioning Policies</title>
      <link>/docs/reference/version-policy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/reference/version-policy/</guid>
      <description>
        
        
        &lt;p&gt;This page describes the Kubeflow versioning policies and provides a version
matrix for Kubeflow applications and other components.&lt;/p&gt;
&lt;h2 id=&#34;kubeflow-versioning&#34;&gt;Kubeflow versioning&lt;/h2&gt;
&lt;p&gt;Kubeflow version numbers are of the form &lt;strong&gt;vX.Y.Z&lt;/strong&gt;, where &lt;strong&gt;X&lt;/strong&gt; is the major
version, &lt;strong&gt;Y&lt;/strong&gt; is the minor version, and &lt;strong&gt;Z&lt;/strong&gt; is the patch version. The
versioning policy follows the &lt;a href=&#34;https://semver.org/&#34;&gt;Semantic Versioning&lt;/a&gt;
terminology.&lt;/p&gt;
&lt;p&gt;The version name &lt;strong&gt;vX.Y.Z&lt;/strong&gt; refers to the version (git tag) of the
&lt;a href=&#34;https://github.com/kubeflow/kubeflow/releases&#34;&gt;kfctl release&lt;/a&gt;.
If the version number includes an appendix &lt;strong&gt;-rcN&lt;/strong&gt;, where &lt;strong&gt;N&lt;/strong&gt; is a
number, the appendix indicates a &lt;em&gt;release candidate&lt;/em&gt;, which is a pre-release
version of an upcoming release.&lt;/p&gt;
&lt;p&gt;Examples of Kubeflow version numbers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;v0.7.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v0.7.0-rc8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v1.0.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v1.0.1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#34;app-versioning&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;application-versioning-and-stable-status&#34;&gt;Application versioning and stable status&lt;/h2&gt;
&lt;p&gt;Starting from the release of Kubeflow v1.0, the Kubeflow community
attributes &lt;em&gt;stable status&lt;/em&gt; to those applications and components that
meet a defined level of stability, supportability, and upgradability.&lt;/p&gt;
&lt;p&gt;When you deploy Kubeflow to a Kubernetes cluster, your deployment includes a
number of applications. Application versioning is independent of Kubeflow
versioning. An application moves to version 1.0 when the application meets
certain
&lt;a href=&#34;https://github.com/kubeflow/community/blob/master/guidelines/application_requirements.md&#34;&gt;criteria&lt;/a&gt;
in terms of stability, upgradability, and the provision of services such as
logging and monitoring.&lt;/p&gt;
&lt;p&gt;When an application moves to version 1.0, the Kubeflow community will
decide whether to mark that version of the application as &lt;em&gt;stable&lt;/em&gt; in the next
major or minor release of Kubeflow.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#34;application-matrix&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;kubeflow-application-matrix&#34;&gt;Kubeflow application matrix&lt;/h2&gt;
&lt;p&gt;The following table shows the &lt;strong&gt;status&lt;/strong&gt; (stable, beta, or alpha) of the
applications that you can deploy to your Kubernetes cluster when you deploy
Kubeflow. The applications are specified in the
&lt;a href=&#34;https://github.com/kubeflow/manifests/tree/master/kfdef&#34;&gt;manifest&lt;/a&gt; that you
use to deploy Kubeflow. The kfctl deployment tool deploys the applications
strictly according to the manifest. kfctl does not decide whether to deploy or
not deploy an application based on the application status.&lt;/p&gt;
&lt;p&gt;You can use the information below to decide which of the applications you should
deploy to your production system, and adjust the manifest accordingly.&lt;/p&gt;
&lt;p&gt;Application status indicators for Kubeflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stable&lt;/strong&gt; means that the application complies with the
&lt;a href=&#34;https://github.com/kubeflow/community/blob/master/guidelines/application_requirements.md&#34;&gt;criteria&lt;/a&gt;
to reach application version 1.0, and that the Kubeflow community has deemed
the application stable for this release of Kubeflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beta&lt;/strong&gt; means that the application is working towards a version 1.0 release
and its maintainers have communicated a timeline for satisfying the criteria
for the stable status.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alpha&lt;/strong&gt; means that the application is in the early phases of
development and/or integration into Kubeflow.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;strong&gt;application version&lt;/strong&gt; in the table reflects the application version in
the manifest at the time when Kubeflow v1.0.2 was
released. This is therefore the default version of the application that you
receive when you deploy Kubeflow v1.0.2. Some applications
may release later versions that you can choose to install into your Kubeflow
deployment. If you need a later version of a specific application, refer to the
documentation for that application.&lt;/p&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th&gt;Application&lt;/th&gt;
        &lt;th&gt;Status in Kubeflow v1.0.2&lt;/th&gt;
        &lt;th&gt;Application version in Kubeflow v1.0.2&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/components/central-dash/overview/&#34;&gt;Central 
          dashboard: Kubeflow UI&lt;/a&gt;
          (&lt;a href=&#34;https://github.com/kubeflow/kubeflow/tree/master/components/centraldashboard&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Stable&lt;/td&gt;
        &lt;td&gt;1.0.0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/components/training/chainer/&#34;&gt;Chainer operator&lt;/a&gt;
        (&lt;a href=&#34;https://github.com/kubeflow/chainer-operator&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Alpha&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/components/hyperparameter-tuning/overview/&#34;&gt;Hyperparameter
          tuning: Katib&lt;/a&gt;
          (&lt;a href=&#34;https://github.com/kubeflow/katib&#34;&gt;GitHub&lt;/a&gt;)
          &lt;/td&gt;
        &lt;td&gt;Beta&lt;/td&gt;
        &lt;td&gt;v1alpha3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/components/serving/kfserving/&#34;&gt;KFServing&lt;/a&gt;
          (&lt;a href=&#34;https://github.com/kubeflow/kfserving&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Beta&lt;/td&gt;
        &lt;td&gt;v0.2.2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/components/misc/metadata/&#34;&gt;Metadata&lt;/a&gt;
          (&lt;a href=&#34;https://github.com/kubeflow/metadata&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Beta&lt;/td&gt;
        &lt;td&gt;0.2.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/components/training/mpi/&#34;&gt;MPI training: MPI 
          operator&lt;/a&gt;
          (&lt;a href=&#34;https://github.com/kubeflow/mpi-operator&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Alpha&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/components/training/mxnet/&#34;&gt;MXNet training: MXNet 
          operator&lt;/a&gt;
          (&lt;a href=&#34;https://github.com/kubeflow/mxnet-operator&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Alpha&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/notebooks/why-use-jupyter-notebook/&#34;&gt;Notebook web
          app&lt;/a&gt;
          (&lt;a href=&#34;https://github.com/kubeflow/kubeflow/tree/master/components/jupyter-web-app&#34;&gt;GitHub&lt;/a&gt;)
        &lt;td&gt;Stable&lt;/td&gt;
        &lt;td&gt;1.0.0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/notebooks/why-use-jupyter-notebook/&#34;&gt;Notebook 
          controller&lt;/a&gt; 
          (&lt;a href=&#34;https://github.com/kubeflow/kubeflow/tree/master/components/notebook-controller&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Stable&lt;/td&gt;
        &lt;td&gt;1.0.0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/pipelines/overview/pipelines-overview/&#34;&gt;Pipelines&lt;/a&gt;
          (&lt;a href=&#34;https://github.com/kubeflow/pipelines&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Beta&lt;/td&gt;
        &lt;td&gt;0.2.0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/components/multi-tenancy/&#34;&gt;Profile 
          Controller for multi-user isolation&lt;/a&gt; 
          (&lt;a href=&#34;https://github.com/kubeflow/kubeflow/tree/master/components/profile-controller&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Stable&lt;/td&gt;
        &lt;td&gt;1.0.0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/components/training/pytorch/&#34;&gt;PyTorch training: PyTorch operator&lt;/a&gt; 
          (&lt;a href=&#34;https://github.com/kubeflow/pytorch-operator&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Stable&lt;/td&gt;
        &lt;td&gt;1.0.0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/components/serving/seldon&#34;&gt;Seldon Core Serving&lt;/a&gt; 
          (&lt;a href=&#34;https://github.com/SeldonIO/seldon-core&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Stable&lt;/td&gt;
        &lt;td&gt;1.0.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/components/training/tftraining/&#34;&gt;TensorFlow training:
          TFJob operator&lt;/a&gt;
          (&lt;a href=&#34;https://github.com/kubeflow/tf-operator&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Stable&lt;/td&gt;
        &lt;td&gt;1.0.0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;XGBoost training: XGBoost operator
        (&lt;a href=&#34;https://github.com/kubeflow/xgboost-operator&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Alpha&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a id=&#34;sdk-matrix&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;kubeflow-sdks-and-clis&#34;&gt;Kubeflow SDKs and CLIs&lt;/h2&gt;
&lt;p&gt;Alongside Kubeflow v1.0.2, you may want to use
one of the following Kubeflow SDKs and command-line interfaces
(CLIs).&lt;/p&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th&gt;SDK / CLI&lt;/th&gt;
        &lt;th&gt;Status with Kubeflow v1.0.2&lt;/th&gt;
        &lt;th&gt;SDK/CLI version&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/fairing/fairing-overview/&#34;&gt;Fairing&lt;/a&gt; 
          (&lt;a href=&#34;https://github.com/kubeflow/fairing&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Beta&lt;/td&gt;
        &lt;td&gt;0.7.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/other-guides/kustomize/&#34;&gt;kfctl&lt;/a&gt; 
          (&lt;a href=&#34;https://github.com/kubeflow/kfctl&#34;&gt;GitHub&lt;/a&gt; )
        &lt;/td&gt;
        &lt;td&gt;Stable&lt;/td&gt;
        &lt;td&gt;1.0.0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&#34;/docs/pipelines/sdk/sdk-overview/&#34;&gt;Kubeflow Pipelines SDK&lt;/a&gt; 
          (&lt;a href=&#34;https://github.com/kubeflow/pipelines&#34;&gt;GitHub&lt;/a&gt;)
        &lt;/td&gt;
        &lt;td&gt;Beta&lt;/td&gt;
        &lt;td&gt;0.2.0&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;h2 id=&#34;support-levels&#34;&gt;Support levels&lt;/h2&gt;
&lt;p&gt;The expectations for supportability and the types of support available depend
on the stable status of each application or other component.
For more information, see the &lt;a href=&#34;/docs/other-guides/support/&#34;&gt;support page&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Metadata</title>
      <link>/docs/components/metadata/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/metadata/</guid>
      <description>
        
        
        &lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
  &lt;h4 class=&#34;alert-heading&#34;&gt;Beta&lt;/h4&gt;
  This Kubeflow component has &lt;b&gt;beta&lt;/b&gt; status. See the
  &lt;a href=&#34;/docs/reference/version-policy/&#34;&gt;Kubeflow versioning policies&lt;/a&gt;.
  The Kubeflow team is interested in your   
  &lt;a href=&#34;https://github.com/kubeflow/metadata/issues&#34;&gt;feedback&lt;/a&gt;&lt;/h4&gt; 
  about the usability of the feature.
&lt;/div&gt;
&lt;p&gt;The goal of the &lt;a href=&#34;https://github.com/kubeflow/metadata&#34;&gt;Metadata&lt;/a&gt; project is to
help Kubeflow users understand and manage their machine learning (ML) workflows
by tracking and managing the metadata that the workflows produce.&lt;/p&gt;
&lt;p&gt;In this context, &lt;em&gt;metadata&lt;/em&gt; means information about executions (runs), models,
datasets, and other artifacts. &lt;em&gt;Artifacts&lt;/em&gt; are the files and objects that form
the inputs and outputs of the components in your ML workflow.&lt;/p&gt;
&lt;h2 id=&#34;installing-the-metadata-component&#34;&gt;Installing the Metadata component&lt;/h2&gt;
&lt;p&gt;Kubeflow v0.6.1 and later versions install the Metadata component by default.
You can skip this section if you are running Kubeflow v0.6.1 or later.&lt;/p&gt;
&lt;p&gt;If you want to install the latest version of the Metadata component or to
install the component as an application in your Kubernetes cluster, follow these
steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the Kubeflow manifests repository:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/kubeflow/manifests
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following commands to deploy the services of the Metadata component:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd manifests/metadata
kustomize build overlays/db | kubectl apply -n kubeflow -f -
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;using-the-metadata-sdk-to-record-metadata&#34;&gt;Using the Metadata SDK to record metadata&lt;/h2&gt;
&lt;p&gt;The Metadata project publishes a
Python SDK (&lt;a href=&#34;https://kubeflow-metadata.readthedocs.io/en/latest/&#34;&gt;API reference&lt;/a&gt;, &lt;a href=&#34;https://github.com/kubeflow/metadata/tree/master/sdk/python&#34;&gt;source&lt;/a&gt;) that you can use to record your metadata.&lt;/p&gt;
&lt;p&gt;Run the following command to install the Metadata SDK:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pip install kubeflow-metadata
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a id=&#34;demo-notebook&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;try-the-metadata-sdk-in-a-sample-jupyter-notebook&#34;&gt;Try the Metadata SDK in a sample Jupyter notebook&lt;/h3&gt;
&lt;p&gt;You can find an example of how to use the Metadata SDK in this
&lt;a href=&#34;https://github.com/kubeflow/metadata/blob/master/sdk/python/sample/demo.ipynb&#34;&gt;&lt;code&gt;demo&lt;/code&gt; notebook&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To run the notebook in your Kubeflow cluster:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Follow the guide to
&lt;a href=&#34;/docs/notebooks/setup/&#34;&gt;setting up your Jupyter notebooks in Kubeflow&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Go to the &lt;a href=&#34;https://github.com/kubeflow/metadata/blob/master/sdk/python/sample/demo.ipynb&#34;&gt;&lt;code&gt;demo&lt;/code&gt; notebook on GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Download the notebook code by opening the &lt;strong&gt;Raw&lt;/strong&gt; view of the file, then
right-clicking on the content and saving the file locally as &lt;code&gt;demo.ipynb&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Go back to your Jupyter notebook server in the Kubeflow UI. (If you&amp;rsquo;ve
moved away from the notebooks section in Kubeflow, click
&lt;strong&gt;Notebook Servers&lt;/strong&gt; in the left-hand navigation panel to get back there.)&lt;/li&gt;
&lt;li&gt;In the Jupyter notebook UI, click &lt;strong&gt;Upload&lt;/strong&gt; and follow the prompts to upload
the &lt;code&gt;demo.ipynb&lt;/code&gt; notebook.&lt;/li&gt;
&lt;li&gt;Click the notebook name (&lt;code&gt;demo.ipynb&lt;/code&gt;) to open the notebook in your Kubeflow
cluster.&lt;/li&gt;
&lt;li&gt;Run the steps in the notebook to install and use the Metadata SDK.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When you have finished running through the steps in the &lt;code&gt;demo.ipynb&lt;/code&gt; notebook,
you can view the resulting metadata on the Kubeflow UI:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Artifact Store&lt;/strong&gt; in the left-hand navigation panel on the Kubeflow
UI.&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;Artifacts&lt;/strong&gt; screen you should see the following items:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A &lt;strong&gt;model&lt;/strong&gt; metadata item with the name &lt;strong&gt;MNIST&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A &lt;strong&gt;metrics&lt;/strong&gt; metadata item with the name &lt;strong&gt;MNIST-evaluation&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A &lt;strong&gt;dataset&lt;/strong&gt; metadata item with the name &lt;strong&gt;mytable-dump&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;You can click the name of each item to view the details. See the section
below about the &lt;a href=&#34;#metadata-ui&#34;&gt;Metadata UI&lt;/a&gt; for more details.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;learn-more-about-the-metadata-sdk&#34;&gt;Learn more about the Metadata SDK&lt;/h3&gt;
&lt;p&gt;The Metadata SDK includes the following predefined types
that you can use to describe your ML workflows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kubeflow-metadata.readthedocs.io/en/latest/source/md.html#kubeflow.metadata.metadata.DataSet&#34;&gt;&lt;code&gt;DataSet&lt;/code&gt;&lt;/a&gt;
to capture metadata for a dataset that forms the input into or the output of
a component in your workflow.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubeflow-metadata.readthedocs.io/en/latest/source/md.html#kubeflow.metadata.metadata.Execution&#34;&gt;&lt;code&gt;Execution&lt;/code&gt;&lt;/a&gt;
to capture metadata for an execution (run) of your ML workflow.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubeflow-metadata.readthedocs.io/en/latest/source/md.html#kubeflow.metadata.metadata.Metrics&#34;&gt;&lt;code&gt;Metrics&lt;/code&gt;&lt;/a&gt;
to capture metadata for the metrics used to evaluate an ML model.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubeflow-metadata.readthedocs.io/en/latest/source/md.html#kubeflow.metadata.metadata.Model&#34;&gt;&lt;code&gt;Model&lt;/code&gt;&lt;/a&gt;
to capture metadata for an ML model that your workflow produces.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#34;metadata-watcher&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;using-metadata-watcher-to-record-metadata&#34;&gt;Using metadata watcher to record metadata&lt;/h2&gt;
&lt;p&gt;Besides using the Python SDK to log metadata directly, you can add your own &lt;a href=&#34;https://github.com/kubeflow/metadata/blob/master/watcher/README.md&#34;&gt;metadata watcher&lt;/a&gt; to watch Kubernetes resource changes and save the metadata into the metadata service.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#34;metadata-ui&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;tracking-artifacts-on-the-metadata-ui&#34;&gt;Tracking artifacts on the Metadata UI&lt;/h2&gt;
&lt;p&gt;You can view a list of logged artifacts and the details of each individual
artifact in the &lt;strong&gt;Artifact Store&lt;/strong&gt; on the Kubeflow UI.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Go to Kubeflow in your browser. (If you haven&amp;rsquo;t yet opened the
Kubeflow UI, find out how to &lt;a href=&#34;/docs/components/central-dash/overview/&#34;&gt;access the
central dashboard&lt;/a&gt;.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Artifact Store&lt;/strong&gt; in the left-hand navigation panel:
&lt;img src=&#34;/docs/images/metadata-ui-option.png&#34; 
alt=&#34;Metadata UI&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;strong&gt;Artifacts&lt;/strong&gt; screen opens and displays a list of items for all the
metadata events that your workflows have logged. You can click the name of
each item to view the details.&lt;/p&gt;
&lt;p&gt;The following examples show the items that appear when you run the
&lt;code&gt;demo.ipynb&lt;/code&gt; notebook described &lt;a href=&#34;#demo-notebook&#34;&gt;above&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/metadata-artifacts-list.png&#34; 
alt=&#34;A list of metadata items&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Example of &lt;strong&gt;model&lt;/strong&gt; metadata with the name &amp;ldquo;MNIST&amp;rdquo;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;img src=&amp;quot;/docs/images/metadata-model.png&amp;quot; 
  alt=&amp;quot;Model metadata for an example MNIST model&amp;quot;
  class=&amp;quot;mt-3 mb-3 border border-info rounded&amp;quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example of &lt;strong&gt;metrics&lt;/strong&gt; metadata with the name &amp;ldquo;MNIST-evaluation&amp;rdquo;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;img src=&amp;quot;/docs/images/metadata-metrics.png&amp;quot; 
  alt=&amp;quot;Metrics metadata for an evaluation of an MNIST model&amp;quot;
  class=&amp;quot;mt-3 mb-3 border border-info rounded&amp;quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example of &lt;strong&gt;dataset&lt;/strong&gt; metadata with the name &amp;ldquo;mytable-dump&amp;rdquo;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;img src=&amp;quot;/docs/images/metadata-dataset.png&amp;quot; 
  alt=&amp;quot;Dataset metadata&amp;quot;
  class=&amp;quot;mt-3 mb-3 border border-info rounded&amp;quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;grpc-backend&#34;&gt;GRPC backend&lt;/h2&gt;
&lt;p&gt;The Kubeflow metadata deploys the &lt;a href=&#34;https://github.com/google/ml-metadata/blob/master/ml_metadata/proto/metadata_store_service.proto&#34;&gt;gRPC service&lt;/a&gt; of &lt;a href=&#34;https://github.com/google/ml-metadata/blob/master/g3doc/get_started.md&#34;&gt;ML Metadata
(MLMD)&lt;/a&gt; to manage the metadata and relationships.&lt;/p&gt;
&lt;p&gt;Kubeflow Metadata SDK saves and retrieves data via the gRPC service. Similarly, you can define your own metadata types to log and view metadata for your custom artifacts. For Python examples, you can check &lt;a href=&#34;https://pypi.org/project/ml-metadata/&#34;&gt;MLMD Python client&lt;/a&gt; and Kubeflow Metadata SDK &lt;a href=&#34;https://github.com/kubeflow/metadata/blob/master/sdk/python/kubeflow/metadata/metadata.py&#34;&gt;source code&lt;/a&gt;. For Go examples, you can check the &lt;a href=&#34;https://github.com/kubeflow/metadata/blob/master/watcher/handlers/metalogger.go&#34;&gt;source code&lt;/a&gt; of the &lt;a href=&#34;#metadata-watcher&#34;&gt;metadata watcher&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Run the
&lt;a href=&#34;https://github.com/kubeflow/examples/tree/master/xgboost_synthetic&#34;&gt;xgboost-synthetic notebook&lt;/a&gt;
to build, train, and deploy an XGBoost model using Kubeflow Fairing and Kubeflow
Pipelines with synthetic data. Examine the metadata output after running
through the steps in the notebook.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Monitor Cloud IAP Setup</title>
      <link>/docs/gke/deploy/monitor-iap-setup/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/gke/deploy/monitor-iap-setup/</guid>
      <description>
        
        
        &lt;p&gt;&lt;a href=&#34;https://cloud.google.com/iap/docs/&#34;&gt;Cloud Identity-Aware Proxy (Cloud IAP)&lt;/a&gt; is
the recommended solution for accessing your Kubeflow
deployment from outside the cluster, when running Kubeflow on Google Cloud
Platform (GCP).&lt;/p&gt;
&lt;p&gt;This document is a step-by-step guide to ensuring that your IAP-secured endpoint
is available, and to debugging problems that may cause the endpoint to be
unavailable.&lt;/p&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;When deploying Kubeflow using the &lt;a href=&#34;/docs/gke/deploy/deploy-ui/&#34;&gt;deployment UI&lt;/a&gt;
or the &lt;a href=&#34;/docs/gke/deploy/deploy-cli/&#34;&gt;command-line interface&lt;/a&gt;,
you choose the authentication method you want to use. One of the options is
Cloud IAP. This document assumes that you have already deployed Kubeflow.&lt;/p&gt;
&lt;p&gt;Kubeflow uses the &lt;a href=&#34;https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs&#34;&gt;Google-managed certificate&lt;/a&gt;
to provide an SSL certificate for the Kubeflow Ingress.&lt;/p&gt;
&lt;p&gt;Cloud IAP gives you the following benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Users can log in in using their GCP accounts.&lt;/li&gt;
&lt;li&gt;You benefit from Google&amp;rsquo;s security expertise to protect your sensitive
workloads.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;monitoring-your-cloud-iap-setup&#34;&gt;Monitoring your Cloud IAP setup&lt;/h2&gt;
&lt;p&gt;Follow these instructions to monitor your Cloud IAP setup and troubleshoot any
problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Examine the
&lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/ingress/&#34;&gt;Ingress&lt;/a&gt;
and Google Cloud Build (GCB) load balancer to make sure it is available:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n istio-system describe ingress

Name:             envoy-ingress
Namespace:        kubeflow
Address:          35.244.132.160
Default backend:  default-http-backend:80 (10.20.0.10:8080)
Annotations:
...
Events:
   Type     Reason     Age                 From                     Message
   ----     ------     ----                ----                     -------
   Normal   ADD        12m                 loadbalancer-controller  kubeflow/envoy-ingress
   Warning  Translate  12m (x10 over 12m)  loadbalancer-controller  error while evaluating the ingress spec: could not find service &amp;quot;kubeflow/envoy&amp;quot;
   Warning  Translate  12m (x2 over 12m)   loadbalancer-controller  error while evaluating the ingress spec: error getting BackendConfig for port &amp;quot;8080&amp;quot; on service &amp;quot;kubeflow/envoy&amp;quot;, err: no BackendConfig for service port exists.
   Warning  Sync       12m                 loadbalancer-controller  Error during sync: Error running backend syncing routine: received errors when updating backend service: googleapi: Error 400: The resource &#39;projects/code-search-demo/global/backendServices/k8s-be-32230--bee2fc38fcd6383f&#39; is not ready, resourceNotReady
 googleapi: Error 400: The resource &#39;projects/code-search-demo/global/backendServices/k8s-be-32230--bee2fc38fcd6383f&#39; is not ready, resourceNotReady
   Normal  CREATE  11m  loadbalancer-controller  ip: 35.244.132.160
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;There should be an annotation indicating that we are using managed certificate:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;annotation:
  networking.gke.io/managed-certificates: gke-certificate
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Any problems with creating the load balancer are reported as Kubernetes
events in the results of the above &lt;code&gt;describe&lt;/code&gt; command.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If the address isn&amp;rsquo;t set then there was a problem creating the load
balancer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;CREATE&lt;/code&gt; event indicates the load balancer was successfully
created on the specified IP address.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The most common error is running out of GCP quota. To fix this problem,
you must either increase the quota for the relevant resource on your GCP
project or delete some existing resources.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that a managed certificate resource is generated:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl describe -n istio-system managedcertificate gke-certificate
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The status field should have information about the current status of the Certificate.
Eventually, certificate status should be &lt;code&gt;Active&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait for the load balancer to report the back ends as healthy:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl describe -n istio-system ingress envoy-ingress

...
Annotations:
 kubernetes.io/ingress.global-static-ip-name:  kubeflow-ip
 kubernetes.io/tls-acme:                       true
 certmanager.k8s.io/issuer:                    letsencrypt-prod
 ingress.kubernetes.io/backends:               {&amp;quot;k8s-be-31380--5e1566252944dfdb&amp;quot;:&amp;quot;HEALTHY&amp;quot;,&amp;quot;k8s-be-32133--5e1566252944dfdb&amp;quot;:&amp;quot;HEALTHY&amp;quot;}
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Both backends should be reported as healthy.
It can take several minutes for the load balancer to consider the back ends
healthy.&lt;/p&gt;
&lt;p&gt;The service with port &lt;code&gt;31380&lt;/code&gt; is the one that handles Kubeflow
traffic. (31380 is the default port of the service &lt;code&gt;istio-ingressgateway&lt;/code&gt;.)&lt;/p&gt;
&lt;p&gt;If the backend is unhealthy, check the pods in &lt;code&gt;istio-system&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kubectl get pods -n istio-system&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;istio-ingressgateway-XX&lt;/code&gt; pods should be running&lt;/li&gt;
&lt;li&gt;Check the logs of pod &lt;code&gt;backend-updater-0&lt;/code&gt;, &lt;code&gt;iap-enabler-XX&lt;/code&gt; to see if there is any error&lt;/li&gt;
&lt;li&gt;Follow the steps &lt;a href=&#34;https://www.kubeflow.org/docs/gke/troubleshooting-gke/#502-server-error&#34;&gt;here&lt;/a&gt; to check the load balancer and backend service on GCP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Try accessing Cloud IAP at the fully qualified domain name in your web
browser:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://&amp;lt;your-fully-qualified-domain-name&amp;gt;     
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you get SSL errors when you log in, this typically means that your SSL
certificate is still propagating. Wait a few minutes and try again. SSL
propagation can take up to 10 minutes.&lt;/p&gt;
&lt;p&gt;If you do not see a login prompt and you get a 404 error, the configuration
of Cloud IAP is not yet complete. Keep retrying for up to 10 minutes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you get an error &lt;code&gt;Error: redirect_uri_mismatch&lt;/code&gt; after logging in, this means the list of OAuth authorized redirect URIs does not include your domain.&lt;/p&gt;
&lt;p&gt;The full error message looks like the following example and includes the 
relevant links:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;The redirect URI in the request, https://mykubeflow.endpoints.myproject.cloud.goog/_gcp_gatekeeper/authenticate, does not match the ones authorized for the OAuth client. 	
To update the authorized redirect URIs, visit: https://console.developers.google.com/apis/credentials/oauthclient/22222222222-7meeee7a9a76jvg54j0g2lv8lrsb4l8g.apps.googleusercontent.com?project=22222222222	
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Follow the link in the error message to find the OAuth credential being used
and add the redirect URI listed in the error message to the list of 
authorized URIs. For more information, read the guide to 
&lt;a href=&#34;/docs/gke/deploy/oauth-setup/&#34;&gt;setting up OAuth for Cloud IAP&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&#34;/docs/gke/troubleshooting-gke/&#34;&gt;GCP troubleshooting guide&lt;/a&gt; for Kubeflow.&lt;/li&gt;
&lt;li&gt;Guide to &lt;a href=&#34;/docs/components/multi-tenancy/getting-started&#34;&gt;sharing cluster access&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;GCP guide to &lt;a href=&#34;https://cloud.google.com/iap/docs/&#34;&gt;Cloud IAP&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Overview of Jupyter Notebooks in Kubeflow</title>
      <link>/docs/notebooks/why-use-jupyter-notebook/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/notebooks/why-use-jupyter-notebook/</guid>
      <description>
        
        
        &lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
This Kubeflow component has &lt;b&gt;stable&lt;/b&gt; status. See the
&lt;a href=&#34;/docs/reference/version-policy/&#34;&gt;Kubeflow versioning policies&lt;/a&gt;.
&lt;/div&gt;
&lt;p&gt;There are multiple benefits of integrating Jupyter notebooks in Kubeflow for enterprise environments. These benefits include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Integrating well with the rest of the infrastructure with respect to authentication and access control.&lt;/li&gt;
&lt;li&gt;Enabling easier notebook sharing across the organization. Users can create notebook containers or pods directly in the cluster, rather than locally on their workstations. Admins can provide standard notebook images for their organization, and set up role-based access control (RBAC), Secrets and Credentials to manage which teams and individuals can access the notebooks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you bundle Jupyter notebooks in Kubeflow, you can use the Fairing library to submit training jobs using TFJob. The training job can run single node or distributed on the same Kubernetes cluster, but not inside the notebook pod itself. Submitting the job with the Fairing library makes processes like Docker containerization and pod allocation clear for data scientists.&lt;/p&gt;
&lt;p&gt;Overall, Kubeflow-hosted notebooks are better integrated with other components while providing extensibility for notebook images.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Learn more about &lt;a href=&#34;/docs/notebooks/setup/&#34;&gt;setting up notebooks&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Overview of Kubeflow Fairing</title>
      <link>/docs/fairing/fairing-overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/fairing/fairing-overview/</guid>
      <description>
        
        
        &lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
  &lt;h4 class=&#34;alert-heading&#34;&gt;Beta&lt;/h4&gt;
  This Kubeflow component has &lt;b&gt;beta&lt;/b&gt; status. See the
  &lt;a href=&#34;/docs/reference/version-policy/&#34;&gt;Kubeflow versioning policies&lt;/a&gt;.
  The Kubeflow team is interested in your   
  &lt;a href=&#34;https://github.com/kubeflow/fairing/issues&#34;&gt;feedback&lt;/a&gt;&lt;/h4&gt; 
  about the usability of the feature.
&lt;/div&gt;
&lt;p&gt;Kubeflow Fairing streamlines the process of building, training, and deploying
machine learning (ML) training jobs in a hybrid cloud environment. By using
Kubeflow Fairing and adding a few lines of code, you can run your ML training
job locally or in the cloud, directly from Python code or a Jupyter
notebook. After your training job is complete, you can use Kubeflow Fairing to
deploy your trained model as a prediction endpoint.&lt;/p&gt;
&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;/h2&gt;
&lt;p&gt;Use the following guides to get started with Kubeflow Fairing:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;To set up your development environment, follow the guide to &lt;a href=&#34;/docs/fairing/install-fairing/&#34;&gt;installing
Kubeflow Fairing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;To ensure that Kubeflow Fairing can access your Kubeflow cluster, follow
the guide to &lt;a href=&#34;/docs/fairing/configure-fairing/&#34;&gt;configuring your development environment with access
to Kubeflow&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;To learn more about how to use Kubeflow Fairing in your environment,
&lt;a href=&#34;/docs/fairing/tutorials/other-tutorials/&#34;&gt;follow the Kubeflow Fairing tutorials&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;what-is-kubeflow-fairing&#34;&gt;What is Kubeflow Fairing?&lt;/h2&gt;
&lt;p&gt;Kubeflow Fairing is a Python package that makes it easy to train and deploy ML
models on &lt;a href=&#34;/docs/about/kubeflow/&#34;&gt;Kubeflow&lt;/a&gt;. Kubeflow Fairing can also been extended to
train or deploy on other platforms. Currently, Kubeflow Fairing has been
extended to train on &lt;a href=&#34;https://cloud.google.com/ml-engine/docs/&#34;&gt;Google AI Platform&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Kubeflow Fairing packages your Jupyter notebook, Python function, or Python
file as a Docker image, then deploys and runs the training job on Kubeflow
or AI Platform. After your training job is complete, you can use Kubeflow
Fairing to deploy your trained model as a prediction endpoint on Kubeflow.&lt;/p&gt;
&lt;p&gt;The following are the goals of the &lt;a href=&#34;https://github.com/kubeflow/fairing&#34;&gt;Kubeflow Fairing project&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Easily package ML training jobs:&lt;/strong&gt; Enable ML practitioners to easily package their ML model training code, and their code&amp;rsquo;s dependencies, as a Docker image.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Easily train ML models in a hybrid cloud environment:&lt;/strong&gt; Provide a high-level API for training ML models to make it easy to run training jobs in the cloud, without needing to understand the underlying infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Streamline the process of deploying a trained model:&lt;/strong&gt; Make it easy for ML practitioners to deploy trained ML models to a hybrid cloud environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Learn how to &lt;a href=&#34;/docs/notebooks/setup/&#34;&gt;set up a Jupyter notebooks instance on your Kubeflow
cluster&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Delete using CLI</title>
      <link>/docs/gke/deploy/delete-cli/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/gke/deploy/delete-cli/</guid>
      <description>
        
        
        &lt;p&gt;This page shows you how to use the CLI to delete a Kubeflow deployment on
Google Cloud Platform (GCP).&lt;/p&gt;
&lt;h2 id=&#34;before-you-start&#34;&gt;Before you start&lt;/h2&gt;
&lt;p&gt;This guide assumes the following settings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;${KF_DIR}&lt;/code&gt; environment variable contains the path to
your Kubeflow application directory, which holds your Kubeflow configuration
files. For example, &lt;code&gt;/opt/my-kubeflow/&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export KF_DIR=&amp;lt;path to your Kubeflow application directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;${CONFIG_FILE}&lt;/code&gt; environment variable contains the path to your
Kubeflow configuration file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CONFIG_FILE=${KF_DIR}/kfctl_gcp_iap.v1.0.2.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Or:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CONFIG_FILE=${KF_DIR}/kfctl_gcp_basic_auth.v1.0.2.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For further background about the above settings, see the guide to
&lt;a href=&#34;/docs/gke/deploy/deploy-cli&#34;&gt;deploying Kubeflow with the CLI&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;deleting-your-deployment&#34;&gt;Deleting your deployment&lt;/h2&gt;
&lt;p&gt;Run the following commands to delete your deployment and reclaim all GCP
resources:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# If you want to delete all the resources, including storage:
kfctl delete -f ${CONFIG_FILE} --delete_storage

# If you want to preserve storage, which contains metadata and information
# from Kubeflow Pipelines:
kfctl delete -f ${CONFIG_FILE}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You should consider preserving storage if you may want to relaunch
Kubeflow in the future and restore the data from your
&lt;a href=&#34;/docs/pipelines/pipelines-overview/&#34;&gt;pipelines&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Docs</title>
      <link>/docs/about/docs/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/about/docs/</guid>
      <description>
        
        
        &lt;p&gt;Welcome to the Kubeflow documentation!&lt;/p&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The Kubeflow docs are published at
&lt;a href=&#34;https://www.kubeflow.org/&#34;&gt;www.kubeflow.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The source for the docs is in the
&lt;a href=&#34;https://github.com/kubeflow/website/&#34;&gt;kubeflow/website repo&lt;/a&gt; on GitHub.
We use &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; to format and generate our website, and
&lt;a href=&#34;https://www.netlify.com/&#34;&gt;Netlify&lt;/a&gt; to manage the deployment of the site.&lt;/p&gt;
&lt;h2 id=&#34;versioning&#34;&gt;Versioning&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;http://www.kubeflow.org&#34;&gt;www.kubeflow.org&lt;/a&gt; points to the &lt;strong&gt;master&lt;/strong&gt; branch of the docs. You can access
other versions by clicking the version dropdown at top right of the website
menu bar:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/version-dropdown.png&#34; 
alt=&#34;Version dropdown&#34;
style=&#34;width:30%;&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;p&gt;We create a new branch of the docs for each stable release of Kubeflow.
For example, the docs for the v0.2 stable release are on published on the
&lt;a href=&#34;https://v0-2.kubeflow.org/docs/about/kubeflow/&#34;&gt;v0.2 website&lt;/a&gt;, which
corresponds to the
&lt;a href=&#34;https://github.com/kubeflow/website/tree/v0.2-branch&#34;&gt;v0.2-branch&lt;/a&gt; on
GitHub.&lt;/p&gt;
&lt;h2 id=&#34;contributing-to-the-docs&#34;&gt;Contributing to the docs&lt;/h2&gt;
&lt;p&gt;We welcome updates to the docs! Please help us make them better. Small fixes,
typos, bug fixes, plugging gaps—all are useful.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For help with getting started, take a look at the
&lt;a href=&#34;https://github.com/kubeflow/website/blob/master/README.md&#34;&gt;README&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;For guidance on writing effective documentation, see the
&lt;a href=&#34;/docs/about/style-guide/&#34;&gt;style guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Style Guide for the Kubeflow Docs</title>
      <link>/docs/about/style-guide/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/about/style-guide/</guid>
      <description>
        
        
        &lt;p&gt;This style guide is for the
&lt;a href=&#34;https://www.kubeflow.org/docs/&#34;&gt;Kubeflow documentation&lt;/a&gt;.
The style guide helps contributors to write documentation that
readers can understand quickly and correctly. The Kubeflow docs aim for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Consistency in style and terminology, so that readers can expect certain
structures and conventions. Readers don&amp;rsquo;t have to keep re-learning how to use
the documentation or questioning whether they&amp;rsquo;ve understood something
correctly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Clear, concise writing so that readers can quickly find and understand the
information they need.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;use-standard-american-spelling&#34;&gt;Use standard American spelling&lt;/h2&gt;
&lt;p&gt;Use American spelling rather than Commonwealth or British spelling.
Refer to &lt;a href=&#34;http://www.merriam-webster.com/&#34;&gt;Merriam-Webster&amp;rsquo;s Collegiate Dictionary, Eleventh
Edition&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;use-capital-letters-sparingly&#34;&gt;Use capital letters sparingly&lt;/h2&gt;
&lt;p&gt;Some hints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Capitalize only the first letter of each heading within the page. (That is,
use sentence case.)&lt;/li&gt;
&lt;li&gt;Capitalize (almost) every word in page titles. (That is, use title case.) The
little words like &amp;ldquo;and&amp;rdquo;, &amp;ldquo;in&amp;rdquo;, etc, don&amp;rsquo;t get a capital letter.&lt;/li&gt;
&lt;li&gt;In page content, use capitals only for brand names, like Kubeflow, Kubernetes,
and so on. See more about brand names &lt;a href=&#34;#brand-names&#34;&gt;below&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t use capital letters to emphasize words.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;spell-out-abbreviations-and-acronyms-on-first-use&#34;&gt;Spell out abbreviations and acronyms on first use&lt;/h2&gt;
&lt;p&gt;Always spell out the full term for every abbreviation or acronym the first time
you use it on the page. Don&amp;rsquo;t assume people know what an abbreviation or acronym
means, even if it seems like common knowledge.&lt;/p&gt;
&lt;p&gt;Example: &amp;ldquo;To run Kubernetes locally in a virtual machine (VM)&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;use-contractions-if-you-want-to&#34;&gt;Use contractions if you want to&lt;/h2&gt;
&lt;p&gt;For example, it&amp;rsquo;s fine to write &amp;ldquo;it&amp;rsquo;s&amp;rdquo; instead of &amp;ldquo;it is&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#34;brand-names&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;use-full-correct-brand-names&#34;&gt;Use full, correct brand names&lt;/h2&gt;
&lt;p&gt;When referring to a product or brand, use the full name. Capitalize the
name as the product owners do in the product documentation. Do
not use abbreviations even if they&amp;rsquo;re in common use, unless the product owner
has sanctioned the abbreviation.&lt;/p&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th&gt;Use this&lt;/th&gt;
        &lt;th&gt;Instead of this&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;Kubeflow&lt;/td&gt;
        &lt;td&gt;kubeflow&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Kubernetes&lt;/td&gt;
        &lt;td&gt;k8s&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;ksonnet&lt;/td&gt;
        &lt;td&gt;Ksonnet&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;h2 id=&#34;be-consistent-with-punctuation&#34;&gt;Be consistent with punctuation&lt;/h2&gt;
&lt;p&gt;Use punctuation consistently within a page. For example, if you use a period
(full stop) after every item in list, then use a period on all other lists on
the page.&lt;/p&gt;
&lt;p&gt;Check the other pages if you&amp;rsquo;re unsure about a particular convention.
Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Most pages in the Kubeflow docs use a period at the end of every list item.&lt;/li&gt;
&lt;li&gt;There is no period at the end of the page subtitle and the subtitle need not
be a full sentence. (The subtitle comes from the &lt;code&gt;description&lt;/code&gt; in the front
matter of each page.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;use-active-voice-rather-than-passive-voice&#34;&gt;Use active voice rather than passive voice&lt;/h2&gt;
&lt;p&gt;Passive voice is often confusing, as it&amp;rsquo;s not clear who should perform the
action.&lt;/p&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th&gt;Use active voice&lt;/th&gt;
        &lt;th&gt;Instead of passive voice&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;You can configure Kubeflow to&lt;/td&gt;
        &lt;td&gt;Kubeflow can be configured to&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Add the directory to your path&lt;/td&gt;
        &lt;td&gt;The directory should be added to your path&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;h2 id=&#34;use-simple-present-tense&#34;&gt;Use simple present tense&lt;/h2&gt;
&lt;p&gt;Avoid future tense (&amp;ldquo;will&amp;rdquo;) and complex syntax such as conjunctive mood
(&amp;ldquo;would&amp;rdquo;, &amp;ldquo;should&amp;rdquo;).&lt;/p&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th&gt;Use simple present tense&lt;/th&gt;
        &lt;th&gt;Instead of future tense or complex syntax&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;The following command provisions a virtual machine&lt;/td&gt;
        &lt;td&gt;The following command will provision a virtual machine&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;If you add this configuration element, the system is open to
          the Internet&lt;/td&gt;
        &lt;td&gt;If you added this configuration element, the system would be open to
          the Internet&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Exception:&lt;/strong&gt; Use future tense if it&amp;rsquo;s necessary to convey the correct
meaning. This requirement is rare.&lt;/p&gt;
&lt;h2 id=&#34;address-the-audience-directly&#34;&gt;Address the audience directly&lt;/h2&gt;
&lt;p&gt;Using &amp;ldquo;we&amp;rdquo; in a sentence can be confusing, because the reader may not know
whether they&amp;rsquo;re part of the &amp;ldquo;we&amp;rdquo; you&amp;rsquo;re describing. For example, compare the
following two statements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;In this release we&amp;rsquo;ve added many new features.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;In this tutorial we build a flying saucer.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The words &amp;ldquo;the developer&amp;rdquo; or &amp;ldquo;the user&amp;rdquo; can be ambiguous. For example, if the
reader is building a product that also has users, then the reader does not
know whether you&amp;rsquo;re referring to the reader or the users of their product.&lt;/p&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th&gt;Address the reader directly&lt;/th&gt;
        &lt;th&gt;Instead of &#34;we&#34;, &#34;the user&#34;, or &#34;the developer&#34;&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;Include the directory in your path&lt;/td&gt;
        &lt;td&gt;The user must make sure that the directory is included in their path
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;In this tutorial you build a flying saucer&lt;/td&gt;
        &lt;td&gt;In this tutorial we build a flying saucer&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;h2 id=&#34;use-short-simple-sentences&#34;&gt;Use short, simple sentences&lt;/h2&gt;
&lt;p&gt;Keep sentences short. Short sentences are easier to read than long ones.
Below are some tips for writing short sentences.&lt;/p&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th colspan=&#34;2&#34;&gt;Use fewer words instead of many words that convey the same meaning&lt;/th&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;th&gt;Use this&lt;/th&gt;
        &lt;th&gt;Instead of this&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;You can use&lt;/td&gt;
        &lt;td&gt;It is also possible to use&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;You can&lt;/td&gt;
        &lt;td&gt;You are able to&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th colspan=&#34;2&#34;&gt;Split a single long sentence into two or more shorter ones&lt;/th&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;th&gt;Use this&lt;/th&gt;
        &lt;th&gt;Instead of this&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;You do not need a running GKE cluster. The deployment process
          creates a cluster for you&lt;/td&gt;
        &lt;td&gt;You do not need a running GKE cluster, because the deployment 
          process creates a cluster for you&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;div class=&#34;table-responsive&#34;&gt;
  &lt;table class=&#34;table table-bordered&#34;&gt;
    &lt;thead class=&#34;thead-light&#34;&gt;
      &lt;tr&gt;
        &lt;th colspan=&#34;2&#34;&gt;Use a list instead of a long sentence showing various options&lt;/th&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;th&gt;Use this&lt;/th&gt;
        &lt;th&gt;Instead of this&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;
          &lt;p&gt;To train a model:&lt;/p&gt;
          &lt;ol&gt;
            &lt;li&gt;Package your program in a Kubernetes container.&lt;/li&gt;
            &lt;li&gt;Upload the container to an online registry.&lt;/li&gt;
            &lt;li&gt;Submit your training job.&lt;/li&gt;
          &lt;/ol&gt;
        &lt;/td&gt;
        &lt;td&gt;To train a model, you must package your program in a Kubernetes 
          container, upload the container to an online registry, and submit your 
          training job.&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;h2 id=&#34;avoid-too-much-text-styling&#34;&gt;Avoid too much text styling&lt;/h2&gt;
&lt;p&gt;Use &lt;strong&gt;bold text&lt;/strong&gt; when referring to UI controls or other UI elements.&lt;/p&gt;
&lt;p&gt;Use &lt;code&gt;code style&lt;/code&gt; for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;filenames, directories, and paths&lt;/li&gt;
&lt;li&gt;inline code and commands&lt;/li&gt;
&lt;li&gt;object field names&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avoid using bold text or capital letters for emphasis. If a page has too much
textual highlighting it becomes confusing and even annoying.&lt;/p&gt;
&lt;h2 id=&#34;use-angle-brackets-for-placeholders&#34;&gt;Use angle brackets for placeholders&lt;/h2&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;export KUBEFLOW_USERNAME=&amp;lt;your username&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--email &amp;lt;your email address&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;style-your-images&#34;&gt;Style your images&lt;/h2&gt;
&lt;p&gt;The Kubeflow docs recognise Bootstrap classes to style images and other content.
The following code snippet shows the typical styling that makes an
image show up nicely on the page:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;img src=&amp;quot;/docs/images/my-image.png&amp;quot; 
  alt=&amp;quot;My image&amp;quot;
  class=&amp;quot;mt-3 mb-3 p-3 border border-info rounded&amp;quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To see some examples of styled images, take a look at the
&lt;a href=&#34;/docs/gke/deploy/oauth-setup/&#34;&gt;OAuth setup page&lt;/a&gt;.
To see the markup, search for &lt;code&gt;.png&lt;/code&gt; in the &lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/website/master/content/en/docs/gke/deploy/oauth-setup.md&#34;&gt;page
source&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more help, see the guide to
&lt;a href=&#34;https://getbootstrap.com/docs/4.0/content/images/&#34;&gt;Bootstrap image styling&lt;/a&gt;
and the Bootstrap utilities, such as
&lt;a href=&#34;https://getbootstrap.com/docs/4.0/utilities/borders/&#34;&gt;borders&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;a-detailed-style-guide&#34;&gt;A detailed style guide&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&#34;https://developers.google.com/style/&#34;&gt;Google Developer Documentation Style
Guide&lt;/a&gt;
contains detailed information about specific aspects of writing clear, readable,
succinct documentation for a developer audience.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Take a look at the &lt;a href=&#34;https://github.com/kubeflow/website/blob/master/README.md&#34;&gt;documentation
README&lt;/a&gt; for
guidance on contributing to the Kubeflow docs.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Delete using GCP Console</title>
      <link>/docs/gke/deploy/delete-ui/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/gke/deploy/delete-ui/</guid>
      <description>
        
        
        &lt;p&gt;This page shows you how to delete your Kubeflow deployment using Deployment
Manager in the GCP Console.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For best results you should use the
&lt;a href=&#34;/docs/gke/deploy/delete-cli/&#34;&gt;CLI to delete Kubeflow&lt;/a&gt;. Deleting with Deployment
Manager as described below can orphan some resources like
&lt;a href=&#34;https://cloud.google.com/endpoints/docs/&#34;&gt;Cloud Endpoints&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To delete your Kubeflow deployment and reclaim all related resources using the
GCP Console:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open the &lt;a href=&#34;https://console.cloud.google.com/dm/deployments&#34;&gt;Deployment Manager in the GCP
Console&lt;/a&gt; for your project.
Deployment Manager lists all the available deployments
in your project. Make sure that the selected project is the same as the one
you used for your Kubeflow deployment.
&lt;img src=&#34;/docs/images/deployments.png&#34;
alt=&#34;Deployment Manager in GCP Console&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the Kubeflow deployment with the deployment name you used at the
time of creation and click the &lt;strong&gt;Delete&lt;/strong&gt; button at the top.
&lt;img src=&#34;/docs/images/delete-deployment.png&#34;
alt=&#34;Deleting Kubeflow deployment in GCP Console&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This action should delete any running nodes in your deployment, delete service
accounts that were created for the deployment, and reclaim all resources.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Central Dashboard</title>
      <link>/docs/components/central-dash/overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/central-dash/overview/</guid>
      <description>
        
        
        &lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
This Kubeflow component has &lt;b&gt;stable&lt;/b&gt; status. See the
&lt;a href=&#34;/docs/reference/version-policy/&#34;&gt;Kubeflow versioning policies&lt;/a&gt;.
&lt;/div&gt;
&lt;p&gt;Your Kubeflow deployment includes a central dashboard that provides quick access
to the Kubeflow components deployed in your cluster. The dashboard includes the
following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Shortcuts to specific actions, a list of recent pipelines and notebooks, and
metrics, giving you an overview of your jobs and cluster in one view.&lt;/li&gt;
&lt;li&gt;A housing for the UIs of the components running in the cluster, including
&lt;strong&gt;Pipelines&lt;/strong&gt;, &lt;strong&gt;Katib&lt;/strong&gt;, &lt;strong&gt;Notebooks&lt;/strong&gt;, and more.&lt;/li&gt;
&lt;li&gt;A &lt;a href=&#34;/docs/components/central-dash/registration-flow/&#34;&gt;registration flow&lt;/a&gt; that
prompts new users to set up their namespace if necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;overview-of-kubeflow-uis&#34;&gt;Overview of Kubeflow UIs&lt;/h2&gt;
&lt;p&gt;The Kubeflow UIs include the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Home&lt;/strong&gt;, a central dashboard for navigation between the Kubeflow components.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipelines&lt;/strong&gt; for a Kubeflow Pipelines dashboard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notebook Servers&lt;/strong&gt; for Jupyter notebooks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Katib&lt;/strong&gt; for hyperparameter tuning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Artifact Store&lt;/strong&gt; for tracking of artifact metadata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manage Contributors&lt;/strong&gt; for sharing user access across namespaces in the
Kubeflow deployment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The central dashboard looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/central-ui.png&#34;
alt=&#34;Kubeflow central UI&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;accessing-the-central-dashboard&#34;&gt;Accessing the central dashboard&lt;/h2&gt;
&lt;p&gt;To access the central dashboard, you need to connect to the
&lt;a href=&#34;https://istio.io/docs/concepts/traffic-management/#gateways&#34;&gt;Istio gateway&lt;/a&gt; that
provides access to the Kubeflow
&lt;a href=&#34;https://istio.io/docs/concepts/what-is-istio/#what-is-a-service-mesh&#34;&gt;service mesh&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;How you access the Istio gateway varies depending on how you&amp;rsquo;ve configured it.&lt;/p&gt;
&lt;h2 id=&#34;url-pattern-with-google-cloud-platform-gcp&#34;&gt;URL pattern with Google Cloud Platform (GCP)&lt;/h2&gt;
&lt;p&gt;If you followed the guide to &lt;a href=&#34;/docs/gke/deploy/&#34;&gt;deploying Kubeflow on GCP&lt;/a&gt;,
the Kubeflow central UI is accessible at a URL of the following pattern:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://&amp;lt;application-name&amp;gt;.endpoints.&amp;lt;project-id&amp;gt;.cloud.goog/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The URL brings up the dashboard illustrated above.&lt;/p&gt;
&lt;p&gt;If you deploy Kubeflow with Cloud Identity-Aware Proxy (IAP), Kubeflow uses the
&lt;a href=&#34;https://letsencrypt.org/&#34;&gt;Let&amp;rsquo;s Encrypt&lt;/a&gt; service to provide an SSL certificate
for the Kubeflow UI. For troubleshooting issues with your certificate, see the
guide to
&lt;a href=&#34;/docs/gke/deploy/monitor-iap-setup/&#34;&gt;monitoring your Cloud IAP setup&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;using-kubectl-and-port-forwarding&#34;&gt;Using kubectl and port-forwarding&lt;/h2&gt;
&lt;p&gt;If you didn&amp;rsquo;t configure Kubeflow to integrate with an identity provider
then you can port-forward directly to the Istio gateway.&lt;/p&gt;
&lt;p&gt;Port-forwarding typically does not work if any of the following are true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You&amp;rsquo;ve deployed Kubeflow on GCP using the
&lt;a href=&#34;/docs/gke/deploy/deploy-ui/&#34;&gt;GCP deployment UI&lt;/a&gt; or the default settings
with the &lt;a href=&#34;/docs/gke/deploy/deploy-cli/&#34;&gt;CLI deployment&lt;/a&gt;. (If you want to
use port forwarding, you must deploy Kubeflow on an existing Kubernetes
cluster using the &lt;a href=&#34;/docs/started/k8s/kfctl-k8s-istio/&#34;&gt;&lt;code&gt;kfctl_k8s_istio&lt;/code&gt;
configuration&lt;/a&gt;.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You&amp;rsquo;ve configured the Istio ingress to only accept
HTTPS traffic on a specific domain or IP address.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You&amp;rsquo;ve configured the Istio ingress to perform an authorization check
(for example, using Cloud IAP or &lt;a href=&#34;https://github.com/dexidp/dex&#34;&gt;Dex&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can access Kubeflow via &lt;code&gt;kubectl&lt;/code&gt; and port-forwarding as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;code&gt;kubectl&lt;/code&gt; if you haven&amp;rsquo;t already done so:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you&amp;rsquo;re using Kubeflow on GCP, run the following command on the command
line: &lt;code&gt;gcloud components install kubectl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Alternatively, follow the &lt;a href=&#34;https://kubernetes.io/docs/tasks/tools/install-kubectl/&#34;&gt;&lt;code&gt;kubectl&lt;/code&gt;
installation guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the following command to set up port forwarding to the
&lt;a href=&#34;https://istio.io/docs/tasks/traffic-management/ingress/ingress-control/&#34;&gt;Istio gateway&lt;/a&gt;.&lt;/p&gt;
 &lt;pre&gt;&lt;code&gt;export NAMESPACE=istio-system
kubectl port-forward -n ${NAMESPACE} svc/istio-ingressgateway 8080:80&lt;/code&gt;&lt;/pre&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Access the central navigation dashboard at:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://localhost:8080/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Depending on how you&amp;rsquo;ve configured Kubeflow, not all UIs work behind
port-forwarding to the reverse proxy.&lt;/p&gt;
&lt;p&gt;For some web applications, you need to configure the base URL on which
the app is serving.&lt;/p&gt;
&lt;p&gt;For example, if you deployed Kubeflow with an ingress serving at
&lt;code&gt;https://example.mydomain.com&lt;/code&gt; and configured an application
to be served at the URL &lt;code&gt;https://example.mydomain.com/myapp&lt;/code&gt;, then the
app may not work when served on
&lt;code&gt;https://localhost:8080/myapp&lt;/code&gt; because the paths do not match.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Explore the &lt;a href=&#34;/docs/components/multi-tenancy/&#34;&gt;contributor management
option&lt;/a&gt; where you
can set up a single namespace for a shared deployment or configure
multi-tenancy for your Kubeflow deployment.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/notebooks/setup/&#34;&gt;Set up your Jupyter notebooks&lt;/a&gt; in Kubeflow.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Component Specification</title>
      <link>/docs/pipelines/reference/component-spec/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/pipelines/reference/component-spec/</guid>
      <description>
        
        
        &lt;p&gt;This specification describes the container component data model for Kubeflow
Pipelines. The data model is serialized to a file in YAML format for sharing.&lt;/p&gt;
&lt;p&gt;Below are the main parts of the component definition:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadata:&lt;/strong&gt; Name, description, and other metadata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interface (inputs and outputs):&lt;/strong&gt; Name, type, default value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implementation:&lt;/strong&gt; How to run the component, given the input arguments.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;example-of-a-component-specification&#34;&gt;Example of a component specification&lt;/h2&gt;
&lt;p&gt;A component specification takes the form of a YAML file, &lt;code&gt;component.yaml&lt;/code&gt;. Below
is an example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;name: xgboost4j - Train classifier
description: Trains a boosted tree ensemble classifier using xgboost4j

inputs:
- {name: Training data}
- {name: Rounds, type: Integer, default: &#39;30&#39;, help: Number of training rounds}

outputs:
- {name: Trained model, type: XGBoost model, help: Trained XGBoost model}

implementation:
  container:
    image: gcr.io/ml-pipeline/xgboost-classifier-train@sha256:b3a64d57
    command: [
      /ml/train.py,
      --train-set, {inputPath: Training data},
      --rounds,    {inputValue: Rounds},
      --out-model, {outputPath: Trained model},
    ]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;See some examples of real-world
&lt;a href=&#34;https://github.com/kubeflow/pipelines/search?q=filename%3Acomponent.yaml&amp;amp;unscoped_q=filename%3Acomponent.yaml&#34;&gt;component specifications&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;detailed-specification-componentspec&#34;&gt;Detailed specification (ComponentSpec)&lt;/h2&gt;
&lt;p&gt;This section describes the
&lt;a href=&#34;https://github.com/kubeflow/pipelines/blob/master/sdk/python/kfp/components/_structures.py&#34;&gt;ComponentSpec&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;metadata&#34;&gt;Metadata&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;name&lt;/code&gt;: Human-readable name of the component.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;description&lt;/code&gt;: Description of the component.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;metadata&lt;/code&gt;: Standard object&amp;rsquo;s metadata:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;annotations&lt;/code&gt;: A string key-value map used to add information about the component.
Currently, the annotations get translated to Kubernetes annotations when the component task is executed on Kubernetes. Current limitation: the key cannot contain more that one slash (&amp;quot;/&amp;quot;). See more information in the
&lt;a href=&#34;http://kubernetes.io/docs/user-guide/annotations&#34;&gt;Kubernetes user guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;labels&lt;/code&gt;: Deprecated. Use &lt;code&gt;annotations&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;interface&#34;&gt;Interface&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;inputs&lt;/code&gt; and &lt;code&gt;outputs&lt;/code&gt;:
Specifies the list of inputs/outputs and their properties. Each input or
output has the following properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: Human-readable name of the input/output. Name must be
unique inside the inputs or outputs section, but an output may have the
same name as an input.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;description&lt;/code&gt;: Human-readable description of the input/output.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;default&lt;/code&gt;: Specifies the default value for an input. Only
valid for inputs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;type&lt;/code&gt;: Specifies the type of input/output. The types are used
as hints for pipeline authors and can be used by the pipeline system/UI
to validate arguments and connections between components. Basic types
are &lt;strong&gt;String&lt;/strong&gt;, &lt;strong&gt;Integer&lt;/strong&gt;, &lt;strong&gt;Float&lt;/strong&gt;, and &lt;strong&gt;Bool&lt;/strong&gt;. See the full list
of &lt;a href=&#34;https://github.com/kubeflow/pipelines/blob/master/sdk/python/kfp/dsl/types.py&#34;&gt;types&lt;/a&gt;
defined by the Kubeflow Pipelines SDK.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;implementation&#34;&gt;Implementation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;implementation&lt;/code&gt;: Specifies how to execute the component instance.
There are two implementation types,  &lt;code&gt;container&lt;/code&gt; and &lt;code&gt;graph&lt;/code&gt;. (The latter is
not in scope for this document.) In future we may introduce more
implementation types like &lt;code&gt;daemon&lt;/code&gt; or &lt;code&gt;K8sResource&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;container&lt;/code&gt;:
Describes the Docker container that implements the component. A portable
subset of the Kubernetes
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#container-v1-core&#34;&gt;Container v1 spec&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;image&lt;/code&gt;: Name of the Docker image.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;command&lt;/code&gt;: Entrypoint array. The Docker image&amp;rsquo;s
ENTRYPOINT is used if this is not provided. Each item is either a
string or a placeholder. The most common placeholders are
&lt;code&gt;{inputValue: Input name}&lt;/code&gt;, &lt;code&gt;{inputPath: Input name}&lt;/code&gt; and &lt;code&gt;{outputPath: Output name}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;args&lt;/code&gt;: Arguments to the entrypoint. The Docker
image&amp;rsquo;s CMD is used if this is not provided. Each item is either a
string or a placeholder. The most common placeholders are
&lt;code&gt;{inputValue: Input name}&lt;/code&gt;, &lt;code&gt;{inputPath: Input name}&lt;/code&gt; and &lt;code&gt;{outputPath: Output name}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;env&lt;/code&gt;: Map of environment variables to set in the container.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fileOutputs&lt;/code&gt;: Legacy property that is only needed in
cases where the container always stores the output data in some
hard-coded non-configurable local location. This property specifies
a map between some outputs and local file paths where the program
writes the output data files. Only needed for components that have
hard-coded output paths. Such containers need to be fixed by
modifying the program or adding a wrapper script that copies the
output to a configurable location. Otherwise the component may be
incompatible with future storage systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can set all other Kubernetes container properties when you
use the component inside a pipeline.&lt;/p&gt;
&lt;h2 id=&#34;using-placeholders-for-command-line-arguments&#34;&gt;Using placeholders for command-line arguments&lt;/h2&gt;
&lt;h3 id=&#34;consuming-input-by-value&#34;&gt;Consuming input by value&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;{inputValue: &amp;lt;Input name&amp;gt;}&lt;/code&gt; placeholder is replaced by the value of the input argument:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In &lt;code&gt;component.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;command&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;program.py, --rounds, {inputValue: Rounds}]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the pipeline code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;task1&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;component1&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;rounds&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;150&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Resulting command-line code (showing the value of the input argument that
has replaced the placeholder):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;program.py --rounds &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;150&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;consuming-input-by-file&#34;&gt;Consuming input by file&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;{inputPath: &amp;lt;Input name&amp;gt;}&lt;/code&gt; placeholder is replaced by the (auto-generated) local file path where the system has put the argument data passed for the &amp;ldquo;Input name&amp;rdquo; input.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In &lt;code&gt;component.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;command&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;program.py, --train-set, {inputPath: training_data}]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the pipeline code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;task2&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;component1&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;training_data&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;some_task1&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;outputs&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;some_data&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Resulting command-line code (the placeholder is replaced by the
generated path):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;program.py --train-set /inputs/train_data/data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;producing-outputs&#34;&gt;Producing outputs&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;{outputPath: &amp;lt;Output name&amp;gt;}&lt;/code&gt; placeholder is replaced by a (generated) local file path where the component program is supposed to write the output data.
The parent directories of the path may or may not not exist. Your
program must handle both cases without error.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In &lt;code&gt;component.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;command&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;program.py, --out-model, {outputPath: trained_model}]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the pipeline code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;task1&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;component1&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# You can now pass `task1.outputs[&amp;#39;trained_model&amp;#39;]` to other components as argument.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Resulting command-line code (the placeholder is replaced by the
generated path):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;program.py --out-model /outputs/trained_model/data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Configuring Kubeflow with kfctl and kustomize</title>
      <link>/docs/other-guides/kustomize/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/other-guides/kustomize/</guid>
      <description>
        
        
        &lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
This Kubeflow component has &lt;b&gt;stable&lt;/b&gt; status. See the
&lt;a href=&#34;/docs/reference/version-policy/&#34;&gt;Kubeflow versioning policies&lt;/a&gt;.
&lt;/div&gt;
&lt;p&gt;Kfctl is the Kubeflow command-line interface (CLI) that you can use to
install and configure Kubeflow.&lt;/p&gt;
&lt;p&gt;Kubeflow makes use of &lt;a href=&#34;https://kustomize.io/&#34;&gt;kustomize&lt;/a&gt; to help customize YAML
configurations. With kustomize, you can traverse a Kubernetes manifest to add,
remove, or update configuration options without forking the manifest. A
&lt;em&gt;manifest&lt;/em&gt; is a YAML file containing a description of the applications that you
want to include in your Kubeflow deployment.&lt;/p&gt;
&lt;h2 id=&#34;overview-of-kfctl-and-kustomize&#34;&gt;Overview of kfctl and kustomize&lt;/h2&gt;
&lt;p&gt;This section describes how kfctl works with kustomize to set up your
Kubeflow deployment.
You need kustomize 2.0.3 or later.&lt;/p&gt;
&lt;h3 id=&#34;the-kubeflow-deployment-process&#34;&gt;The Kubeflow deployment process&lt;/h3&gt;
&lt;p&gt;Kfctl is the Kubeflow CLI that you can use to set up a Kubernetes cluster with
Kubeflow installed, or to deploy Kubeflow to an existing Kubernetes cluster.
See the &lt;a href=&#34;/docs/started/getting-started/&#34;&gt;Kubeflow getting-started guide&lt;/a&gt; for
installation instructions based on your deployment scenario.&lt;/p&gt;
&lt;p&gt;The kfctl deployment process includes the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kfctl build&lt;/code&gt; - (Optional) Creates configuration files defining the various
resources in your deployment but does not deploy Kubeflow.
You only need to run &lt;code&gt;kfctl build&lt;/code&gt; if you want
to edit the resources before running &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfctl apply&lt;/code&gt; - Creates or updates the resources.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfctl delete&lt;/code&gt; - Deletes the resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;specifying-a-configuration-file-when-initializing-your-deployment&#34;&gt;Specifying a configuration file when initializing your deployment&lt;/h3&gt;
&lt;p&gt;When you install Kubeflow, the deployment process uses one of a few possible
YAML configuration files to bootstrap the configuration. You can see all the
&lt;a href=&#34;https://github.com/kubeflow/manifests/tree/master/kfdef&#34;&gt;configuration files on
GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As an example, this guide uses the
&lt;a href=&#34;https://github.com/kubeflow/manifests/blob/master/kfdef/kfctl_k8s_istio.yaml&#34;&gt;kfctl_k8s_istio.yaml&lt;/a&gt;
configuration. For more details about this configuration, see the
&lt;a href=&#34;/docs/started/k8s/kfctl-k8s-istio/&#34;&gt;kfctl_k8s_istio deployment guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Typically, you specify the configuration file with a &lt;code&gt;-f &amp;lt;config-file&amp;gt;&lt;/code&gt;
parameter when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;. The following example
uses &lt;code&gt;kfctl build&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Set KF_NAME to the name of your Kubeflow deployment. You also use this&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# value as directory name when creating your configuration directory.&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# For example, your deployment name can be &amp;#39;my-kubeflow&amp;#39; or &amp;#39;kf-test&amp;#39;.&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;KF_NAME&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;your choice of name &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;for&lt;/span&gt; the Kubeflow deployment&amp;gt;

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Set the path to the base directory where you want to store one or more &lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Kubeflow deployments. For example, /opt/.&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Then set the Kubeflow application directory for this deployment.&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;BASE_DIR&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;path to a base directory&amp;gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;KF_DIR&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;BASE_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;/&lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KF_NAME&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Set the URI of the configuration file to use when deploying Kubeflow. &lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# For example:&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;CONFIG_URI&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml&amp;#34;&lt;/span&gt;

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Create your Kubeflow configurations:&lt;/span&gt;
mkdir -p &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KF_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;cd&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KF_DIR&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
kfctl build -V -f &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;CONFIG_URI&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kfctl has now built the configuration files in your Kubeflow application
directory (see &lt;a href=&#34;#kubeflow-directory&#34;&gt;below&lt;/a&gt;) but has not yet deployed Kubeflow.
To complete the deployment, run &lt;code&gt;kfctl apply&lt;/code&gt;. See the next section on
&lt;a href=&#34;#apply-config&#34;&gt;applying the configuration&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#34;apply-config&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;applying-the-configuration-to-your-kubeflow-cluster&#34;&gt;Applying the configuration to your Kubeflow cluster&lt;/h3&gt;
&lt;p&gt;When you first run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;, kfctl creates
a local version of the YAML configuration file,
which you can further customize if necessary.&lt;/p&gt;
&lt;p&gt;Follow these steps to apply the configurations to your Kubeflow cluster:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Set an environment variable pointing to your local configuration file.
For example, this guide uses the &lt;code&gt;kfctl_k8s_istio.v1.0.2.yaml&lt;/code&gt;
configuration. If you chose a different configuration in the previous step,
you must change the file name to reflect your configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CONFIG_FILE=${KF_DIR}/kfctl_k8s_istio.v1.0.2.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apply the configurations:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kfctl apply -V -f ${CONFIG_FILE}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a id=&#34;kubeflow-directory&#34;&gt;&lt;a/&gt;&lt;/p&gt;
&lt;h3 id=&#34;your-kubeflow-directory-layout&#34;&gt;Your Kubeflow directory layout&lt;/h3&gt;
&lt;p&gt;Your Kubeflow application directory is the directory where you choose to store
your Kubeflow configurations during deployment. This guide refers to the
directory as &lt;code&gt;${KF_DIR}&lt;/code&gt;. The directory contains the  following files and
directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_FILE}&lt;/strong&gt; is a YAML file that stores your primary Kubeflow
configuration in the form of a &lt;code&gt;KfDef&lt;/code&gt; Kubernetes object.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This file is a &lt;strong&gt;copy&lt;/strong&gt; of the &lt;a href=&#34;https://github.com/kubeflow/manifests/tree/master/kfdef&#34;&gt;GitHub-based configuration YAML
file&lt;/a&gt; that
you used when deploying Kubeflow.&lt;/li&gt;
&lt;li&gt;When you first run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;, kfctl creates
a local version of the configuration file at &lt;code&gt;${CONFIG_FILE}&lt;/code&gt;,
which you can further customize if necessary.&lt;/li&gt;
&lt;li&gt;The YAML defines each Kubeflow application as a kustomize package.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;platform-name&amp;gt;_config&lt;/strong&gt; is a directory that contains
configurations specific to your chosen platform or cloud provider.
For example, &lt;code&gt;gcp_config&lt;/code&gt; or &lt;code&gt;aws_config&lt;/code&gt;. This
directory may or may not be present, depending on your setup.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory is created when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To customize these configurations, you can modify parameters
in your &lt;code&gt;${CONFIG_FILE}&lt;/code&gt;, and then run &lt;code&gt;kfctl apply&lt;/code&gt; to apply
the configuration to your Kubeflow cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;kustomize&lt;/strong&gt; is a directory that contains Kubeflow application manifests.
That is, the directory contains the kustomize packages for the Kubeflow
applications that are included in your deployment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory is created when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To customize these configurations, you can modify parameters
in your &lt;code&gt;${CONFIG_FILE}&lt;/code&gt;, and then run &lt;code&gt;kfctl apply&lt;/code&gt; to apply
the configuration to your Kubeflow cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;how-your-configuration-is-generated&#34;&gt;How your configuration is generated&lt;/h3&gt;
&lt;p&gt;The content of your &lt;code&gt;${CONFIG_FILE}&lt;/code&gt; is the result of running kustomize
on the base and overlay &lt;code&gt;kustomization.yaml&lt;/code&gt; files in the
&lt;a href=&#34;https://github.com/kubeflow/manifests/tree/master/kfdef&#34;&gt;Kubeflow manifests&lt;/a&gt;.
The overlays reflect the configuration file that you specify when running
&lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Below are some examples of configuration files:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/blob/master/kfdef/kfctl_k8s_istio.yaml&#34;&gt;kfctl_k8s_istio.yaml&lt;/a&gt;
to install Kubeflow on an existing Kubernetes cluster.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/blob/master/kfdef/kfctl_istio_dex.yaml&#34;&gt;kfctl_istio_dex.yaml&lt;/a&gt;
to install Kubeflow on an existing Kubernetes cluster with Dex and Istio for
authentication.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/blob/master/kfdef/kfctl_gcp_iap.yaml&#34;&gt;kfctl_gcp_iap.yaml&lt;/a&gt;
to create a Google Kubernetes Engine (GKE) cluster with Kubeflow using
Cloud Identity-Aware Proxy (Cloud IAP) for access control.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The kustomize package manager in kfctl uses the information in your
&lt;code&gt;${CONFIG_FILE}&lt;/code&gt; to traverse the directories under the
&lt;a href=&#34;https://github.com/kubeflow/manifests&#34;&gt;Kubeflow manifests&lt;/a&gt; and to
create kustomize build targets based on the manifests.&lt;/p&gt;
&lt;h2 id=&#34;installing-kustomize&#34;&gt;Installing kustomize&lt;/h2&gt;
&lt;p&gt;Make sure that you have the minimum required version of kustomize:
&lt;b&gt;2.0.3&lt;/b&gt; or later.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Follow the &lt;a href=&#34;https://github.com/kubernetes-sigs/kustomize/blob/master/docs/INSTALL.md&#34;&gt;kustomize installation
guide&lt;/a&gt;,
choosing the relevant options for your operating system. For example, if
you&amp;rsquo;re on Linux:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Set some variables for the operating system:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export opsys=linux
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download the kustomize binary:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -s https://api.github.com/repos/kubernetes-sigs/kustomize/releases |\
grep browser_download |\
grep download/kustomize |\
grep -m 1 $opsys |\
cut -d &#39;&amp;quot;&#39; -f 4 |\
xargs curl -O -L
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unzip the compressed file&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar xzf ./kustomize_v*_${opsys}_amd64.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Move the binary:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ${HOME}/bin
mv kustomize ${HOME}/bin/kustomize
chmod u+x ${HOME}/bin/kustomize
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Include the &lt;code&gt;kustomize&lt;/code&gt; command in your path:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export PATH=$PATH:${HOME}/bin
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;modifying-configuration-before-deployment&#34;&gt;Modifying configuration before deployment&lt;/h2&gt;
&lt;p&gt;Kustomize lets you customize raw, template-free YAML files for multiple
purposes, leaving the original YAML untouched and usable as is.&lt;/p&gt;
&lt;p&gt;You can use the following command to build and apply kustomize directories:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kustomize build &amp;lt;kustomization_directory&amp;gt; | kubectl apply -f -
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;a href=&#34;https://github.com/kubeflow/manifests&#34;&gt;Kubeflow manifests repo&lt;/a&gt; contains
kustomize build targets, each with a &lt;code&gt;base&lt;/code&gt; directory. You can use kustomize to
generate YAML output and pass it to kfctl. You can also make
changes to the kustomize targets in the manifests repo as needed.&lt;/p&gt;
&lt;h2 id=&#34;modifying-the-configuration-of-an-existing-deployment&#34;&gt;Modifying the configuration of an existing deployment&lt;/h2&gt;
&lt;p&gt;To customize the Kubeflow resources running within the cluster, you can modify
parameters in your &lt;code&gt;${CONFIG_FILE}&lt;/code&gt; file. Then re-run &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For example, to modify settings for the Spartakus usage reporting tool within
your Kubeflow deployment:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Edit the configuration file at &lt;code&gt;${CONFIG_FILE}&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Find and replace the parameter values for &lt;code&gt;spartakus&lt;/code&gt; to suit your
requirements:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; - kustomizeConfig:
     parameters:
     - initRequired: true
         name: usageId
         value: &amp;lt;randomly-generated-id&amp;gt;
     - initRequired: true
         name: reportUsage
         value: &amp;quot;true&amp;quot;
     repoRef:
         name: manifests
         path: common/spartakus
     name: spartakus
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Regenerate and deploy your Kubeflow resources:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_FILE}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;more-examples&#34;&gt;More examples&lt;/h3&gt;
&lt;p&gt;For examples of customizing your deployment, see the guide to &lt;a href=&#34;/docs/gke/customizing-gke/&#34;&gt;customizing
Kubeflow on GKE&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For information about how Kubeflow uses Spartakus, see the guide to
&lt;a href=&#34;/docs/other-guides/usage-reporting/&#34;&gt;usage reporting&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;more-about-kustomize&#34;&gt;More about kustomize&lt;/h2&gt;
&lt;p&gt;Below are some useful kustomize terms, from the
&lt;a href=&#34;https://github.com/kubernetes-sigs/kustomize/blob/master/docs/glossary.md&#34;&gt;kustomize glossary&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;base:&lt;/strong&gt; A combination of a kustomization and resource(s). Bases can be
referred to by other kustomizations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;kustomization:&lt;/strong&gt; Refers to a &lt;code&gt;kustomization.yaml&lt;/code&gt; file, or more generally to
a directory containing the &lt;code&gt;kustomization.yaml&lt;/code&gt; file and all the relative file
paths that the YAML file references.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;overlay:&lt;/strong&gt; A combination of a kustomization that refers to a base, and a
patch. An overlay may have multiple bases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;patch:&lt;/strong&gt; General instructions to modify a resource.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;resource:&lt;/strong&gt; Any valid YAML file that defines an object with a kind and a
metadata/name field.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;target:&lt;/strong&gt; The argument to &lt;code&gt;kustomize build&lt;/code&gt;. For example,
&lt;code&gt;kustomize build $TARGET&lt;/code&gt;. A target must be a path or a URL to a
kustomization. A target can be a base or an overlay.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;variant:&lt;/strong&gt; The outcome of applying an overlay to a base.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read more about kustomize in the
&lt;a href=&#34;https://github.com/kubernetes-sigs/kustomize/tree/master/docs&#34;&gt;kustomize documentation&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Data Management</title>
      <link>/docs/other-guides/integrations/data-management/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/other-guides/integrations/data-management/</guid>
      <description>
        
        
        &lt;p&gt;Since a data scientist can build hundreds of different variants of their models,
the ability to quickly create new models and save the code and data of each
version is critical for faster iterations and better models. Automating
workflows and keeping track of the machine learning (ML) code, packages,
libraries, data sets and artifacts for each ML pipeline step requires integrated
data management systems and processes.&lt;/p&gt;
&lt;p&gt;As a leading contributor to Kubeflow, Arrikto incorporates its standards-based,
scale-out storage and data management solution (Rok) with Kubeflow. Arrikto&amp;rsquo;s
Rok presents a Kubernetes storage class to Kubeflow and natively integrates with
the critical Kubeflow components. Rok’s native integration simplifies
operations, boosts performance, and enables best practices for efficient data
versioning, packaging, and secure sharing across teams and cloud boundaries.&lt;/p&gt;
&lt;p&gt;The screenshot below shows the &lt;strong&gt;Snapshot Store&lt;/strong&gt; option that Rok adds to the
left-hand navigation panel in the Kubeflow UI:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/snapshot-store-in-kubeflow-ui.png&#34; 
alt=&#34;Accessing the snapshot store from the Kubeflow UI&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;p&gt;To experience the value of Kubeflow and Rok, follow this
&lt;a href=&#34;http://g.co/codelabs/kubeflow-minikf-kale&#34;&gt;hands-on tutorial&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Dockerfile Locations</title>
      <link>/docs/reference/images/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/reference/images/</guid>
      <description>
        
        
        &lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Image Name&lt;/th&gt;
&lt;th&gt;Dockerfile Location&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;tf_operator&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/tf-operator/tree/master/build/images/tf_operator&#34;&gt;https://github.com/kubeflow/tf-operator/tree/master/build/images/tf_operator&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ml-pipeline/persistenceagent&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/pipelines/tree/master/backend&#34;&gt;https://github.com/kubeflow/pipelines/tree/master/backend&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ml-pipeline/scheduledworkflow&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/pipelines/tree/master/backend&#34;&gt;https://github.com/kubeflow/pipelines/tree/master/backend&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ml-pipeline/frontend&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/pipelines/blob/master/frontend/Dockerfile&#34;&gt;https://github.com/kubeflow/pipelines/blob/master/frontend/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;katib/katib-controller&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/tree/master/cmd/katib-controller/v1alpha3/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/tree/master/cmd/katib-controller/v1alpha3/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;katib/katib-ui&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/tree/master/cmd/ui/v1alpha3/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/tree/master/cmd/ui/v1alpha3/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;katib/katib-db-manager&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/tree/master/cmd/db-manager/v1alpha3/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/tree/master/cmd/db-manager/v1alpha3/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;katib/suggestion-skopt&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/skopt/v1alpha3/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/skopt/v1alpha3/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;katib/suggestion-chocolate&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/chocolate/v1alpha3/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/chocolate/v1alpha3/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;katib/suggestion-hyperopt&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/hyperopt/v1alpha3/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/hyperopt/v1alpha3/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;katib/suggestion-hyperband&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/hyperband/v1alpha3/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/hyperband/v1alpha3/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;katib/suggestion-nasrl&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/nas/enas/v1alpha3/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/nas/enas/v1alpha3/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;katib/file-metricscollector&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/cmd/metricscollector/v1alpha3/file-metricscollector/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/blob/master/cmd/metricscollector/v1alpha3/file-metricscollector/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;katib/tfevent-metricscollector&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/cmd/metricscollector/v1alpha3/tfevent-metricscollector/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/blob/master/cmd/metricscollector/v1alpha3/tfevent-metricscollector/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;datawire/ambassador&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/datawire/ambassador/blob/master/builder/Dockerfile&#34;&gt;https://github.com/datawire/ambassador/blob/master/builder/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tensorflow-1.13.1-notebook-cpu&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/kubeflow/blob/master/components/tensorflow-notebook-image/Dockerfile&#34;&gt;https://github.com/kubeflow/kubeflow/blob/master/components/tensorflow-notebook-image/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jupyter-web-app&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/kubeflow/blob/master/components/jupyter-web-app/Dockerfile&#34;&gt;https://github.com/kubeflow/kubeflow/blob/master/components/jupyter-web-app/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;profile-controller&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/kubeflow/tree/master/components/profile-controller&#34;&gt;https://github.com/kubeflow/kubeflow/tree/master/components/profile-controller&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;notebook-controller&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/kubeflow/tree/master/components/notebook-controller&#34;&gt;https://github.com/kubeflow/kubeflow/tree/master/components/notebook-controller&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Events Calendar</title>
      <link>/docs/about/events/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/about/events/</guid>
      <description>
        
        
        &lt;p&gt;This is a nonexhaustive list of events (in reverse chronological order) with talks and workshops about Kubeflow.
Please edit this page and send a pull request, or raise a &lt;a href=&#34;https://github.com/kubeflow/website/issues/new&#34;&gt;GitHub issue&lt;/a&gt;, if something is missing or incorrect.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/website/wiki/Kubeflow-Doc-Sprint&#34;&gt;Kubeflow Doc Sprint - Sunnyvale and online&lt;/a&gt;,
10-12 February 2020
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Monday 10 February:&lt;/em&gt; Welcome; docs/code development; learning sessions.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Tuesday 11 February:&lt;/em&gt; Sprint updates; docs/code development; learning sessions.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Wednesday 12 February:&lt;/em&gt; Docs/code development; sprint demos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kubeflow Doc Sprint, 10-12 July 2019. See the &lt;a href=&#34;https://medium.com/kubeflow/kubeflow-doc-sprint-its-a-wrap-2683bfd4078d&#34;&gt;results of the July 2019 doc sprint&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.withgoogle.com/next/sf&#34;&gt;Google Cloud Next, San Francisco&lt;/a&gt;, 9-11 April, 2019
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.withgoogle.com/next/sf/sessions?session=MLAI206&#34;&gt;Undoing Human Bias at Scale With Kubeflow&lt;/a&gt;: John Bohannon, Michelle Casbon&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/document/d/14Jr79aWVjsJg8xq38CLVE4rKRwM1_-gHLuxhGAhrGTI/edit?usp=sharing&#34;&gt;Kubeflow Contributor Summit 2019&lt;/a&gt;, Sunnyvale, CA, 12-13 March, 2019
&lt;ul&gt;
&lt;li&gt;Kubeflow and the ML Landscape: Jeremy Lewi, Google
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1kJtBNOLHI8bR7z5OVUNDQHUBJ0K7ayGPwP4UQezMAoA/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Updates from the PM Working Group:
&lt;ul&gt;
&lt;li&gt;PMs: David Aronchick, Josh Bottum, Carmine Rimi&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/100GXMDDKDyiANSZnvIN_l5kCNxKnsOOcTLq-34-OaJc/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Building Together: Community in Kubeflow: Thea Lamkin, Google
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1kEOkz82lUJEfr0GrfDLnTN-g7D1NaFyvqBAzuEDjce8/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Experiment Tracking with Kubeflow, Lukas Biewald, Weights &amp;amp; Biases
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://drive.google.com/a/kubeflow.org/file/d/1JEqNlDHk9LKe8QZ0lUQc7X09Y_59Zyga/view?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Multi-User Environments, Kam Kasravi &amp;amp; Ebi Shahbazi, Intel
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1xoqu189q54sAXRTQ-Ise3_T09JLkQxVBGe5lCFy4UsE/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;On-Premise: Debo Dutta, Cisco
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1cphcFf4qszQ9PxcEnYkF0pkY3AZEQiEEjs8cso2KJjE/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MiniKF: Local Kubeflow: Vangelis Koukis, Arrikto
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1ftOhRZtpIF3Iy-2R6z9kwgS3KMUtIFnvA1LHHEyxsp8/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;TensorFlow 2.0 is coming!: Paige Bailey, Google
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1G0BE7tvhsCzZn2uaxEZsoosEZyXkjN8CnB3uHvLpiC0/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Overview of Kubeflow Pipelines: Pavel Dournov, Google
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1aMmJUz7r7Toky4nGZ1bItWKfXW4kSMbs4cofFeyKE-M/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Feast: Feature Storage for Machine Learning: Tim Sell, Google
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1k2FrlIyob3UfzvzxJ7B8YI9H3dx8B-LTDqCH_FESYCA/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Understanding the Earth: Machine Learning with Kubeflow Pipelines: Faustine Li, Descartes Labs
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/17KeqJmoKM0hBnXDiC5X2qEPutX08TmL56RyTWMbQ34w/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kubeflow Experiments at LinkedIn: Tengfei Mu &amp;amp; Abin Shahab, LinkedIn
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1bnVZXCvNKOtmqCIMefT2QZCQb62_P0pwBa3PBachNus/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ask the User: Data Science Panel, Moderator: Karthik Ramasamy, Google
&lt;ul&gt;
&lt;li&gt;Panelists: Ting Chen, Emmanuel Ameisen, Scott Leishman, Caio Soares, June Andrews, Jun Wang&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Simple, GPU-Accelerated Kubeflow Pipeline: Ananth Sankarasubramanian, NVIDIA
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1B84ix3Dq_s-vj0wRagKGEUtyT4Euhr_siY8oCG-zW1w/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fairing: Matt Rickard, Google
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1-gqS-HxMpMd2Kv5-W1_i2TQuXO8O_oM1mL0s-7I2-bA/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ModelDB: Open-source model management: Manasi Vartak, Verta.ai
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1ri_GrTNyz1XScbaK5f1isvSeA8pGpURg7lmghv8h4Yw/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Katib &amp;amp; Hyperparameter Tuning: Richard Liu, Google
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1QbF8naUIHHHvOWKq7uA-DP_jmADbgep8nfjOC_zG_JQ/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kubeflow User Experience: Derek Ferguson, JP Morgan Chase
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1l4zZVisA1xG1Ty1TNZrWFnDbY9YZ3tZ1TkLe6UqUSXk/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kubeflow &amp;amp; TFX: Kevin Haas, Google
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1j4q7AkMs2Pz-9VFmE2vKOanqrR7NFIkN22ObJ_7DVm0/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kubeflow inference on Knative: Dan Sun, Bloomberg
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1sApAPkBWEKBVB5KZCJKHAcsy8Ry2TLzTnGLbpN6EiXA/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Arena: Yang Che, Alibaba
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1mZ6pjgUYt0LhGN8E-zCM1FE-3GNbtK8Y6NlVeD1WahY/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://drive.google.com/a/kubeflow.org/file/d/1ITkcf9YvYDJ9KiRlNWOHmMEFOe2DeMGi/view?usp=sharing&#34;&gt;Demo video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Examples, Codelabs, &amp;amp; Demos: Michelle Casbon, Google
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1h001JfBUaAjoPTrHpbuVRNJtrO1jWRMG_YRDzL2Pd3I/edit?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://datadaytexas.com/&#34;&gt;Data Day Texas, Austin&lt;/a&gt;, 26 January, 2019
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://datadaytexas.com/2019/sessions#casbon&#34;&gt;Kubeflow: Portable Machine Learning on Kubernetes&lt;/a&gt;: Michelle Casbon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1PvtKTw3KNbGurNymDddbsmEfLQd9cOfjbpDQ-2DSNd8&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://aisea19.xnextcon.com/&#34;&gt;AI NEXTCon, Seattle&lt;/a&gt;, 23-26 January, 2019
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://aisea19.xnextcon.com/talkabstract.html#ws-kubeflow&#34;&gt;Build and Manage Machine Learning Pipelines&lt;/a&gt;: Amy Unruh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://events.linuxfoundation.org/events/kubecon-cloudnativecon-north-america-2018/&#34;&gt;KubeCon, Seattle&lt;/a&gt;, 11-13 December, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/Ha1X&#34;&gt;Deep Dive: Kubeflow BoF&lt;/a&gt;: Jeremy Lewi, David Aronchick
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1QP-o4O3ygpJ6aVfu6lAm0tMWYhAvdKE9FD6_92DB3EY&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=gbZJ8eSIfJg&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/GrTc&#34;&gt;Eco-Friendly ML: How the Kubeflow Ecosystem Bootstrapped Itself&lt;/a&gt;: Peter McKinnon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1DUJHiYxz0D6qexBbNGjtRHYi4ERTKUOZ-LvqoHVKS-E&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=EVSfp8HGJXY&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/GrVh&#34;&gt;Machine Learning as Code&lt;/a&gt;: Jay Smith
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1XKyf5fAM9KfF4OSnZREoDu-BP8JBtGkuSv72iX7CARY&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=VXrGp5er1ZE&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/GrVn&#34;&gt;Natural Language Code Search for GitHub Using Kubeflow&lt;/a&gt;: Jeremy Lewi, Hamel Husain
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://drive.google.com/open?id=1jHE61fAqZNgaDrpItk5L_tCzLU0DuL86rCz4yAKz4Ss&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=SF77UBvfTHU&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/GrWE&#34;&gt;Workshop: Kubeflow End-to-End: GitHub Issue Summarization&lt;/a&gt;: Amy Unruh, Michelle Casbon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://g.co/codelabs/kubecon18&#34;&gt;Codelab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1FFftSbWidin3opCIl4U0HVPvS6xk17izUFrrMR7e5qk&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=UdthJEq8YsA&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.meetup.com/Melbourne-Women-in-Machine-Learning-and-Data-Science/&#34;&gt;Women in ML &amp;amp; Data Science&lt;/a&gt;, Melbourne, 5 December, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.meetup.com/Melbourne-Women-in-Machine-Learning-and-Data-Science/events/256563019/&#34;&gt;Panel&lt;/a&gt;: Michelle Casbon&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://melbourne.yowconference.com.au/&#34;&gt;YOW!, Melbourne&lt;/a&gt;, 4-7 December, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://melbourne.yowconference.com.au/proposal/?id=6858&#34;&gt;Kubeflow Explained: NLP Architectures on Kubernetes&lt;/a&gt;: Michelle Casbon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1lXs1B4xrXTK2QiVe5rJSPCQjTdyMDfNVJcZCLh-Bcu0&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://brisbane.yowconference.com.au/&#34;&gt;YOW!, Brisbane&lt;/a&gt;, 3-4 December, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://brisbane.yowconference.com.au/proposal/?id=6859&#34;&gt;Kubeflow Explained: NLP Architectures on Kubernetes&lt;/a&gt;: Michelle Casbon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1lXs1B4xrXTK2QiVe5rJSPCQjTdyMDfNVJcZCLh-Bcu0&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sydney.yowconference.com.au/&#34;&gt;YOW!, Sydney&lt;/a&gt;, 27-30 November, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://sydney.yowconference.com.au/proposal/?id=6860&#34;&gt;Kubeflow Explained: NLP Architectures on Kubernetes&lt;/a&gt;: Michelle Casbon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1lXs1B4xrXTK2QiVe5rJSPCQjTdyMDfNVJcZCLh-Bcu0&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://scale.bythebay.io/&#34;&gt;Scale By the Bay, San Francisco&lt;/a&gt;, 15-17 November, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/Fndz&#34;&gt;Data Engineering &amp;amp; AI Panel&lt;/a&gt;: Michelle Casbon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=sJd9RRmgCH4&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.lfasiallc.com/events/kubecon-cloudnativecon-china-2018/&#34;&gt;KubeCon, Shanghai&lt;/a&gt;, 13-15 November, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/FzGn&#34;&gt;A Tale of Using Kubeflow to Make the Electricity Smarter in China&lt;/a&gt;: Julia Han, Xin Zhang
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://schd.ws/hosted_files/kccncchina2018english/34/XinZhang_JuliaHan_En.pdf&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=fad1FsfEvNY&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/FuLr&#34;&gt;A Year of Democratizing ML With Kubernetes &amp;amp; Kubeflow&lt;/a&gt;: David Aronchick, Fei Xue
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.google.com/presentation/d/1ZuZs32CFPYZ9ub8o8whSK8SA2333UjtAVujRnKJTf2M&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=oMlddDdJgEg&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/FuJw&#34;&gt;Benchmarking Machine Learning Workloads on Kubeflow&lt;/a&gt;: Xinyuan Huang, Ce Gao
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://schd.ws/hosted_files/kccncchina2018english/22/Kubebench_KubeCon2018China.pdf&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=9sLRIBYYUlQ&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/FuJo&#34;&gt;CI/CD Pipelines &amp;amp; Machine Learning&lt;/a&gt;: Jeremy Lewi
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://schd.ws/hosted_files/kccncchina2018english/ee/KubeConChina2018.pdf&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=EH850bIQVag&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/FuJx&#34;&gt;Kubeflow From the End User&amp;rsquo;s Perspective&lt;/a&gt;: Xin Zhang
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=x0CKhyoV9aI&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/FuJc&#34;&gt;Kubernetes CI/CD Hacks with KicroK8s and Kubeflow&lt;/a&gt;: Land Lu, Zhang Lei Mao
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://schd.ws/hosted_files/kccncchina2018english/0a/Kubecon%20Shanghai%20-%20CICD%20Hacks_Canonical.pdf&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=1SSvS2w5OMQ&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/FuJs&#34;&gt;Machine Learning on Kubernetes BoF&lt;/a&gt;: David Aronchick
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=0eEAZ7lmLbo&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sched.co/FuJt&#34;&gt;Operating Deep Learning Pipelines Anywhere Using Kubeflow&lt;/a&gt;: Jörg Schad, Gilbert Song
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://schd.ws/hosted_files/kccncchina2018english/fe/Kubecon%20KubeFlow%2B%2B%20Summit.pdf&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=63HJgZK27mU&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.eventbrite.com/e/devfest-seattle-2018-tickets-50408043816&#34;&gt;DevFest, Seattle&lt;/a&gt;, 3 November, 2018
&lt;ul&gt;
&lt;li&gt;Kubeflow End to End: Amy Unruh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dataatscale2018.splashthat.com/&#34;&gt;Data@Scale, Boston&lt;/a&gt;, 25 October, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://datascalewomensbreakfast.splashthat.com/&#34;&gt;Women in Engineering Panel&lt;/a&gt;: Michelle Casbon&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://code.fb.com/core-data/data-scale-boston/&#34;&gt;Kubeflow: Portable Machine Learning on Kubernetes&lt;/a&gt;: Michelle Casbon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.facebook.com/atscaleevents/videos/114311602829170/&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kafka-summit.org/&#34;&gt;Kafka Summit, San Francisco&lt;/a&gt;, 16-17 October, 2018&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://conferences.oreilly.com/artificial-intelligence/ai-eu&#34;&gt;O’Reilly AI Conference, London&lt;/a&gt;, 08-11 October, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://conferences.oreilly.com/artificial-intelligence/ai-eu/public/schedule/detail/69194&#34;&gt;Machine Learning at Scale with Kubernetes&lt;/a&gt;: Chris Cho&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cloud-Native, Docker, and Kubernetes Summit, Dallas, 12 September, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.eventbrite.com/e/kubernetes-classes-at-cloud-native-docker-k8s-summit-tickets-44954443952&#34;&gt;Deploying Machine Learning Workloads in Kubernetes clusters that support GPUs&lt;/a&gt;: Michael Iatrou&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://conferences.oreilly.com/strata/strata-ny&#34;&gt;O’Reilly Strata Data, New York&lt;/a&gt;, 11-13 September, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://conferences.oreilly.com/strata/strata-ny/public/schedule/detail/69362&#34;&gt;From Training to Serving: Deploying TensorFlow Models with Kubernetes&lt;/a&gt;: Brian Foo, Holden Karau, Jay Smith&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://conferences.oreilly.com/strata/strata-ny/public/schedule/detail/69041&#34;&gt;Kubeflow Explained: Portable Machine Learning on Kubernetes&lt;/a&gt;: Michelle Casbon&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://conferences.oreilly.com/artificial-intelligence/ai-ca&#34;&gt;O&amp;rsquo;Reilly AI Conference, San Francisco&lt;/a&gt;, 4-7 September, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://conferences.oreilly.com/artificial-intelligence/ai-ca/public/schedule/topic/2899&#34;&gt;TensorFlow Days: Kubeflow: Portable Machine Learning on Kubernetes&lt;/a&gt;: Michelle Casbon&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://events.linuxfoundation.org/events/open-source-summit-north-america-2018/&#34;&gt;Open Source Summit, Vancouver&lt;/a&gt;, 29-31 August, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://events.linuxfoundation.org/events/open-source-summit-north-america-2018/program/schedule/&#34;&gt;Elastic AI Pipeline with Kubeflow for Intelligent SKU Management in a Large Chinese Retailer&lt;/a&gt;: Xin Zhang&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://events.linuxfoundation.org/events/open-source-summit-north-america-2018/program/schedule/&#34;&gt;Introducing Kubeflow: A System for Deploying ML/AI on
Kubernetes&lt;/a&gt;: Trevor Grant, Holden Karau&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://conferences.oreilly.com/jupyter/jup-ny&#34;&gt;JupyterCon, New York&lt;/a&gt;, 21-25 August, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://conferences.oreilly.com/jupyter/jup-ny/public/schedule/detail/69752&#34;&gt;Machine Learning at Scale with Kubernetes&lt;/a&gt;: Chris Cho&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.withgoogle.com/next18/sf/&#34;&gt;Google Next, San Francisco&lt;/a&gt;, 24-26 July, 2018
&lt;ul&gt;
&lt;li&gt;AI Platform Showcase demo: Dan Sanche
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=el7cw-nVcBE&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.withgoogle.com/next18/sf/sessions/session/193227&#34;&gt;Machine Learning Made Easy: How to Build Flexible, Portable ML Stacks with Kubeflow and Elastifile&lt;/a&gt;: David Aronchick, Allon Cohen
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=NAqD6siHcpE&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.withgoogle.com/next18/sf/sessions/session/229041&#34;&gt;Spotlight Lab: Introduction to Kubeflow on Google Kubernetes Engine&lt;/a&gt;: Michelle Casbon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://codelabs.developers.google.com/codelabs/kubeflow-introduction/index.html&#34;&gt;Codelab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.withgoogle.com/next18/sf/sessions/session/229637&#34;&gt;Spotlight Lab: Kubeflow End-to-End: GitHub Issue Summarization&lt;/a&gt;: Michelle Casbon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://codelabs.developers.google.com/codelabs/cloud-kubeflow-e2e-gis/index.html&#34;&gt;Codelab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://conferences.oreilly.com/oscon/oscon-or-2018&#34;&gt;O&amp;rsquo;Reilly Open Source Convention, Portland&lt;/a&gt;, 16-19 July, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://conferences.oreilly.com/oscon/oscon-or/public/schedule/detail/70899&#34;&gt;TensorFlow Day: Hassle-free, scalable machine learning with Kubeflow&lt;/a&gt;: Barbara Fusinska&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://scipy2018.scipy.org/ehome/index26ac.html?eventid=299527&amp;amp;tabid=712461&amp;amp;cid=2233540&amp;amp;sessionid=21618893&amp;amp;sessionchoice=1&amp;amp;%26&#34;&gt;SciPy, Austin&lt;/a&gt;, 09-15 July, 2018
&lt;ul&gt;
&lt;li&gt;Kubeflow: Pythonic Machine Learning at Scale on Kubernetes: David Aronchick, Paige Bailey
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=b_CvqzmB51M&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://paris-container-day.fr/en/&#34;&gt;Container Day, Paris&lt;/a&gt;, 26 June, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://paris-container-day.fr/en/#tabidff38a849e758226764f1da33f5bd81e3&#34;&gt;Keynote: Cloud Native ML with Kubeflow&lt;/a&gt;: David Aronchick, Chris Cho
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=rcC11EZdo8Y&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://2018.dockercon.com/&#34;&gt;Dockercon, San Francisco&lt;/a&gt;, 12 - 15 June, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://dockercon18.smarteventscloud.com/connect/sessionDetail.ww?SESSION_ID=224348&#34;&gt;Keynote: Moby&amp;rsquo;s Cool Hacks&lt;/a&gt;: David Aronchick, Michelle Casbon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/RnWXOAplvjY?t=1128&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://qconsp.com/sp2018/schedule/tabular.html&#34;&gt;QCon, São Paulo&lt;/a&gt;, 9-11 May, 2018
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://qconsp.com/sp2018/sp2018/presentation/architecture-nlp-deployment.html&#34;&gt;Architecture of an NLP Deployment&lt;/a&gt;: Michelle Casbon
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=SbecYkirt8w&amp;amp;t=1975&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://events.linuxfoundation.org/events/kubecon-cloudnativecon-europe-2018/&#34;&gt;KubeCon, Copenhagen&lt;/a&gt;, 2-4 May, 2018
&lt;ul&gt;
&lt;li&gt;Interview: Building applications on Kubeflow: Jeremy Lewi
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=VTGH9ocdVM0&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kccnceu18.sched.com/event/Duoq/keynote-cloud-native-ml-on-kubernetes-david-aronchick-product-manager-cloud-ai-and-co-founder-of-kubeflow-google-vishnu-kannan-sr-software-engineer-google-slides-attached&#34;&gt;Keynote: Cloud Native ML on Kubernetes&lt;/a&gt;: David Aronchick, Vishnu Kannan
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=I6iMznIYwM8&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://drive.google.com/file/d/1_QxDZXX-sSP8llFZQ6T2zseZOcPFuVLk/view?usp=sharing&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kccnceu18.sched.com/event/Drnd/kubeflow-deep-dive-david-aronchick-jeremy-lewi-google-intermediate-skill-level&#34;&gt;Kubeflow Deep Dive&lt;/a&gt;: David Aronchick, Jeremy Lewi
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=86GD1VzSnks&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.google.com/url?q=https%3A%2F%2Fschd.ws%2Fhosted_files%2Fkccnceu18%2Fd4%2FKubeflow_Deep_Dive.pdf&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFK_-mkyWfKAFM9wnywPVYH9thoYw&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kccnceu18.sched.com/event/Drmt/kubeflow-intro-michal-jastrzebski-ala-raddaoui-intel-any-skill-level-slides-attached&#34;&gt;Kubeflow Intro&lt;/a&gt;: Michał Jastrzębski, Ala Raddaoui
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=NrDpQks0e98&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://schd.ws/hosted_files/kccnceu18/9f/kubeflow-intro.pdf&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kccnceu18.sched.com/event/Dqvw/serving-ml-models-at-scale-with-seldon-and-kubeflow-clive-cox-seldonio-intermediate-skill-level-slides-attached&#34;&gt;Serving ML Models at Scale with Seldon &amp;amp; Kubeflow&lt;/a&gt;: Clive Cox
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=pDlapGtecbY&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://schd.ws/hosted_files/kccnceu18/1a/SeldonKubeconEurope2018.pdf&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kccnceu18.sched.com/event/Dqv6/conquering-a-kubeflow-kubernetes-cluster-with-ksonnet-ark-and-sonobuoy-kris-nova-heptio-david-aronchick-google-intermediate-skill-level&#34;&gt;Conquering a Kubeflow Kubernetes Cluster with ksonnet, Ark, &amp;amp; Sonobuoy&lt;/a&gt;: David Aronchick, Kris Nova
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=givpqZ2IchI&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kccnceu18.sched.com/event/Dquu/building-ml-products-with-kubeflow-jeremy-lewi-google-stephan-fabel-canonical-intermediate-skill-level-slides-attached&#34;&gt;Building ML Products with Kubeflow&lt;/a&gt;: Jeremy Lewi, Stephan Fabel
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=sC8Ce9vUggo&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://schd.ws/hosted_files/kccnceu18/c2/Building%20ML%20Products%20With%20Kubeflow%20%28Kubecon%202018%29%20%281%29.pdf&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kccnceu18.sched.com/event/DqvC/compliant-data-management-and-machine-learning-on-kubernetes-daniel-whitenack-pachyderm-intermediate-skill-level-slides-attached&#34;&gt;Compliant Data Management &amp;amp; Machine Learning on Kubernetes&lt;/a&gt;: Daniel Whitenack
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=eOzl-LFqYFM&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://schd.ws/hosted_files/kccnceu18/a1/KubeCon_EU_2018%20%281%29.pdf&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kccnceu18.sched.com/event/E46y/bringing-your-data-pipeline-into-the-machine-learning-era-chris-gaun-jorg-schad-mesosphere-intermediate-skill-level&#34;&gt;Bringing Your Data Pipeline into the Machine Learning Era&lt;/a&gt;: Chris Gaun, Jörg Schad
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=f_-3rQoudnc&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://events17.linuxfoundation.org/events/kubecon-and-cloudnativecon-north-america&#34;&gt;KubeCon, Austin&lt;/a&gt;, 6-8 December, 2017
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kccncna17.sched.com/event/CU5v/hot-dogs-or-not-at-scale-with-kubernetes-i-vish-kannan-david-aronchick-google&#34;&gt;&amp;ldquo;Hot Dog or Not Hot Dog&amp;rdquo; at Scale - Kubernetes &amp;amp; Machine Learning&lt;/a&gt;: David Aronchick, Vishnu Kannan
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=R3dVF5wWz-g&amp;amp;feature=youtu.be&#34;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Features of Kubeflow on GCP</title>
      <link>/docs/gke/deploy/reasons/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/gke/deploy/reasons/</guid>
      <description>
        
        
        &lt;p&gt;Running Kubeflow on GCP brings you the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You use
&lt;a href=&#34;https://cloud.google.com/deployment-manager/docs/&#34;&gt;Deployment Manager&lt;/a&gt; to
declaratively manage all non-Kubernetes resources (including the GKE
cluster). Deployment Manager is easy to customize for your particular use
case.&lt;/li&gt;
&lt;li&gt;You can take advantage of
&lt;a href=&#34;https://cloud.google.com/kubernetes-engine/docs&#34;&gt;GKE&lt;/a&gt; autoscaling to scale
your cluster horizontally
and vertically to meet the demands of machine learning (ML) workloads with
large resource requirements.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.google.com/iap/&#34;&gt;Cloud Identity-Aware Proxy (Cloud IAP)&lt;/a&gt;
makes it easy to securely connect to Jupyter and other
web apps running as part of Kubeflow.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.google.com/logging/docs/&#34;&gt;Stackdriver&lt;/a&gt; provides
persistent logs to aid in debugging and troubleshooting.&lt;/li&gt;
&lt;li&gt;You can use GPUs and &lt;a href=&#34;https://cloud.google.com/tpu/&#34;&gt;Cloud TPU&lt;/a&gt; to
accelerate your workload.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/gke/deploy/deploy-ui/&#34;&gt;Deploy Kubeflow&lt;/a&gt; if you haven&amp;rsquo;t already done so.&lt;/li&gt;
&lt;li&gt;Run a full ML workflow on Kubeflow, using the
&lt;a href=&#34;/docs/gke/gcp-e2e/&#34;&gt;end-to-end MNIST tutorial&lt;/a&gt; or the
&lt;a href=&#34;https://github.com/kubeflow/examples/tree/master/github_issue_summarization&#34;&gt;GitHub issue summarization
example&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Install Kubeflow Fairing</title>
      <link>/docs/fairing/install-fairing/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/fairing/install-fairing/</guid>
      <description>
        
        
        &lt;p&gt;You can use Kubeflow Fairing to build, train, and deploy machine learning (ML)
models in a hybrid cloud environment directly from Python code or a Jupyter
notebook. This guide describes how to install Kubeflow Fairing in your
development environment for &lt;a href=&#34;#set-up-kubeflow-fairing-for-local-development&#34;&gt;local development&lt;/a&gt;, or &lt;a href=&#34;#set-up-kubeflow-fairing-in-a-hosted-jupyter-notebook&#34;&gt;development in a
hosted notebook&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;using-kubeflow-fairing-with-kubeflow-notebooks&#34;&gt;Using Kubeflow Fairing with Kubeflow notebooks&lt;/h2&gt;
&lt;p&gt;Kubeflow notebook servers that are built from one of the standard Jupyter
Docker images include Kubeflow Fairing and come preconfigured for using
Kubeflow Fairing to run training jobs on your Kubeflow cluster.&lt;/p&gt;
&lt;p&gt;If you use a Kubeflow notebook server that was built from a custom Jupyter
Docker image as your development environment, follow the instruction on
&lt;a href=&#34;#set-up-kubeflow-fairing-in-a-hosted-jupyter-notebook&#34;&gt;setting up Kubeflow Fairing in a hosted notebook environment&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;set-up-kubeflow-fairing-for-local-development&#34;&gt;Set up Kubeflow Fairing for local development&lt;/h2&gt;
&lt;p&gt;Follow these instructions to set up Kubeflow Fairing for local development.
This guide has been tested on Linux and Mac OS X. Currently, this guide has
not been tested on Windows.&lt;/p&gt;
&lt;h3 id=&#34;set-up-python&#34;&gt;Set up Python&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;You need &lt;strong&gt;Python 3.6&lt;/strong&gt; or later to use Kubeflow Fairing. To check if
you have Python 3.6 or later installed, run the following command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;python3 -V
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The response should be something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Python 3.6.5
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you do not have Python 3.6 or later, you can &lt;a href=&#34;https://www.python.org/downloads/&#34;&gt;download
Python&lt;/a&gt; from the Python Software
Foundation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use virtualenv to create a virtual environment to install Kubeflow
Fairing in. To check if you have virtualenv installed, run the
following command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;which virtualenv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The response should be something like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;/usr/bin/virtualenv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you do not have virtualenv, use pip3 to install virtualenv.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;pip3 install virtualenv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Create a new virtual environment, and activate it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;virtualenv venv --python&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;python3
&lt;span style=&#34;color:#204a87&#34;&gt;source&lt;/span&gt; venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;install-kubeflow-fairing&#34;&gt;Install Kubeflow Fairing&lt;/h3&gt;
&lt;p&gt;Run the following command to install Kubeflow Fairing in your virtual
environment.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;pip install kubeflow-fairing
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After the install is complete, the &lt;code&gt;fairing&lt;/code&gt; python package is
available. Run the following command to verify that Kubeflow Fairing
is installed:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;pip show kubeflow-fairing
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The response should be something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Name: kubeflow-fairing
Version: 0.6.0
Summary: Kubeflow Fairing Python SDK.
Home-page: https://github.com/kubeflow/fairing
Author: Kubeflow Authors
Author-email: hejinchi@cn.ibm.com
License: Apache License Version 2.0
Location: &amp;lt;path-to-kubeflow-fairing&amp;gt;
Requires: notebook, future, docker, tornado, cloudpickle, oauth2client, numpy, requests, setuptools, httplib2, google-auth, google-api-python-client, urllib3, boto3, azure, six, kubernetes, google-cloud-storage
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;docker-setup&#34;&gt;Docker setup&lt;/h3&gt;
&lt;p&gt;Kubeflow Fairing uses Docker to package your code. Run the following command
to verify if Docker is installed and running:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;If you receive the &lt;code&gt;docker: command not found&lt;/code&gt; message, &lt;a href=&#34;https://docs.docker.com/install/&#34;&gt;install
Docker&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you receive the &lt;code&gt;Error response from daemon: Bad response from Docker engine&lt;/code&gt; message, &lt;a href=&#34;https://docs.docker.com/config/daemon/#start-the-daemon-manually&#34;&gt;restart your docker daemon&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you are using Linux and you use sudo to access Docker, follow these
steps to &lt;a href=&#34;https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user&#34;&gt;add your user to the docker group&lt;/a&gt;. Note, the
docker group grants privileges equivalent to the root user. To learn more
about how this affects security in your system, see the guide to the
&lt;a href=&#34;https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface&#34;&gt;Docker daemon attack surface&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;configure-kubeflow-fairing&#34;&gt;Configure Kubeflow Fairing&lt;/h3&gt;
&lt;p&gt;To configure Kubeflow Fairing with access to an environment that you would like to
use for training and deployment, follow the instructions in the &lt;a href=&#34;/docs/fairing/configure-fairing/&#34;&gt;guide to
configuring Kubeflow Fairing&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;set-up-kubeflow-fairing-in-a-hosted-jupyter-notebook&#34;&gt;Set up Kubeflow Fairing in a hosted Jupyter notebook&lt;/h2&gt;
&lt;p&gt;Follow these instructions to set up Kubeflow Fairing in a hosted Jupyter
notebook.&lt;/p&gt;
&lt;p&gt;If you are using a Kubeflow notebook server that was built from one of the
standard Jupyter Docker images, your notebooks environment has been
preconfigured for training and deploying ML models with Kubeflow Fairing and
no additional installation steps are required.&lt;/p&gt;
&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;
&lt;p&gt;Check the following prerequisites to verify that Kubeflow Fairing is compatible
with your hosted notebook environment.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In the Jupyter notebooks user interface, click &lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;New&lt;/strong&gt; &amp;gt;
&lt;strong&gt;Terminal&lt;/strong&gt; in the menu to start a new terminal session in your notebook
environment.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You need &lt;strong&gt;Python 3.6&lt;/strong&gt; or later to use Kubeflow Fairing. To check if you
have Python 3.6 or later installed, run the following command in your
terminal session:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;python3 -V
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The response should be something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Python 3.6.5
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kubeflow Fairing uses Docker to package your code. Run the following
command in your terminal session to verify if Docker is installed and
running in your notebook environment:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;If you receive the &lt;code&gt;docker: command not found&lt;/code&gt; message, &lt;a href=&#34;https://docs.docker.com/install/&#34;&gt;install
Docker&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you receive the &lt;code&gt;Error response from daemon: Bad response from Docker engine&lt;/code&gt; message, &lt;a href=&#34;https://docs.docker.com/config/daemon/#start-the-daemon-manually&#34;&gt;restart your docker daemon&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you are using Linux and you use sudo to access Docker, follow these
steps to &lt;a href=&#34;https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user&#34;&gt;add your user to the docker group&lt;/a&gt;. Note, the
docker group grants privileges equivalent to the root user. To learn
more about how this affects security in your system, see the guide to
the &lt;a href=&#34;https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface&#34;&gt;Docker daemon attack surface&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;install-kubeflow-fairing-1&#34;&gt;Install Kubeflow Fairing&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In the Jupyter notebooks user interface, click &lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;New&lt;/strong&gt; &amp;gt;
&lt;strong&gt;Terminal&lt;/strong&gt; in the menu to start a new terminal session in your notebook
environment.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following command to install Kubeflow Fairing.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;pip3 install kubeflow-fairing
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After successful installation, the &lt;code&gt;fairing&lt;/code&gt; python package should be
available. Run the following command to verify that Kubeflow Fairing
is installed:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;pip3 show kubeflow-fairing
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The response should be something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Name: kubeflow-fairing
Version: 0.6.0
Summary: Kubeflow Fairing Python SDK.
Home-page: https://github.com/kubeflow/fairing
Author: Kubeflow Authors
Author-email: hejinchi@cn.ibm.com
License: Apache License Version 2.0
Location: &amp;lt;path-to-kubeflow-fairing&amp;gt;
Requires: notebook, future, docker, tornado, cloudpickle, oauth2client, numpy, requests, setuptools, httplib2, google-auth, google-api-python-client, urllib3, boto3, azure, six, kubernetes, google-cloud-storage
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;configure-kubeflow-fairing-1&#34;&gt;Configure Kubeflow Fairing&lt;/h3&gt;
&lt;p&gt;To configure Kubeflow Fairing with access to the environment you would like to
use for training and deployment, follow the instructions in the guide to
&lt;a href=&#34;/docs/fairing/configure-fairing/&#34;&gt;configuring Kubeflow Fairing&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/fairing/configure-fairing/&#34;&gt;Configure your Kubeflow Fairing development environment&lt;/a&gt; with access
to run training jobs remotely.&lt;/li&gt;
&lt;li&gt;Follow the &lt;a href=&#34;/docs/fairing/tutorials/other-tutorials/&#34;&gt;samples and tutorials&lt;/a&gt; to learn more about how to run
training jobs remotely with Kubeflow Fairing.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Installation Options for Kubeflow Pipelines</title>
      <link>/docs/pipelines/installation/overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/pipelines/installation/overview/</guid>
      <description>
        
        
        &lt;p&gt;Kubeflow Pipelines offers a few installation options.
This page describes the options and the features available
with each option:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href=&#34;#standalone&#34;&gt;standalone&lt;/a&gt; Kubeflow Pipelines deployment.&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines as &lt;a href=&#34;#full-kubeflow&#34;&gt;part of a full Kubeflow deployment&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alpha&lt;/strong&gt;: &lt;a href=&#34;#marketplace&#34;&gt;GCP Hosted ML Pipelines&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#34;standalone&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;kubeflow-pipelines-standalone&#34;&gt;Kubeflow Pipelines Standalone&lt;/h2&gt;
&lt;p&gt;Use this option to deploy Kubeflow Pipelines to an on-premises or cloud
Kubernetes cluster, without the other components of Kubeflow.
To deploy Kubeflow Pipelines Standalone, you use kustomize manifests only.
This process makes it simpler to customize your deployment and to integrate
Kubeflow Pipelines into an existing Kubernetes cluster.&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Installation guide&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&#34;/docs/pipelines/installation/standalone-deployment/&#34;&gt;Kubeflow Pipelines Standalone deployment
guide&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;Interfaces&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
&lt;li&gt;Kubeflow Pipelines UI&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines SDK&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines API&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;Notes on specific features&lt;/dt&gt;
&lt;dd&gt;After deployment, your Kubernetes cluster contains Kubeflow Pipelines only.
It does not include the other Kubeflow components.
For example, to use a Jupyter Notebook, you must use a local notebook or a
hosted notebook in a cloud service such as the &lt;a href=&#34;https://cloud.google.com/ai-platform/notebooks/docs/&#34;&gt;AI Platform
Notebooks&lt;/a&gt;.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;a id=&#34;full-kubeflow&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;full-kubeflow-deployment&#34;&gt;Full Kubeflow deployment&lt;/h2&gt;
&lt;p&gt;Use this option to deploy Kubeflow Pipelines to your local machine, on-premises,
or to a cloud, as part of a full Kubeflow installation.&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Installation guide&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&#34;/docs/started/getting-started/&#34;&gt;Kubeflow installation guide&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Interfaces
:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubeflow UI&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines UI within or outside the Kubeflow UI&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines SDK&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines API&lt;/li&gt;
&lt;li&gt;Other Kubeflow APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;dl&gt;
&lt;dt&gt;Notes on specific features&lt;/dt&gt;
&lt;dd&gt;After deployment, your Kubernetes cluster includes all the
&lt;a href=&#34;/docs/components/&#34;&gt;Kubeflow components&lt;/a&gt;.
For example, you can use the Jupyter notebook services
&lt;a href=&#34;/docs/notebooks/&#34;&gt;deployed with Kubeflow&lt;/a&gt; to create one or more notebook
servers in your Kubeflow cluster.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;a id=&#34;marketplace&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;gcp-hosted-ml-pipelines&#34;&gt;GCP Hosted ML Pipelines&lt;/h2&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Alpha release&lt;/h4&gt;
GCP Hosted ML Pipelines is currently in &lt;b&gt;Alpha&lt;/b&gt; with 
  limited support. The Kubeflow team is interested in any feedback you may have,
  in particular on the usability of the feature. To get access to the Alpha
  release, email 
  &lt;a href=&#34;mailto:kfp-mkp-alpha-feedback@google.com&#34;&gt;kfp-mkp-alpha-feedback@google.com&lt;/a&gt;.
  You can raise any issues or discussion items in the
  &lt;a href=&#34;https://github.com/kubeflow/pipelines/issues&#34;&gt;Kubeflow Pipelines 
  issue tracker&lt;/a&gt;.
&lt;/div&gt;

&lt;p&gt;Use this option to deploy Kubeflow Pipelines to Google Kubernetes Engine (GKE)
from GCP Marketplace. You can deploy Kubeflow Pipelines to an existing or new
GKE cluster and manage your cluster within GCP.&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Installation guide&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&#34;https://github.com/kubeflow/pipelines/blob/master/manifests/gcp_marketplace/guide.md&#34;&gt;Deploy Kubeflow Pipelines from Google Cloud
Marketplace&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;Interfaces&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
&lt;li&gt;GCP Console for managing the Kubeflow Pipelines cluster and other GCP
services.&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines UI via the &lt;strong&gt;Open Pipelines Dashboard&lt;/strong&gt; link in the
GCP Console&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines SDK in Cloud Notebooks&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;Notes on specific features&lt;/dt&gt;
&lt;dd&gt;After deployment, your Kubernetes cluster contains Kubeflow Pipelines only.
It does not include the other Kubeflow components.
For example, to use a Jupyter Notebook, you can use &lt;a href=&#34;https://cloud.google.com/ai-platform/notebooks/docs/&#34;&gt;AI Platform
Notebooks&lt;/a&gt;.&lt;/dd&gt;
&lt;/dl&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Introduction to Katib</title>
      <link>/docs/components/hyperparameter-tuning/overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/hyperparameter-tuning/overview/</guid>
      <description>
        
        
        &lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
  &lt;h4 class=&#34;alert-heading&#34;&gt;Beta&lt;/h4&gt;
  This Kubeflow component has &lt;b&gt;beta&lt;/b&gt; status. See the
  &lt;a href=&#34;/docs/reference/version-policy/&#34;&gt;Kubeflow versioning policies&lt;/a&gt;.
  The Kubeflow team is interested in your   
  &lt;a href=&#34;https://github.com/kubeflow/katib/issues&#34;&gt;feedback&lt;/a&gt;&lt;/h4&gt; 
  about the usability of the feature.
&lt;/div&gt;
&lt;p&gt;Use Katib for automated tuning of your machine learning (ML) model&amp;rsquo;s
hyperparameters and architecture.&lt;/p&gt;
&lt;p&gt;This page introduces the concepts of hyperparameter tuning, neural
architecture search, and the Katib system as a component of Kubeflow.&lt;/p&gt;
&lt;h2 id=&#34;hyperparameters-and-hyperparameter-tuning&#34;&gt;Hyperparameters and hyperparameter tuning&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Hyperparameters&lt;/em&gt; are the variables that control the model training process.
For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learning rate.&lt;/li&gt;
&lt;li&gt;Number of layers in a neural network.&lt;/li&gt;
&lt;li&gt;Number of nodes in each layer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hyperparameter values are not &lt;em&gt;learned&lt;/em&gt;. In other words, in contrast to the
node weights and other training &lt;em&gt;parameters&lt;/em&gt;, the model training process does
not adjust the hyperparameter values.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Hyperparameter tuning&lt;/em&gt; is the process of optimizing the hyperparameter values
to maximize the predictive accuracy of the model. If you don&amp;rsquo;t use Katib or a
similar system for hyperparameter tuning, you need run many training jobs
yourself, manually adjusting the hyperparameters to find the optimal values.&lt;/p&gt;
&lt;p&gt;Automated hyperparameter tuning works by optimizing a target variable,
also called the &lt;em&gt;objective metric&lt;/em&gt;, that you specify in the configuration for
the hyperparameter tuning job. A common metric is the model&amp;rsquo;s accuracy
in the validation pass of the training job (&lt;em&gt;validation-accuracy&lt;/em&gt;). You also
specify whether you want the hyperparameter tuning job to &lt;em&gt;maximize&lt;/em&gt; or
&lt;em&gt;minimize&lt;/em&gt; the metric.&lt;/p&gt;
&lt;p&gt;For example, the following graph from Katib shows the level of accuracy
for various combinations of hyperparameter values (learning rate, number of
layers, and optimizer):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/katib-random-example-graph.png&#34; 
alt=&#34;Graph produced by the random example&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(To run the example that produced this graph, follow the &lt;a href=&#34;/docs/components/hyperparameter-tuning/hyperparameter/&#34;&gt;getting-started
guide&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Katib runs several training jobs (known as &lt;em&gt;trials&lt;/em&gt;) within each
hyperparameter tuning job (&lt;em&gt;experiment&lt;/em&gt;). Each trial tests a different set of
hyperparameter configurations. At the end of the experiment, Katib outputs
the optimized values for the hyperparameters.&lt;/p&gt;
&lt;h2 id=&#34;neural-architecture-search&#34;&gt;Neural architecture search&lt;/h2&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Alpha version&lt;/h4&gt;
Neural architecture search is currently in &lt;b&gt;alpha&lt;/b&gt; with limited support.
The Kubeflow team is interested in any feedback you may have, in particular with
regards to usability of the feature. You can log issues and comments in
the &lt;a href=&#34;https://github.com/kubeflow/katib/issues&#34;&gt;Katib issue tracker&lt;/a&gt;.
&lt;/div&gt;

&lt;p&gt;In addition to hyperparameter tuning, Katib offers a &lt;em&gt;neural architecture
search&lt;/em&gt; (NAS) feature. You can use the NAS to design
your artificial neural network, with a goal of maximizing the predictive
accuracy and performance of your model.&lt;/p&gt;
&lt;p&gt;NAS is closely related to hyperparameter tuning. Both are subsets of automated
machine learning (&lt;em&gt;AutoML&lt;/em&gt;). While hyperparameter tuning
optimizes the model&amp;rsquo;s hyperparameters, a NAS system optimizes the model&amp;rsquo;s
structure, node weights, and hyperparameters.&lt;/p&gt;
&lt;p&gt;NAS technology in general uses various techniques to find the optimal neural
network design. The NAS in Katib uses the &lt;em&gt;reinforcement learning&lt;/em&gt; technique.&lt;/p&gt;
&lt;p&gt;You can submit Katib jobs from the command line or from the UI. (Read more
about the Katib interfaces later on this page.) The following screenshot shows
part of the form for submitting a NAS job from the Katib UI:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/katib-neural-architecture-search-ui.png&#34; 
alt=&#34;Submitting a neural architecture search from the Katib UI&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;the-katib-project&#34;&gt;The Katib project&lt;/h2&gt;
&lt;p&gt;Katib is a Kubernetes-based system for hyperparameter tuning and neural
architecture search. Katib supports a number of ML frameworks, including
TensorFlow, MXNet, PyTorch, XGBoost, and others.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://github.com/kubeflow/katib&#34;&gt;Katib project&lt;/a&gt; is open source.
The &lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/docs/developer-guide.md&#34;&gt;developer guide&lt;/a&gt;
is a good starting point for developers who want to contribute to the project.&lt;/p&gt;
&lt;h2 id=&#34;katib-interfaces&#34;&gt;Katib interfaces&lt;/h2&gt;
&lt;p&gt;You can use the following interfaces to interact with Katib:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A web UI that you can use to submit experiments and to monitor your results.
See the &lt;a href=&#34;/docs/components/hyperparameter-tuning/hyperparameter/#katib-ui&#34;&gt;getting-started
guide&lt;/a&gt;
for information on how to access the UI.
The Katib home page within Kubeflow looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/katib-home.png&#34; 
alt=&#34;The Katib home page within the Kubeflow UI&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A REST API. See the &lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/pkg/apis/manager/v1alpha3/gen-doc/api.md&#34;&gt;API reference on
GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Command-line interfaces (CLIs):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Kfctl&lt;/strong&gt; is the Kubeflow CLI that you can use to install and configure
Kubeflow. Read about kfctl in the guide to
&lt;a href=&#34;/docs/other-guides/kustomize/&#34;&gt;configuring Kubeflow&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Kubernetes CLI, &lt;strong&gt;kubectl&lt;/strong&gt;, is useful for running commands against your
Kubeflow cluster. Read about kubectl in the &lt;a href=&#34;https://kubernetes.io/docs/tasks/tools/install-kubectl/&#34;&gt;Kubernetes
documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;katib-concepts&#34;&gt;Katib concepts&lt;/h2&gt;
&lt;p&gt;This section describes the terms used in Katib.&lt;/p&gt;
&lt;h3 id=&#34;experiment&#34;&gt;Experiment&lt;/h3&gt;
&lt;p&gt;An &lt;em&gt;experiment&lt;/em&gt; is a single tuning run, also called an optimization run.&lt;/p&gt;
&lt;p&gt;You specify configuration settings to define the experiment. The following are
the main configurations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt;: What you want to optimize. This is the objective metric, also
called the target variable. A common metric is the model&amp;rsquo;s accuracy
in the validation pass of the training job (&lt;em&gt;validation-accuracy&lt;/em&gt;). You also
specify whether you want the hyperparameter tuning job to &lt;em&gt;maximize&lt;/em&gt; or
&lt;em&gt;minimize&lt;/em&gt; the metric.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Search space&lt;/strong&gt;: The set of all possible hyperparameter values that the
hyperparameter tuning job should consider for optimization, and the
constraints for each hyperparameter. Other names for search space include
&lt;em&gt;feasible set&lt;/em&gt; and &lt;em&gt;solution space&lt;/em&gt;. For example, you may provide the
names of the hyperparameters that you want to optimize. For each
hyperparameter, you may provide a &lt;em&gt;minimum&lt;/em&gt; and &lt;em&gt;maximum&lt;/em&gt; value or a &lt;em&gt;list&lt;/em&gt;
of allowable values.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Search algorithm&lt;/strong&gt;: The algorithm to use when searching for the optimal
hyperparameter values.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For details of how to define your experiment, see the guide to &lt;a href=&#34;/docs/components/hyperparameter-tuning/experiment/&#34;&gt;running an
experiment&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;suggestion&#34;&gt;Suggestion&lt;/h3&gt;
&lt;p&gt;A &lt;em&gt;suggestion&lt;/em&gt; is a set of hyperparameter values that the hyperparameter
tuning process has proposed. Katib creates a trial to evaluate the suggested
set of values.&lt;/p&gt;
&lt;h3 id=&#34;trial&#34;&gt;Trial&lt;/h3&gt;
&lt;p&gt;A &lt;em&gt;trial&lt;/em&gt; is one iteration of the hyperparameter tuning process. A trial
corresponds to one worker job instance with a list of parameter assignments.
The list of parameter assignments corresponds to a suggestion.&lt;/p&gt;
&lt;p&gt;Each experiment runs several trials. The experiment runs the trials until it
reaches either the objective or the configured maximum number of trials.&lt;/p&gt;
&lt;h3 id=&#34;worker-job&#34;&gt;Worker job&lt;/h3&gt;
&lt;p&gt;The &lt;em&gt;worker job&lt;/em&gt; is the process that runs to evaluate a trial and calculate
its objective value.&lt;/p&gt;
&lt;p&gt;The worker job can be one of the following types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/&#34;&gt;Kubernetes Job&lt;/a&gt;
(does not support distributed execution).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/guides/components/tftraining/&#34;&gt;Kubeflow TFJob&lt;/a&gt; (supports
distributed execution).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/guides/components/pytorch/&#34;&gt;Kubeflow PyTorchJob&lt;/a&gt; (supports
distributed execution).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By offering the above worker job types, Katib supports multiple ML frameworks.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Follow the &lt;a href=&#34;/docs/components/hyperparameter-tuning/hyperparameter/&#34;&gt;getting-started
guide&lt;/a&gt; to set up
Katib and run some hyperparameter tuning examples.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Introduction to Multi-user Isolation</title>
      <link>/docs/components/multi-tenancy/overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/multi-tenancy/overview/</guid>
      <description>
        
        
        &lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;
This Kubeflow component has &lt;b&gt;stable&lt;/b&gt; status. See the
&lt;a href=&#34;/docs/reference/version-policy/&#34;&gt;Kubeflow versioning policies&lt;/a&gt;.
&lt;/div&gt;
&lt;p&gt;In a production environment, it is often necessary to share the same pool
of resources across different teams and users. These different users need
a reliable way to isolate and protect their own resources, without accidentally
viewing or changing each other&amp;rsquo;s resources.&lt;/p&gt;
&lt;p&gt;Kubeflow v1.0.2 supports multi-user isolation, which applies
access control over namespaces and user-created
resources in a deployment. This feature provides the users with the
convenience of clutter-free browsing of notebooks, training jobs, serving
deployments and other resources. The isolation mechanisms also prevent
accidental deletion/modification of resources of other users in the deployment.&lt;/p&gt;
&lt;p&gt;Note that the isolation support in Kubeflow doesn&amp;rsquo;t provide any hard security
guarantees against malicious attempts by users to infiltrate other user&amp;rsquo;s
profiles.&lt;/p&gt;
&lt;h2 id=&#34;key-concepts&#34;&gt;Key concepts&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Administrator&lt;/strong&gt;: An administrator is someone who creates and maintains the Kubeflow cluster.
This person has the permission to grant access permissions to others.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;User&lt;/strong&gt;: A user is someone who has access to some set of resources in the cluster. A user
needs to be granted access permissions by the administrator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Profile&lt;/strong&gt;: A profile is a grouping of all Kubernetes clusters owned by a user.&lt;/p&gt;
&lt;h2 id=&#34;current-integration-and-limitations&#34;&gt;Current integration and limitations&lt;/h2&gt;
&lt;p&gt;The Jupyter notebooks service is the first application to be fully integrated with
multi-user isolation. Access to the notebooks and the creation of notebooks is
controlled by the profile access policies set by the administrator or the owners
of the profiles. Resources created by the notebooks (for example, training jobs and
deployments) also inherit the same access.&lt;/p&gt;
&lt;p&gt;Metadata and Pipelines or any other applications currently don&amp;rsquo;t have full
fledged integration with isolation, though they do have access to the user
identity through the headers of the incoming requests. It&amp;rsquo;s up to the individual
applications to use the available identity and isolation features
in a way that makes sense for each application.&lt;/p&gt;
&lt;p&gt;On Google Cloud Platform (GCP), the authentication and identify token is generated by GCP IAM and carried
through the requests as a JWT Token in the request header. Other cloud providers can have a
similar header to provide identity information.&lt;/p&gt;
&lt;p&gt;For on-premises deployments, Kubeflow uses Dex as a federated OpenID connection
provider and can be integrated with LDAP or Active Directory to provide authentication
and identity services.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Understand the &lt;a href=&#34;/docs/components/multi-tenancy/design/&#34;&gt;detailed design&lt;/a&gt; of Kubeflow&amp;rsquo;s multi-user isolation feature.&lt;/li&gt;
&lt;li&gt;Learn &lt;a href=&#34;/docs/components/multi-tenancy/getting-started/&#34;&gt;how to use multi-user isolation and profiles&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Introduction to the Pipelines SDK</title>
      <link>/docs/pipelines/sdk/sdk-overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/pipelines/sdk/sdk-overview/</guid>
      <description>
        
        
        &lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
  &lt;h4 class=&#34;alert-heading&#34;&gt;Beta&lt;/h4&gt;
  This Kubeflow component has &lt;b&gt;beta&lt;/b&gt; status. See the
  &lt;a href=&#34;/docs/reference/version-policy/&#34;&gt;Kubeflow versioning policies&lt;/a&gt;.
  The Kubeflow team is interested in your   
  &lt;a href=&#34;https://github.com/kubeflow/pipelines/issues&#34;&gt;feedback&lt;/a&gt;&lt;/h4&gt; 
  about the usability of the feature.
&lt;/div&gt;
&lt;p&gt;The &lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.html&#34;&gt;Kubeflow Pipelines
SDK&lt;/a&gt;
provides a set of Python packages that you can use to specify and run your
machine learning (ML) workflows. A &lt;em&gt;pipeline&lt;/em&gt; is a description of an ML
workflow, including all of the &lt;em&gt;components&lt;/em&gt; that make up the steps in the
workflow and how the components interact with each other.&lt;/p&gt;
&lt;h2 id=&#34;sdk-packages&#34;&gt;SDK packages&lt;/h2&gt;
&lt;p&gt;The Kubeflow Pipelines SDK includes the following packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.compiler.html&#34;&gt;&lt;code&gt;kfp.compiler&lt;/code&gt;&lt;/a&gt;
includes classes and methods for building Docker container images for your
pipeline components. Methods in this package include, but are not limited
to, the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kfp.compiler.Compiler.compile&lt;/code&gt; compiles your Python DSL code into a single
static configuration (in YAML format) that the Kubeflow Pipelines service
can process. The Kubeflow Pipelines service converts the static
configuration into a set of Kubernetes resources for execution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kfp.compiler.build_docker_image&lt;/code&gt; builds a container image based on a
Dockerfile and pushes the image to a URI. In the parameters, you provide the
path to a Dockerfile containing the image specification, and the URI for the
target image (for example, a container registry).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kfp.compiler.build_python_component&lt;/code&gt; builds a container image for a
pipeline component based on a Python function, and pushes the image to a
URI. In the parameters, you provide the Python function that does the work
of the pipeline component, a Docker image to use as a base image,
and the URI for the target image (for example, a container registry).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.components.html&#34;&gt;&lt;code&gt;kfp.components&lt;/code&gt;&lt;/a&gt;
includes classes and methods for interacting with pipeline components.
Methods in this package include, but are not limited to, the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kfp.components.func_to_container_op&lt;/code&gt; converts a Python function to a
pipeline component and returns a factory function.
You can then call the factory function to construct an instance of a
pipeline task
(&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.ContainerOp&#34;&gt;&lt;code&gt;ContainerOp&lt;/code&gt;&lt;/a&gt;)
that runs the original function in a container.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kfp.components.load_component_from_file&lt;/code&gt; loads a pipeline component from
a file and returns a factory function.
You can then call the factory function to construct an instance of a
pipeline task
(&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.ContainerOp&#34;&gt;&lt;code&gt;ContainerOp&lt;/code&gt;&lt;/a&gt;)
that runs the component container image.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kfp.components.load_component_from_url&lt;/code&gt; loads a pipeline component from
a URL and returns a factory function.
You can then call the factory function to construct an instance of a
pipeline task
(&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.ContainerOp&#34;&gt;&lt;code&gt;ContainerOp&lt;/code&gt;&lt;/a&gt;)
that runs the component container image.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html&#34;&gt;&lt;code&gt;kfp.dsl&lt;/code&gt;&lt;/a&gt;
contains the domain-specific language (DSL) that you can use to define and
interact with pipelines and components.
Methods, classes, and modules in this package include, but are not limited to,
the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kfp.dsl.ContainerOp&lt;/code&gt; represents a pipeline task (op) implemented by a
container image.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfp.dsl.PipelineParam&lt;/code&gt; represents a pipeline parameter that you can pass
from one pipeline component to another. See the guide to
&lt;a href=&#34;/docs/pipelines/sdk/parameters/&#34;&gt;pipeline parameters&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfp.dsl.component&lt;/code&gt; is a decorator for DSL functions that returns a
pipeline component.
(&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.ContainerOp&#34;&gt;&lt;code&gt;ContainerOp&lt;/code&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfp.dsl.pipeline&lt;/code&gt; is a decorator for Python functions that returns a
pipeline.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfp.dsl.python_component&lt;/code&gt; is a decorator for Python functions that adds
pipeline component metadata to the function object.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.types.html&#34;&gt;&lt;code&gt;kfp.dsl.types&lt;/code&gt;&lt;/a&gt;
contains a list of types defined by the Kubeflow Pipelines SDK. Types
include basic types like &lt;code&gt;String&lt;/code&gt;, &lt;code&gt;Integer&lt;/code&gt;, &lt;code&gt;Float&lt;/code&gt;, and &lt;code&gt;Bool&lt;/code&gt;, as well
as domain-specific types like &lt;code&gt;GCPProjectID&lt;/code&gt; and &lt;code&gt;GCRPath&lt;/code&gt;.
See the guide to
&lt;a href=&#34;/docs/pipelines/sdk/static-type-checking&#34;&gt;DSL static type checking&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.ResourceOp&#34;&gt;&lt;code&gt;kfp.dsl.ResourceOp&lt;/code&gt;&lt;/a&gt;
represents a pipeline task (op) which lets you directly manipulate
Kubernetes resources (&lt;code&gt;create&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;apply&lt;/code&gt;, &amp;hellip;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.VolumeOp&#34;&gt;&lt;code&gt;kfp.dsl.VolumeOp&lt;/code&gt;&lt;/a&gt;
represents a pipeline task (op) which creates a new &lt;code&gt;PersistentVolumeClaim&lt;/code&gt;
(PVC). It aims to make the common case of creating a &lt;code&gt;PersistentVolumeClaim&lt;/code&gt;
fast.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.VolumeSnapshotOp&#34;&gt;&lt;code&gt;kfp.dsl.VolumeSnapshotOp&lt;/code&gt;&lt;/a&gt;
represents a pipeline task (op) which creates a new &lt;code&gt;VolumeSnapshot&lt;/code&gt;. It
aims to make the common case of creating a &lt;code&gt;VolumeSnapshot&lt;/code&gt; fast.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.PipelineVolume&#34;&gt;&lt;code&gt;kfp.dsl.PipelineVolume&lt;/code&gt;&lt;/a&gt;
represents a volume used to pass data between pipeline steps. &lt;code&gt;ContainerOp&lt;/code&gt;s
can mount a &lt;code&gt;PipelineVolume&lt;/code&gt; either via the constructor&amp;rsquo;s argument
&lt;code&gt;pvolumes&lt;/code&gt; or &lt;code&gt;add_pvolumes()&lt;/code&gt; method.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.client.html&#34;&gt;&lt;code&gt;kfp.Client&lt;/code&gt;&lt;/a&gt;
contains the Python client libraries for the &lt;a href=&#34;/docs/pipelines/reference/api/kubeflow-pipeline-api-spec/&#34;&gt;Kubeflow Pipelines
API&lt;/a&gt;.
Methods in this package include, but are not limited to, the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kfp.Client.create_experiment&lt;/code&gt; creates a pipeline
&lt;a href=&#34;/docs/pipelines/concepts/experiment/&#34;&gt;experiment&lt;/a&gt; and returns an
experiment object.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfp.Client.run_pipeline&lt;/code&gt; runs a pipeline and returns a run object.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfp.Client.pipeline_uploads.upload_pipeline_version&lt;/code&gt; uploads a local file to create a pipeline version. &lt;a href=&#34;/docs/pipelines/tutorials/sdk-examples&#34;&gt;Follow an example to learn more about creating a pipeline version&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.notebook.html&#34;&gt;&lt;code&gt;kfp.notebook&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.extensions.html&#34;&gt;KFP extension modules&lt;/a&gt;
include classes and functions for specific platforms on which you can use
Kubeflow Pipelines. Examples include utility functions for on premises,
Google Cloud Platform (GCP), Amazon Web Services (AWS), and Microsoft Azure.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/kubeflow/pipelines/tree/master/sdk/python/kfp/cli/diagnose_me&#34;&gt;KFP diagnose_me modules&lt;/a&gt;include classes and functions that help with environment diagnostic tasks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kfp.cli.diagnose_me.dev_env&lt;/code&gt; reports on diagnostic metadata from your development environment, such as your python library version.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfp.cli.diagnose_me.kubernetes_cluster&lt;/code&gt; reports on diagnostic data from your Kubernetes cluster, such as Kubernetes secrets.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kfp.cli.diagnose_me.gcp&lt;/code&gt; reports on diagnostic data related to your GCP environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;kfp-cli-tool&#34;&gt;KFP CLI tool&lt;/h2&gt;
&lt;p&gt;The KFP CLI tool enables you to use a subset of the Kubeflow Pipelines SDK directly from the command line. The KFP CLI tool provides the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kfp diagnose_me&lt;/code&gt; runs environment diagnostic with specified parameters.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--json&lt;/code&gt; - Indicates that this command must return its results as JSON. Otherwise, results are returned in human readable format.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--namespace TEXT&lt;/code&gt; - Specifies the Kubernetes namespace to use. all-namespaces is the default value.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--project-id TEXT&lt;/code&gt; - For GCP deployments, this value specifies the GCP project to use. If this value is not specified, the environment default is used.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kfp pipeline &amp;lt;COMMAND&amp;gt;&lt;/code&gt; provides the following commands to help you manage pipelines.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;get&lt;/code&gt;  - Gets detailed information about a Kubeflow pipeline from your Kubeflow Pipelines cluster.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;list&lt;/code&gt; - Lists the pipelines that have been uploaded to your Kubeflow Pipelines cluster.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;upload&lt;/code&gt; - Uploads a pipeline to your Kubeflow Pipelines cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kfp run &amp;lt;COMMAND&amp;gt;&lt;/code&gt; provides the following commands to help you manage pipeline runs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;get&lt;/code&gt; - Displays the details of a pipeline run.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;list&lt;/code&gt; - Lists recent pipeline runs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;submit&lt;/code&gt; - Submits a pipeline run.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kfp --endpoint &amp;lt;ENDPOINT&amp;gt;&lt;/code&gt; - Specifies the endpoint that the KFP CLI should connect to.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;installing-the-sdk&#34;&gt;Installing the SDK&lt;/h2&gt;
&lt;p&gt;Follow the guide to
&lt;a href=&#34;/docs/pipelines/sdk/install-sdk/&#34;&gt;installing the Kubeflow Pipelines SDK&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;building-pipelines-and-components&#34;&gt;Building pipelines and components&lt;/h2&gt;
&lt;p&gt;This section summarizes the ways you can use the SDK to build pipelines and
components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#standard-component-outside-app&#34;&gt;Creating components from existing application
code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#standard-component-in-app&#34;&gt;Creating components within your application code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#lightweight-component&#34;&gt;Creating lightweight components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#prebuilt-component&#34;&gt;Using prebuilt, reusuable components in your pipeline&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The diagrams provide a conceptual guide to the relationships between the
following concepts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your Python code&lt;/li&gt;
&lt;li&gt;A pipeline component&lt;/li&gt;
&lt;li&gt;A Docker container image&lt;/li&gt;
&lt;li&gt;A pipeline&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#34;standard-component-outside-app&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;creating-components-from-existing-application-code&#34;&gt;Creating components from existing application code&lt;/h3&gt;
&lt;p&gt;This section describes how to create a component and a pipeline &lt;em&gt;outside&lt;/em&gt; your
Python application, by creating components from existing containerized
applications. This technique is useful when you have already created a
TensorFlow program, for example, and you want to use it in a pipeline.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/pipelines-sdk-outside-app.svg&#34; 
alt=&#34;Creating components outside your application code&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;p&gt;Below is a more detailed explanation of the above diagram:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Write your application code, &lt;code&gt;my-app-code.py&lt;/code&gt;. For example, write code to
transform data or train a model.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a &lt;a href=&#34;https://docs.docker.com/get-started/&#34;&gt;Docker&lt;/a&gt; container image that
packages your program (&lt;code&gt;my-app-code.py&lt;/code&gt;) and upload the container image to a
registry. To build a container image based on a given
&lt;a href=&#34;https://docs.docker.com/engine/reference/builder/&#34;&gt;Dockerfile&lt;/a&gt;, you can use
the &lt;a href=&#34;https://docs.docker.com/engine/reference/commandline/cli/&#34;&gt;Docker command-line
interface&lt;/a&gt;
or the
&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.compiler.html#kfp.compiler.build_docker_image&#34;&gt;&lt;code&gt;kfp.compiler.build_docker_image&lt;/code&gt; method&lt;/a&gt; from the Kubeflow Pipelines
SDK.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write a component function using the Kubeflow Pipelines DSL to define your
pipeline&amp;rsquo;s interactions with the component’s Docker container. Your
component function must return a
&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.ContainerOp&#34;&gt;&lt;code&gt;kfp.dsl.ContainerOp&lt;/code&gt;&lt;/a&gt;.
Optionally, you can use the &lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.component&#34;&gt;&lt;code&gt;kfp.dsl.component&lt;/code&gt;
decorator&lt;/a&gt;
to enable &lt;a href=&#34;/docs/pipelines/sdk/static-type-checking&#34;&gt;static type checking&lt;/a&gt; in
the DSL compiler. To use the decorator, you can add the &lt;code&gt;@kfp.dsl.component&lt;/code&gt;
annotation to your component function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#5c35cc;font-weight:bold&#34;&gt;@kfp.dsl.component&lt;/span&gt;
&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_component&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_param&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;):&lt;/span&gt;
  &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;...&lt;/span&gt;
  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;dsl&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ContainerOp&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;
    &lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;My component name&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
    &lt;span style=&#34;color:#000&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;gcr.io/path/to/container/image&amp;#39;&lt;/span&gt;
  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write a pipeline function using the Kubeflow Pipelines DSL to define the
pipeline and include all the pipeline components. Use the &lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.pipeline&#34;&gt;&lt;code&gt;kfp.dsl.pipeline&lt;/code&gt;
decorator&lt;/a&gt;
to build a pipeline from your pipeline function. To use the decorator, you can
add the &lt;code&gt;@kfp.dsl.pipeline&lt;/code&gt; annotation to your pipeline function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#5c35cc;font-weight:bold&#34;&gt;@kfp.dsl.pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;My pipeline&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;description&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;My machine learning pipeline&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;param_1&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;PipelineParam&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;param_2&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;PipelineParam&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;):&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;my_step&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_component&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_param&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compile the pipeline to generate a compressed YAML definition of the
pipeline. The Kubeflow Pipelines service converts the static configuration
into a set of Kubernetes resources for execution.&lt;/p&gt;
&lt;p&gt;To compile the pipeline, you can choose one of the following
options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use the
&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.compiler.html#kfp.compiler.Compiler&#34;&gt;&lt;code&gt;kfp.compiler.Compiler.compile&lt;/code&gt;&lt;/a&gt;
method:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;compiler&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Compiler&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;compile&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;  
  &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline.zip&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Alternatively, use the &lt;code&gt;dsl-compile&lt;/code&gt; command on the command line.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;dsl-compile --py &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;[&lt;/span&gt;path/to/python/file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;]&lt;/span&gt; --output my-pipeline.zip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the Kubeflow Pipelines SDK to run the pipeline:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Client&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;
&lt;span style=&#34;color:#000&#34;&gt;my_experiment&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;create_experiment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;demo&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#000&#34;&gt;my_run&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;run_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_experiment&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; 
  &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline.zip&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can also choose to share your pipeline as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Upload the pipeline zip file to the Kubeflow Pipelines UI. For more
information about the UI, see the &lt;a href=&#34;/docs/pipelines/pipelines-quickstart/&#34;&gt;Kubeflow Pipelines quickstart
guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Upload the pipeline zip file to a shared repository. See the
&lt;a href=&#34;/docs/examples/shared-resources/&#34;&gt;reusable components and other shared resources&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;More about the above workflow&lt;/h4&gt;
&lt;p&gt;For more detailed instructions, see the guide to &lt;a href=&#34;/docs/pipelines/sdk/build-component/&#34;&gt;building components and
pipelines&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For an example, see the
&lt;a href=&#34;https://github.com/kubeflow/pipelines/blob/master/samples/core/xgboost_training_cm/xgboost_training_cm.py&#34;&gt;&lt;code&gt;xgboost-training-cm.py&lt;/code&gt;&lt;/a&gt;
pipeline sample on GitHub. The pipeline creates an XGBoost model using
structured data in CSV format.&lt;/p&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a id=&#34;standard-component-in-app&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;creating-components-within-your-application-code&#34;&gt;Creating components within your application code&lt;/h3&gt;
&lt;p&gt;This section describes how to create a pipeline component &lt;em&gt;inside&lt;/em&gt; your
Python application, as part of the application. The DSL code for creating a
component therefore runs inside your Docker container.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/pipelines-sdk-within-app.svg&#34; 
alt=&#34;Building components within your application code&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;p&gt;Below is a more detailed explanation of the above diagram:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Write your code in a Python function. For example, write code to transform
data or train a model:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_python_func&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;str&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;str&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;str&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;
  &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the &lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.python_component&#34;&gt;&lt;code&gt;kfp.dsl.python_component&lt;/code&gt;
decorator&lt;/a&gt;
to convert your Python function into
a pipeline component. To use the decorator, you can add the
&lt;code&gt;@kfp.dsl.python_component&lt;/code&gt; annotation to your function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#5c35cc;font-weight:bold&#34;&gt;@kfp.dsl.python_component&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;My awesome component&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;description&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;Come and play&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_python_func&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;str&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;str&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;str&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;
  &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use
&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.compiler.html#kfp.compiler.build_python_component&#34;&gt;&lt;code&gt;kfp.compiler.build_python_component&lt;/code&gt;&lt;/a&gt;
to create a container image for the component.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;my_op&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;compiler&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;build_python_component&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;component_func&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_python_func&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;staging_gcs_path&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;OUTPUT_DIR&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;target_image&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TARGET_IMAGE&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write a pipeline function using the Kubeflow Pipelines DSL to define the
pipeline and include all the pipeline components. Use the &lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.pipeline&#34;&gt;&lt;code&gt;kfp.dsl.pipeline&lt;/code&gt;
decorator&lt;/a&gt;
to build a pipeline from your pipeline function, by adding
the &lt;code&gt;@kfp.dsl.pipeline&lt;/code&gt; annotation to your pipeline function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#5c35cc;font-weight:bold&#34;&gt;@kfp.dsl.pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;My pipeline&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;description&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;My machine learning pipeline&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;param_1&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;PipelineParam&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;param_2&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;PipelineParam&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;):&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;my_step&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_op&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compile the pipeline to generate a compressed YAML definition of the
pipeline. The Kubeflow Pipelines service converts the static configuration
into a set of Kubernetes resources for execution.&lt;/p&gt;
&lt;p&gt;To compile the pipeline, you can choose one of the following
options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use the
&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.compiler.html#kfp.compiler.Compiler&#34;&gt;&lt;code&gt;kfp.compiler.Compiler.compile&lt;/code&gt;&lt;/a&gt;
method:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;compiler&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Compiler&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;compile&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;  
  &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline.zip&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Alternatively, use the &lt;code&gt;dsl-compile&lt;/code&gt; command on the command line.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;dsl-compile --py &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;[&lt;/span&gt;path/to/python/file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;]&lt;/span&gt; --output my-pipeline.zip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the Kubeflow Pipelines SDK to run the pipeline:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Client&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;
&lt;span style=&#34;color:#000&#34;&gt;my_experiment&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;create_experiment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;demo&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#000&#34;&gt;my_run&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;run_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_experiment&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; 
  &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline.zip&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can also choose to share your pipeline as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Upload the pipeline zip file to the Kubeflow Pipelines UI. For more
information about the UI, see the &lt;a href=&#34;/docs/pipelines/pipelines-quickstart/&#34;&gt;Kubeflow Pipelines quickstart
guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Upload the pipeline zip file to a shared repository. See the
&lt;a href=&#34;/docs/examples/shared-resources/&#34;&gt;reusable components and other shared resources&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;More about the above workflow&lt;/h4&gt;
For an example of the above workflow, see the
Jupyter notebook titled &lt;a href=&#34;https://github.com/kubeflow/pipelines/blob/master/samples/core/container_build/container_build.ipynb&#34;&gt;KubeFlow Pipelines container building&lt;/a&gt; on GitHub.
&lt;/div&gt;

&lt;p&gt;&lt;a id=&#34;lightweight-component&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;creating-lightweight-components&#34;&gt;Creating lightweight components&lt;/h3&gt;
&lt;p&gt;This section describes how to create lightweight Python components that do not
require you to build a container image. Lightweight components simplify
prototyping and rapid development, especially in a Jupyter notebook environment.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/pipelines-sdk-lightweight.svg&#34; 
alt=&#34;Building lightweight Python components&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;p&gt;Below is a more detailed explanation of the above diagram:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Write your code in a Python function. For example, write code to transform
data or train a model:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_python_func&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;str&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;str&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;str&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;
  &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use
&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.components.html#kfp.components.func_to_container_op&#34;&gt;&lt;code&gt;kfp.components.func_to_container_op&lt;/code&gt;&lt;/a&gt;
to convert your Python function into a pipeline component:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;my_op&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;components&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;func_to_container_op&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_python_func&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Optionally, you can write the component to a file that you can share or use
in another pipeline:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;my_op&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;components&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;func_to_container_op&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_python_func&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; 
  &lt;span style=&#34;color:#000&#34;&gt;output_component_file&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-op.component&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you stored your lightweight component in a file as described in the
previous step, use
&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.components.html#kfp.components.load_component_from_file&#34;&gt;&lt;code&gt;kfp.components.load_component_from_file&lt;/code&gt;&lt;/a&gt;
to load the component:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;my_op&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;components&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;load_component_from_file&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-op.component&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write a pipeline function using the Kubeflow Pipelines DSL to define the
pipeline and include all the pipeline components. Use the &lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.pipeline&#34;&gt;&lt;code&gt;kfp.dsl.pipeline&lt;/code&gt;
decorator&lt;/a&gt;
to build a pipeline from your pipeline function, by adding
the &lt;code&gt;@kfp.dsl.pipeline&lt;/code&gt; annotation to your pipeline function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#5c35cc;font-weight:bold&#34;&gt;@kfp.dsl.pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;My pipeline&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;description&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;My machine learning pipeline&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;param_1&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;PipelineParam&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;param_2&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;PipelineParam&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;):&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;my_step&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_op&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compile the pipeline to generate a compressed YAML definition of the
pipeline. The Kubeflow Pipelines service converts the static configuration
into a set of Kubernetes resources for execution.&lt;/p&gt;
&lt;p&gt;To compile the pipeline, you can choose one of the following
options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use the
&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.compiler.html#kfp.compiler.Compiler&#34;&gt;&lt;code&gt;kfp.compiler.Compiler.compile&lt;/code&gt;&lt;/a&gt;
method:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;compiler&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Compiler&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;compile&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;  
  &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline.zip&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Alternatively, use the &lt;code&gt;dsl-compile&lt;/code&gt; command on the command line.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;dsl-compile --py &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;[&lt;/span&gt;path/to/python/file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;]&lt;/span&gt; --output my-pipeline.zip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the Kubeflow Pipelines SDK to run the pipeline:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Client&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;
&lt;span style=&#34;color:#000&#34;&gt;my_experiment&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;create_experiment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;demo&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#000&#34;&gt;my_run&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;run_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_experiment&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; 
  &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline.zip&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;More about the above workflow&lt;/h4&gt;
&lt;p&gt;For more detailed instructions, see the guide to &lt;a href=&#34;/docs/pipelines/sdk/lightweight-python-components/&#34;&gt;building lightweight
components&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For an example, see the &lt;a href=&#34;https://github.com/kubeflow/pipelines/blob/master/samples/core/lightweight_component/lightweight_component.ipynb&#34;&gt;Lightweight Python components -
basics&lt;/a&gt;
notebook on GitHub.&lt;/p&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a id=&#34;prebuilt-component&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;using-prebuilt-reusable-components-in-your-pipeline&#34;&gt;Using prebuilt, reusable components in your pipeline&lt;/h3&gt;
&lt;p&gt;A reusable component is one that someone has built and made available for others
to use. To use the component in your pipeline, you need the YAML file that
defines the component.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/pipelines-sdk-reusable.svg&#34; 
alt=&#34;Using prebuilt, reusable components in your pipeline&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;p&gt;Below is a more detailed explanation of the above diagram:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Find the YAML file that defines the reusable component. For example, take a
look at the &lt;a href=&#34;/docs/examples/shared-resources/&#34;&gt;reusable components and other shared
resources&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use
&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.components.html#kfp.components.load_component_from_url&#34;&gt;&lt;code&gt;kfp.components.load_component_from_url&lt;/code&gt;&lt;/a&gt;
to load the component:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;my_op&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;components&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;load_component_from_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;https://path/to/component.yaml&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write a pipeline function using the Kubeflow Pipelines DSL to define the
pipeline and include all the pipeline components. Use the &lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.pipeline&#34;&gt;&lt;code&gt;kfp.dsl.pipeline&lt;/code&gt;
decorator&lt;/a&gt;
to build a pipeline from your pipeline function, by adding
the &lt;code&gt;@kfp.dsl.pipeline&lt;/code&gt; annotation to your pipeline function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#5c35cc;font-weight:bold&#34;&gt;@kfp.dsl.pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;My pipeline&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;description&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;My machine learning pipeline&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;param_1&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;PipelineParam&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;param_2&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;PipelineParam&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;):&lt;/span&gt;
  &lt;span style=&#34;color:#000&#34;&gt;my_step&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;my_op&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compile the pipeline to generate a compressed YAML definition of the
pipeline. The Kubeflow Pipelines service converts the static configuration
into a set of Kubernetes resources for execution.&lt;/p&gt;
&lt;p&gt;To compile the pipeline, you can choose one of the following
options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use the
&lt;a href=&#34;https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.compiler.html#kfp.compiler.Compiler&#34;&gt;&lt;code&gt;kfp.compiler.Compiler.compile&lt;/code&gt;&lt;/a&gt;
method:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;compiler&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Compiler&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;compile&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;  
  &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline.zip&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Alternatively, use the &lt;code&gt;dsl-compile&lt;/code&gt; command on the command line.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;dsl-compile --py &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;[&lt;/span&gt;path/to/python/file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;]&lt;/span&gt; --output my-pipeline.zip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the Kubeflow Pipelines SDK to run the pipeline:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kfp&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Client&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;
&lt;span style=&#34;color:#000&#34;&gt;my_experiment&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;create_experiment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;demo&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#000&#34;&gt;my_run&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;client&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;run_pipeline&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my_experiment&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; 
  &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;my-pipeline.zip&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;More about the above workflow&lt;/h4&gt;
For an example, see the
&lt;a href=&#34;https://github.com/kubeflow/pipelines/blob/master/samples/core/xgboost_training_cm/xgboost_training_cm.py&#34;&gt;&lt;code&gt;xgboost-training-cm.py&lt;/code&gt;&lt;/a&gt;
pipeline sample on GitHub. The pipeline creates an XGBoost model using
structured data in CSV format.
&lt;/div&gt;

&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/pipelines/sdk/parameters/&#34;&gt;Use pipeline parameters&lt;/a&gt; to pass data between components.&lt;/li&gt;
&lt;li&gt;Learn how to &lt;a href=&#34;/docs/pipelines/sdk/dsl-recursion&#34;&gt;write recursive functions in the
DSL&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Build a &lt;a href=&#34;/docs/pipelines/sdk/component-development/&#34;&gt;reusable component&lt;/a&gt; for
sharing in multiple pipelines.&lt;/li&gt;
&lt;li&gt;Find out how to use the DSL to &lt;a href=&#34;/docs/pipelines/sdk/manipulate-resources/&#34;&gt;manipulate Kubernetes resources dynamically
as steps of your pipeline&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Jupyter Notebooks</title>
      <link>/docs/components/jupyter/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/jupyter/</guid>
      <description>
        
        
        &lt;p&gt;Your Kubeflow deployment includes support for spawning and managing Jupyter
notebooks. See how to &lt;a href=&#34;/docs/notebooks/setup/&#34;&gt;set up your notebooks&lt;/a&gt; and
&lt;a href=&#34;/docs/notebooks/&#34;&gt;explore more notebook functionality&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Kubeflow on Linux</title>
      <link>/docs/started/workstation/getting-started-linux/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/started/workstation/getting-started-linux/</guid>
      <description>
        
        
        &lt;p&gt;For Linux systems you have options for servers (physical or virtual) and desktops.
The server options apply to the desktop as well.&lt;/p&gt;
&lt;h2 id=&#34;linux-server&#34;&gt;Linux server&lt;/h2&gt;
&lt;p&gt;For Linux servers you can install Kubeflow natively. This is perfect for
Linux hosts and virtual machines, such as VMs in OpenStack, VMware or public clouds like
GCP, AWS and Azure.&lt;/p&gt;
&lt;h3 id=&#34;microk8s&#34;&gt;MicroK8s&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://microk8s.io&#34;&gt;MicroK8s&lt;/a&gt; runs natively on most Linux distributions.&lt;/p&gt;
&lt;p&gt;Follow the installation guide for &lt;a href=&#34;/docs/started/workstation/getting-started-multipass/&#34;&gt;Kubeflow with MicroK8s&lt;/a&gt; to set up MicroK8s and enable Kubeflow.&lt;/p&gt;
&lt;h2 id=&#34;linux-desktop&#34;&gt;Linux desktop&lt;/h2&gt;
&lt;h3 id=&#34;kubeflow-appliance&#34;&gt;Kubeflow appliance&lt;/h3&gt;
&lt;p&gt;A Kubeflow appliance is a virtual machine that has Kubeflow already installed. Once the
necessary supporting software is installed no further installation steps are required.&lt;/p&gt;
&lt;h4 id=&#34;minikf&#34;&gt;MiniKF&lt;/h4&gt;
&lt;p&gt;MiniKF is a predefined virtual machine that installs onto VirtualBox through Vagrant.
The only following applications are required to use MiniKF:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href=&#34;https://www.vagrantup.com/downloads.html&#34;&gt;Vagrant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Install &lt;a href=&#34;https://www.virtualbox.org/wiki/Downloads&#34;&gt;Virtual Box&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The full set of instructions are available on the
&lt;a href=&#34;/docs/started/workstation/getting-started-minikf/&#34;&gt;MiniKF getting started&lt;/a&gt; page.&lt;/p&gt;
&lt;h3 id=&#34;linux-appliance&#34;&gt;Linux appliance&lt;/h3&gt;
&lt;p&gt;A Linux appliance is a virtual machine that holds the linux operating system. From there
you have complete choice over Kubernetes and Kubeflow, which offers the greatest degree
of flexibility. You only need to install a single application to follow this path:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href=&#34;https://multipass.run/#install&#34;&gt;Multipass&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The instructions on &lt;a href=&#34;/docs/started/workstation/getting-started-multipass/&#34;&gt;Multipass and MicroK8s getting started&lt;/a&gt;
page will complete this path.&lt;/p&gt;
&lt;h3 id=&#34;kubernetes-appliance&#34;&gt;Kubernetes appliance&lt;/h3&gt;
&lt;p&gt;A Kubernetes appliance is a virtual machine that has a
Kubernetes cluster already installed. After starting the virtual machine, you need
to install Kubeflow. This option gives you full control over your Kubeflow setup.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href=&#34;https://kubernetes.io/docs/setup/learning-environment/minikube/&#34;&gt;Minikube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Follow the instructions on &lt;a href=&#34;/docs/started/workstation/minikube-linux/&#34;&gt;deploying with MiniKube on
Linux&lt;/a&gt; to complete this path.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
