<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;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;th&gt;Kubeflow 1.1&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;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;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;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;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;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;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.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;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;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 reported 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 Google Cloud 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 in Cloud IAM (Identity and Access Management).
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. Refer to 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/api/servicemanagement.googleapis.com&#34;&gt;Service Management 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/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/components/fairing/&#34;&gt;Fairing&lt;/a&gt; in your Kubeflow cluster)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can also enable these APIs by running the following command in Cloud Shell:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcloud services enable \
  compute.googleapis.com \
  container.googleapis.com \
  iam.googleapis.com \
  servicemanagement.googleapis.com \
  cloudresourcemanager.googleapis.com \
  ml.googleapis.com

# Cloud Build API is optional, you need it if using Fairing.
# gcloud services enable cloudbuild.googleapis.com
&lt;/code&gt;&lt;/pre&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;li&gt;
&lt;p&gt;Initialize your project to ready it for Anthos Service Mesh installation.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl --request POST \
  --header &amp;quot;Authorization: Bearer $(gcloud auth print-access-token)&amp;quot; \
  --data &#39;&#39; \
  https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Refer to &lt;a href=&#34;https://cloud.google.com/service-mesh/docs/archive/1.4/docs/gke-install-new-cluster#setting_credentials_and_permissions&#34;&gt;Anthos Service Mesh documentation&lt;/a&gt; for details.&lt;/p&gt;
&lt;p&gt;If you encounter a &lt;code&gt;Workload Identity Pool does not exist&lt;/code&gt; error, refer to the following issue:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/website/issues/2121&#34;&gt;kubeflow/website #2121&lt;/a&gt;
describes that creating and then removing a temporary Kubernetes cluster may
be needed for projects that haven&amp;rsquo;t had a cluster set up beforehand.&lt;/li&gt;
&lt;/ul&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;a href=&#34;/docs/gke/deploy/oauth-setup&#34;&gt;Set up an OAuth credential&lt;/a&gt; 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.&lt;/li&gt;
&lt;li&gt;Follow the &lt;a href=&#34;/docs/gke/deploy/deploy-cli&#34;&gt;instructions&lt;/a&gt; to deploy Kubeflow using kubectl, kustomize and kpt.&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 that utilizes machine learning (ML) is to have
their ML models successfully run in production and generate value to the
business. But what does it take to reach that point?&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;To simplify these requirements and challenges, we created 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. This means 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.&lt;/p&gt;
&lt;p&gt;Kubeflow and Kubernetes provide consistent and efficient operations and
optimized infrastructure. Your researchers can have more time to focus on the
valuable tasks of developing domain specific intellectual property rather than
debugging DevOps configuration issues.&lt;/p&gt;
&lt;p&gt;Kubeflow’s core and ecosystem critical user journeys (CUJs) provide software
solutions for end-to-end workflows: 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.&lt;/p&gt;
&lt;p&gt;In addition, Kubeflow 1.1 provides stable software sub-systems for model
training, such as Jupyter notebooks and popular ML training operators—
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.&lt;/p&gt;
&lt;p&gt;Kubeflow has also 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Out of date&lt;/h4&gt;
This guide contains outdated information pertaining to Kubeflow 1.0. This guide
needs to be updated for Kubeflow 1.1.
&lt;/div&gt;

&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;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Out of date&lt;/h4&gt;
This guide contains outdated information pertaining to Kubeflow 1.0. This guide
needs to be updated for Kubeflow 1.1.
&lt;/div&gt;

&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-iks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/started/cloud/getting-started-iks/</guid>
      <description>
        
        
        &lt;p&gt;Please refer to the &lt;a href=&#34;/docs/ibm/deploy/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 1.1. 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;.
See examples running KFServing on &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/istio-dex&#34;&gt;Istio/Dex&lt;/a&gt;. For installation on major cloud providers with Kubeflow, please follow their installation docs.&lt;/p&gt;
&lt;p&gt;Kubeflow 1.1 includes KFServing v0.3, where the focus has been on providing more stability by doing a major move to KNative v1 APIs. Additionally, we added GPU support for PyTorch model servers, and pickled model format support for SKLearn. There were other enhancements to routing, payload logging, including bug fixes etc., details of which can be found &lt;a href=&#34;https://github.com/kubeflow/kfserving/releases/tag/v0.3.0&#34;&gt;here&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;h3 id=&#34;deploy-models-with-out-of-the-box-model-servers&#34;&gt;Deploy models with out-of-the-box model servers&lt;/h3&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;ONNXRuntime&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;deploy-models-with-custom-model-servers&#34;&gt;Deploy models with custom model servers&lt;/h3&gt;
&lt;ul&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/bentoml&#34;&gt;BentoML&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;deploy-models-on-gpu&#34;&gt;Deploy models on GPU&lt;/h3&gt;
&lt;ul&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/triton&#34;&gt;Nvidia Triton Inference Server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;autoscaling-and-rollouts&#34;&gt;Autoscaling and Rollouts&lt;/h3&gt;
&lt;ul&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/rollouts&#34;&gt;Canary Rollout&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;model-explainability-and-outlier-detection&#34;&gt;Model explainability and outlier detection&lt;/h3&gt;
&lt;ul&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/outlier-detection/alibi-detect/cifar10&#34;&gt;OutlierDetection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;integrations&#34;&gt;Integrations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/docs/samples/transformer/image_transformer&#34;&gt;Transformer&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/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/logger&#34;&gt;Request/Response logging&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;model-storages&#34;&gt;Model Storages&lt;/h3&gt;
&lt;ul&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/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;h3 id=&#34;sample-notebooks&#34;&gt;Sample notebooks&lt;/h3&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/blob/master/docs/KFSERVING_DEBUG_GUIDE.md&#34;&gt;Debugging guide&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;li&gt;&lt;a href=&#34;https://kccncna19.sched.com/event/UaZo/introducing-kfserving-serverless-model-serving-on-kubernetes-ellis-bigelow-google-dan-sun-bloomberg&#34;&gt;Kubecon Introducing KFServing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kccncna19.sched.com/event/UaVw/advanced-model-inferencing-leveraging-knative-istio-and-kubeflow-serving-animesh-singh-ibm-clive-cox-seldon&#34;&gt;Kubecon Advanced KFServing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.nvidia.com/gtc/2020/video/s22459-vid&#34;&gt;Nvidia GTC Accelerate and Autoscale Deep Learning Inference on GPUs&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;standalone-kfserving&#34;&gt;Standalone KFServing&lt;/h2&gt;
&lt;h3 id=&#34;install-knativeistio&#34;&gt;Install Knative/Istio&lt;/h3&gt;
&lt;p&gt;Knative Serving (v0.11.2 +), Istio (v1.1.7+), and Cert Manager(v0.12.0+) should be available on your Kubernetes cluster.
For installing KFServing prerequisites, refer to the &lt;a href=&#34;https://github.com/kubeflow/kfserving#prerequisites&#34;&gt;README section&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;kfserving-installation&#34;&gt;KFServing installation&lt;/h3&gt;
&lt;p&gt;Once you meet the above prerequisites KFServing can be &lt;a href=&#34;https://github.com/kubeflow/kfserving#standalone-kfserving-installation&#34;&gt;installed standalone&lt;/a&gt;. Check the &lt;a href=&#34;https://github.com/kubeflow/kfserving/tree/master/install&#34;&gt;KFServing &lt;code&gt;install&lt;/code&gt; directory&lt;/a&gt; for other available releases.&lt;/p&gt;
&lt;h3 id=&#34;monitoring&#34;&gt;Monitoring&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://knative.dev/docs/serving/installing-logging-metrics-traces/&#34;&gt;Install Metrics, Logging and Tracing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://knative.dev/docs/serving/accessing-metrics/&#34;&gt;Accessing metrics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://knative.dev/docs/serving/accessing-logs/&#34;&gt;Accessing logs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://knative.dev/docs/serving/accessing-traces/&#34;&gt;Accessing traces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://knative.dev/docs/serving/debugging-performance-issues/&#34;&gt;Debugging performance issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;use-sdk&#34;&gt;Use SDK&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.1.0.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.1.0.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.1.0 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.1.0&#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.1.0_&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.1-branch/kfdef/kfctl_k8s_istio.v1.1.0.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.1-branch/kfdef/kfctl_k8s_istio.v1.1.0.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_k8s_istio.v1.1.0.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.1.0.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.1-branch/kfdef/kfctl_k8s_istio.v1.1.0.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_k8s_istio.v1.1.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;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;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;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/gke/deploy/management-setup/&#34;&gt;Set up your management cluster&lt;/a&gt;.&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;li&gt;It is the PR &lt;strong&gt;authors&lt;/strong&gt; responsibility to drive a PR to resolution. This means if the PR &lt;strong&gt;reviewers&lt;/strong&gt; are unresponsive they should escalate as noted below
&lt;ul&gt;
&lt;li&gt;e.g ping &lt;strong&gt;reviewers&lt;/strong&gt; in a timely manner to get it reviewed&lt;/li&gt;
&lt;li&gt;If the &lt;strong&gt;reviewers&lt;/strong&gt; don&amp;rsquo;t respond look at the OWNERs file in root and ping &lt;strong&gt;approvers&lt;/strong&gt; listed there&lt;/li&gt;
&lt;/ul&gt;
&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/approve&#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-issue&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/blunderbuss&#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: Management cluster setup</title>
      <link>/docs/gke/deploy/management-setup/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/gke/deploy/management-setup/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to setup a management cluster which you will use to deploy one or more instances of Kubeflow.&lt;/p&gt;
&lt;p&gt;The management cluster is used to run &lt;a href=&#34;https://cloud.google.com/config-connector/docs/overview&#34;&gt;Cloud Config Connector&lt;/a&gt;. Cloud Config Connector is a Kubernetes addon that allows you to manage Google Cloud resources through Kubernetes.&lt;/p&gt;
&lt;p&gt;While the management cluster can be deployed in the same project as your Kubeflow cluster, typically you will want to deploy
it in a separate project used for administering one or more Kubeflow instances.&lt;/p&gt;
&lt;p&gt;Optionally, the cluster can be configured with &lt;a href=&#34;https://cloud.google.com/anthos-config-management/docs&#34;&gt;Anthos Config Management&lt;/a&gt;
to manage Google Cloud infrastructure using GitOps.&lt;/p&gt;
&lt;h2 id=&#34;faqs&#34;&gt;FAQs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Where is &lt;code&gt;kfctl&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;&lt;code&gt;kfctl&lt;/code&gt; is no longer being used to apply resources for Google Cloud, because required functionalities are now supported by generic tools including &lt;a href=&#34;https://www.gnu.org/software/make/&#34;&gt;Make&lt;/a&gt;, &lt;a href=&#34;https://kustomize.io&#34;&gt;Kustomize&lt;/a&gt;, &lt;a href=&#34;https://googlecontainertools.github.io/kpt/&#34;&gt;kpt&lt;/a&gt;, and &lt;a href=&#34;https://cloud.google.com/config-connector/docs/overview&#34;&gt;Cloud Config Connector&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Why do we use an extra management cluster to manage Google Cloud resources?&lt;/p&gt;
&lt;p&gt;The management cluster is very lightweight cluster that runs &lt;a href=&#34;https://cloud.google.com/config-connector/docs/overview&#34;&gt;Cloud Config Connector&lt;/a&gt;. Cloud Config Connector makes it easier to configure Google Cloud resources using YAML and Kustomize.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a more detailed explanation of the changes affecting Kubeflow 1.1 on Google Cloud, read &lt;a href=&#34;https://github.com/kubeflow/gcp-blueprints/issues/123&#34;&gt;kubeflow/gcp-blueprints #123&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;install-the-required-tools&#34;&gt;Install the required tools&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install gcloud components&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcloud components install kpt anthoscli beta
gcloud components update
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;a href=&#34;https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv3.2.1&#34;&gt;Kustomize v3.2.1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Kubeflow is not compatible with Kustomize versions above 3.2.1. Read &lt;a href=&#34;https://github.com/kubeflow/manifests/issues/538&#34;&gt;this GitHub issue&lt;/a&gt; for the latest status.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;a href=&#34;https://github.com/mikefarah/yq#install&#34;&gt;yq&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;setting-up-the-management-cluster&#34;&gt;Setting up the management cluster&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Fetch the management blueprint&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kpt pkg get https://github.com/kubeflow/gcp-blueprints.git/management@v1.1.0 ./
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fetch the upstream manifests&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ./management
make get-pkg
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open up the &lt;strong&gt;Makefile&lt;/strong&gt; at &lt;code&gt;./management/Makefile&lt;/code&gt; and edit the &lt;code&gt;set-values&lt;/code&gt; rule to set values for the name, project, and location of your management; when you are done the section should look like&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; set-values: 
 kpt cfg set ./instance name NAME
 kpt cfg set ./instance location LOCATION
 kpt cfg set ./instance gcloud.core.project PROJECT
  
 kpt cfg set ./upstream/management name NAME
 kpt cfg set ./upstream/management location LOCATION
 kpt cfg set ./upstream/management gcloud.core.project PROJECT

&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Where &lt;strong&gt;NAME&lt;/strong&gt;, &lt;strong&gt;LOCATION&lt;/strong&gt;, &lt;strong&gt;PROJECT&lt;/strong&gt; should be the actual values for your deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the values&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make set-values
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hydrate and apply the manifests to create the cluster&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make apply
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a kubeconfig context for the cluster&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make create-ctxt
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install CNRM&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make apply-kcc
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;This will install CNRM in your cluster&lt;/li&gt;
&lt;li&gt;It will create the Google Cloud service account &lt;strong&gt;${NAME}-cnrm-system@${PROJECT}.iam.gserviceaccount.com&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;authorize-cnrm-for-each-project&#34;&gt;Authorize CNRM for each project&lt;/h3&gt;
&lt;p&gt;In the last step we created the GCP service account &lt;strong&gt;${NAME}-cnrm-system@${PROJECT}.iam.gserviceaccount.com&lt;/strong&gt;
this is the service account that CNRM will use to create any GCP resources. Consequently
you need to grant this GCP service account sufficient privileges to create the desired
resources in one or more projects (called managed projects, read &lt;a href=&#34;https://github.com/kubeflow/gcp-blueprints/tree/master/management/instance/managed-project&#34;&gt;more&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The easiest way to do this is to grant the Google Cloud service account owner permissions on one or more projects&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Set the managed project&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kpt cfg set ./instance managed-project ${MANAGED-PROJECT}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the policy&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;anthoscli apply -f ./instance/managed-project/iam.yaml 
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://cloud.google.com/config-connector/docs/reference/resources&#34;&gt;CNRM Reference Documentation&lt;/a&gt;&lt;/p&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;Out of date&lt;/h4&gt;
This guide contains outdated information pertaining to Kubeflow 1.0. This guide
needs to be updated for Kubeflow 1.1.
&lt;/div&gt;

&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;WG AutoML (&lt;a href=&#34;https://github.com/kubeflow/community/tree/master/wg-automl&#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/C018PMV53NW&#34;&gt;#wg-automl&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;WG Training (&lt;a href=&#34;https://github.com/kubeflow/community/tree/master/wg-training&#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/C018N3M6QKB&#34;&gt;#wg-training&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;/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, neural architecture search)&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 kubectl and kpt</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 &lt;code&gt;kubectl&lt;/code&gt; and &lt;a href=&#34;https://googlecontainertools.github.io/kpt/&#34;&gt;kpt&lt;/a&gt; to
deploy Kubeflow on Google Cloud.&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;You must have created a management cluster and installed Config Connector.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you don&amp;rsquo;t have a management cluster follow the &lt;a href=&#34;../management-setup/&#34;&gt;instructions&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Your management cluster must have a namespace setup to administer the Google Cloud project where
Kubeflow will be deployed. Follow the &lt;a href=&#34;../management-setup/&#34;&gt;instructions&lt;/a&gt; to create
one if you haven&amp;rsquo;t already.&lt;/p&gt;
&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 Google Cloud 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;h3 id=&#34;install-the-required-tools&#34;&gt;Install the required tools&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;a href=&#34;https://cloud.google.com/sdk/&#34;&gt;gcloud&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install gcloud components&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcloud components install kpt anthoscli beta
gcloud components update
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;a href=&#34;https://kubernetes.io/docs/tasks/tools/install-kubectl/&#34;&gt;kubectl&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;a href=&#34;https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv3.2.1&#34;&gt;Kustomize v3.2.1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Note, Kubeflow is not compatible with later versions of Kustomize. Read &lt;a href=&#34;https://github.com/kubeflow/manifests/issues/538&#34;&gt;this GitHub issue&lt;/a&gt; for the latest status.&lt;/p&gt;
&lt;p&gt;To deploy Kustomize v3.2.1 on a Linux machine, run the following commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv3.2.1/kustomize_kustomize.v3.2.1_linux_amd64
mv kustomize_kustomize.v3.2.1_linux_amd64 kustomize
chmod +x ./kustomize
   
# We need to add the kustomize package to your $PATH env variable
sudo mv ./kustomize /usr/local/bin/kustomize
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then, to verify the installation, run &lt;code&gt;kustomize version&lt;/code&gt;. You should see &lt;code&gt;Version:kustomize/v3.2.1&lt;/code&gt; in the output if you&amp;rsquo;ve successfully deployed Kustomize.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;a href=&#34;https://github.com/mikefarah/yq&#34;&gt;yq&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;GO111MODULE=on go get github.com/mikefarah/yq/v3
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;If you don&amp;rsquo;t have &lt;a href=&#34;https://golang.org&#34;&gt;Go&lt;/a&gt; installed you can download
a binary from &lt;a href=&#34;https://github.com/mikefarah/yq/releases&#34;&gt;yq&amp;rsquo;s GitHub releases&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Follow the instructions from &lt;a href=&#34;https://cloud.google.com/service-mesh/docs/archive/1.4/docs/gke-install-new-cluster#preparing_to_install_anthos_service_mesh&#34;&gt;Preparing to install Anthos Service Mesh&lt;/a&gt; to install &lt;code&gt;istioctl&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Note, the &lt;code&gt;istioctl&lt;/code&gt; downloaded from above instructions is specific to Anthos Service Mesh. It is different from the &lt;code&gt;istioctl&lt;/code&gt; you can download on &lt;a href=&#34;https://istio.io/&#34;&gt;https://istio.io/&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;ol&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;/ol&gt;
&lt;h2 id=&#34;fetch-packages-using-kpt&#34;&gt;Fetch packages using kpt&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Fetch the blueprint&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kpt pkg get https://github.com/kubeflow/gcp-blueprints.git/kubeflow@v1.1.0 ./${KFDIR}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;You can choose any name you would like for the directory ${KFDIR}&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change to the Kubeflow directory&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ${KFDIR}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fetch Kubeflow manifests&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make get-pkg
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;This generates an error like the one below but you can ignore it;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kpt pkg get https://github.com/jlewi/manifests.git@blueprints ./upstream
fetching package / from https://github.com/jlewi/manifests to upstream/manifests
Error: resources must be annotated with config.kubernetes.io/index to be written to files
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;This is being tracked in &lt;a href=&#34;https://github.com/GoogleContainerTools/kpt/issues/539&#34;&gt;GoogleContainerTools/kpt#539&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configure-kubeflow&#34;&gt;Configure Kubeflow&lt;/h2&gt;
&lt;p&gt;There are certain parameters that you must define in order to configure how and where
kubeflow is defined. These are described in the table below.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;kpt setter&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;mgmt-ctxt&lt;/td&gt;
&lt;td&gt;This is the name of the KUBECONFIG context for the management cluster; this kubecontext will be used to create CNRM resources for your Kubeflow deployment. &lt;strong&gt;The context must set the namespace to the namespace in your CNRM cluster where you are creating CNRM resources for the managed project.&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gcloud.core.project&lt;/td&gt;
&lt;td&gt;The project you want to deploy in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;location&lt;/td&gt;
&lt;td&gt;The zone or region you want to deploy in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gcloud.compute.region&lt;/td&gt;
&lt;td&gt;The region you are deploying in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gcloud.compute.zone&lt;/td&gt;
&lt;td&gt;The zone to use for zonal resources; must be in gcloud.compute.region&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Location can be a zone or a region depending on whether you want a regional cluster&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Currently, Kubeflow Pipelines doesn&amp;rsquo;t work with regional deployments. For more, go to &lt;a href=&#34;https://github.com/kubeflow/gcp-blueprints/issues/6&#34;&gt;kubeflow/gcp-blueprints#6&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;strong&gt;Makefile&lt;/strong&gt; at &lt;code&gt;${KFDIR}/kubeflow/Makefile&lt;/code&gt; contains a rule &lt;code&gt;set-values&lt;/code&gt; with appropriate &lt;code&gt;kpt cfg&lt;/code&gt; commands to set the values
of the parameters&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You need to edit the makefile at &lt;code&gt;${KFDIR}/kubeflow/Makefile&lt;/code&gt; to set the parameters to the desired values.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Note there are multiple invocations of &lt;code&gt;kpt cfg set&lt;/code&gt; on different directories to
work around &lt;a href=&#34;https://github.com/GoogleContainerTools/kpt/issues/541&#34;&gt;GoogleContainerTools/kpt#541&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You need to configure the kubectl context provided in &lt;code&gt;mgmt-ctxt&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Choose the management cluster context&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 config use-context &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;mgmt&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;-ctxt&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a namespace in your management cluster for the managed project if you haven&amp;rsquo;t done so.&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 create namespace &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;PROJECT&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make the managed project&amp;rsquo;s namespace default of the context:&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 config set-context --current --namespace &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;PROJECT&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you haven&amp;rsquo;t previously created an OAuth client for IAP then follow
the &lt;a href=&#34;https://www.kubeflow.org/docs/gke/deploy/oauth-setup/&#34;&gt;directions&lt;/a&gt; to setup
your consent screen and oauth client.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unfortunately &lt;a href=&#34;https://cloud.google.com/kubernetes-engine/docs/concepts/backendconfig&#34;&gt;GKE&amp;rsquo;s BackendConfig&lt;/a&gt;
currently doesn&amp;rsquo;t support creating &lt;a href=&#34;https://cloud.google.com/iap/docs/programmatic-oauth-clients&#34;&gt;IAP OAuth clients programmatically&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set environment variables with OAuth Client ID and Secret for IAP&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CLIENT_ID=&amp;lt;Your CLIENT_ID&amp;gt;
export CLIENT_SECRET=&amp;lt;Your CLIENT_SECRET&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Invoke the make rule to set the kpt setters&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make set-values
&lt;/code&gt;&lt;/pre&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;deploy-kubeflow&#34;&gt;Deploy Kubeflow&lt;/h2&gt;
&lt;p&gt;To deploy Kubeflow, run the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make apply
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If resources can&amp;rsquo;t be created because &lt;code&gt;webhook.cert-manager.io&lt;/code&gt; is unavailable wait and
then rerun &lt;code&gt;make apply&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This issue is being tracked in &lt;a href=&#34;https://github.com/kubeflow/manifests/issues/1234&#34;&gt;kubeflow/manifests#1234&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If resources can&amp;rsquo;t be created with an error message like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;error: unable to recognize &amp;quot;.build/application/app.k8s.io_v1beta1_application_application-controller-kubeflow.yaml&amp;quot;: no matches for kind &amp;quot;Application&amp;quot; in version &amp;quot;app.k8s.io/v1beta1”
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This issue occurs when the CRD endpoint isn&amp;rsquo;t established in the Kubernetes API server when the CRD&amp;rsquo;s custom object is applied.
This issue is expected and can happen multiple times for different kinds of resource. To resolve this issue, try running &lt;code&gt;make apply&lt;/code&gt; again.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&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;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;To access the Kubeflow central dashboard, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Use the following command to grant yourself the &lt;a href=&#34;https://cloud.google.com/iap/docs/managing-access&#34;&gt;IAP-secured Web App User&lt;/a&gt; role:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcloud projects add-iam-policy-binding [PROJECT] --member=user:[EMAIL] --role=roles/iap.httpsResourceAccessor
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note, you need the &lt;code&gt;IAP-secured Web App User&lt;/code&gt; role even if you are already an owner or editor of the project. &lt;code&gt;IAP-secured Web App User&lt;/code&gt; role is not implied by the &lt;code&gt;Project Owner&lt;/code&gt; or &lt;code&gt;Project Editor&lt;/code&gt; roles.&lt;/p&gt;
&lt;/li&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. Refer to this guide on
&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;update-kubeflow&#34;&gt;Update Kubeflow&lt;/h2&gt;
&lt;p&gt;To update Kubeflow&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Edit the Makefile at &lt;code&gt;${KFDIR}/kubeflow/Makefile&lt;/code&gt; and change &lt;code&gt;MANIFESTS_URL&lt;/code&gt; to point at the version of Kubeflow manifests you
want to use&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Refer to the &lt;a href=&#34;https://googlecontainertools.github.io/kpt/reference/pkg/&#34;&gt;kpt docs&lt;/a&gt; for
more info about supported dependencies&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the local copies&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make update
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Redeploy&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make apply
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To evaluate the changes before deploying them you can run &lt;code&gt;make hydrate&lt;/code&gt; and then compare the contents
of &lt;code&gt;.build&lt;/code&gt; to what is currently deployed.&lt;/p&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;application-layout&#34;&gt;Application layout&lt;/h3&gt;
&lt;p&gt;Your Kubeflow application directory &lt;strong&gt;${KFDIR}&lt;/strong&gt; contains the following files and
directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;upstream&lt;/strong&gt; is a directory containing kustomize packages for deploying Kubeflow&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This directory contains the upstream configurations on which your deployment
is based&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;instance&lt;/strong&gt; is a directory that defines overlays that are applied to the upstream
configurations in order to customize Kubeflow for your use case.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;gcp_config&lt;/strong&gt; is a kustomize package defining all the Google Cloud resources needed for Kubeflow
using &lt;a href=&#34;https://cloud.google.com/config-connector/docs/overview&#34;&gt;Cloud Config Connector&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can edit this kustomize package in order to customize the Google Cloud resources for
your purposes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;kustomize&lt;/strong&gt; contains kustomize packages for the various Kubernetes applications
to be installed on your Kubeflow cluster&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;.build&lt;/strong&gt; is a directory that will contain the hydrated manifests outputted by
the &lt;code&gt;make&lt;/code&gt; rules&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;source-control&#34;&gt;Source Control&lt;/h3&gt;
&lt;p&gt;It is recommended that you check in your entire &lt;strong&gt;${KFDIR}&lt;/strong&gt; into source control.&lt;/p&gt;
&lt;p&gt;Checking in &lt;strong&gt;.build&lt;/strong&gt; is recommended so you can easily see differences in manifests before applying them.&lt;/p&gt;
&lt;h3 id=&#34;google-cloud-service-accounts&#34;&gt;Google Cloud service accounts&lt;/h3&gt;
&lt;p&gt;The kfctl deployment process creates three service accounts in your
Google Cloud 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
Google Cloud 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;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;Learn how to &lt;a href=&#34;/docs/gke/deploy/delete-cli/&#34;&gt;delete your Kubeflow deployment using the CLI&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;To add users to Kubeflow, go to &lt;a href=&#34;/docs/gke/customizing-gke/#add-users-to-kubeflow&#34;&gt;a dedicated section in Customizing Kubeflow on GKE&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;To taylor your Kubeflow deployment on GKE, go to &lt;a href=&#34;/docs/gke/customizing-gke/&#34;&gt;Customizing Kubeflow on GKE&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;For troubleshooting Kubeflow deployments on GKE, go to the &lt;a href=&#34;/docs/gke/troubleshooting-gke/&#34;&gt;Troubleshooting deployments&lt;/a&gt; guide.&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.1.0 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.1.0&#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.1.0_&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;# 1. 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;

# 2. Use the following kfctl configuration file for the AWS setup without authentication:
export CONFIG_URI=&amp;quot;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_aws.v1.1.0.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.1-branch/kfdef/kfctl_aws_cognito.v1.1.0.yaml&amp;quot;

# 3. Set an environment variable for your AWS cluster name.
export AWS_CLUSTER_NAME=&amp;lt;YOUR EKS CLUSTER NAME&amp;gt;

# 4. Create the directory you want to store deployment, this has to be ${AWS_CLUSTER_NAME}
mkdir ${AWS_CLUSTER_NAME} &amp;amp;&amp;amp; cd ${AWS_CLUSTER_NAME}

# 5. Download your configuration files, so that you can customize the configuration before deploying Kubeflow.
wget -O kfctl_aws.yaml $CONFIG_URI
&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.1-branch/kfdef/kfctl_aws.v1.1.0.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.1-branch/kfdef/kfctl_aws_cognito.v1.1.0.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;${AWS_CLUSTER_NAME}&lt;/strong&gt; - The name of your eks cluster.
This will be picked by &lt;code&gt;kfctl&lt;/code&gt; and set value to &lt;code&gt;metadata.name&lt;/code&gt;.
&lt;code&gt;alb-ingress-controller&lt;/code&gt; requires correct value to provision application load balancers.
Alb will be only created with correct cluster name.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configure-kubeflow&#34;&gt;Configure Kubeflow&lt;/h2&gt;
&lt;p&gt;Since 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-${region}-${cluster_name}&lt;/code&gt; and &lt;code&gt;kf-user-${region}-${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-${region}-${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-${region}-${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-${region}-${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_URI}&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;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;kfctl_aws.yaml&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;p&gt;By default, the username is set to &lt;code&gt;admin@kubeflow.org&lt;/code&gt; and the password is &lt;code&gt;12341234&lt;/code&gt;. To secure your Kubeflow deployment, change this configuration.&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;kfctl apply -V -f kfctl_aws.yaml
&lt;/code&gt;&lt;/pre&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;Run the following command to get your Kubeflow service&amp;rsquo;s 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;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dex&lt;/strong&gt;
If you&amp;rsquo;re using basic authentication, 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, &lt;a href=&#34;/docs/aws/deploy/install-kubeflow/#add-static-users-for-basic-auth&#34;&gt;add static users for basic auth&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cognito&lt;/strong&gt;
To secure an enterprise-level installation, use the &lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_aws_cognito.v1.1.0.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_aws_cognito.v1.1.0.yaml&lt;/a&gt; configuration file and &lt;a href=&#34;/docs/aws/authentication&#34;&gt;configure authentication and authorization&lt;/a&gt; for your cluster.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;add-static-users-for-basic-authentication&#34;&gt;Add static users for basic authentication&lt;/h3&gt;
&lt;p&gt;To add users to basic auth, you just have to edit the Dex ConfigMap under the key staticPasswords.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Edit the dex config with extra users.
kubectl edit configmap dex -n auth

# The original example of configmap as below
staticPasswords:
- email: admin@kubeflow.org
  hash: JDJhJDEwJEU4SGhqTnpBRzc2eWJJM1RHSDk5Ly4xcWxIckx6UGlJbzMzdW9BWHZ4VU5hTWxjZXAzVTBp
  username: admin
  userID: 08a8684b-db88-4b73-90a9-3cd1661f5466

# If you want to add a static user (test@kubeflow.org: 123456789)
# The password (123456789) must be hashed with bcrypt with an at least 10 difficulty level.
# You can use an online tool like: https://passwordhashing.com/BCrypt
# After change, the example of configmap:
staticPasswords:
- email: admin@kubeflow.org
  hash: JDJhJDEwJEU4SGhqTnpBRzc2eWJJM1RHSDk5Ly4xcWxIckx6UGlJbzMzdW9BWHZ4VU5hTWxjZXAzVTBp
  username: admin
  userID: 08a8684b-db88-4b73-90a9-3cd1661f5466
- email: test@kubeflow.org
  hash: $2b$10$ow6fWbPojHUg56hInYmYXe.B7u3frcSR.kuUkQp2EzXs5t0xfMRtS
  username: test
  userID: 08a8684b-db88-4b73-90a9-3cd1661f5466

# After editing the config, restart Dex to pick up the changes in the ConfigMap
kubectl rollout restart deployment dex -n auth
&lt;/code&gt;&lt;/pre&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 create 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;test&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;test@amazon.com&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;blockquote&gt;
&lt;p&gt;Note: &lt;code&gt;spec.owner.name&lt;/code&gt; has to match your IDP user&amp;rsquo;s email.&lt;/p&gt;
&lt;/blockquote&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_URI}&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_URI}&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://docs.docker.com/docker-for-windows/wsl/&#34;&gt;Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For other OS: &lt;a href=&#34;https://docs.docker.com/docker-hub/&#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.1-branch/kfdef/kfctl_azure.v1.1.0.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_azure.v1.1.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;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;to-log-into-azure-from-the-command-line-interface-run-the-following-commands&#34;&gt;To log into Azure from the command line interface, run the following commands&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;az login
az account set --subscription &amp;lt;NAME OR ID OF SUBSCRIPTION&amp;gt;
&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;&lt;code&gt;RESOURCE_GROUP_NAME=KubeTest&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LOCATION=westus&lt;/code&gt;&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;&lt;code&gt;NAME=KubeTestCluster&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AGENT_SIZE=Standard_D4s_v3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AGENT_COUNT=2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RESOURCE_GROUP_NAME=KubeTest&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;:  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;/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;&lt;a href=&#34;https://docs.microsoft.com/en-us/azure/aks/servicemesh-istio-install?pivots=client-operating-system-linux&#34;&gt;Install Istio in Azure Kubernetes Service&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download the kfctl v1.1.0 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.1.0&#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.1.0_&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.1-branch/kfdef/kfctl_azure.v1.1.0.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;Run this command to check that the resources have been 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 the Kubeflow Dashboard&lt;/p&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:&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;Next, open &lt;code&gt;http://localhost:8080&lt;/code&gt; in your browser.&lt;/p&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;/li&gt;
&lt;/ol&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 on OpenShift</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 1.0 on an existing OpenShift 4.x 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 1.0 on OpenShift 4.x.&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;v1.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;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 the Kubeflow user interface assigned by the OpenShift cluster. You can open the printed URL in your browser 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/08/13/open-data-hub-0-7-adds-support-for-kubeflow-1-0//&#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: Introduction</title>
      <link>/docs/operator/introduction/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/operator/introduction/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes the Kubeflow Operator and the current supported releases of Kubeflow Operator.&lt;/p&gt;
&lt;h2 id=&#34;kubeflow-operator&#34;&gt;Kubeflow Operator&lt;/h2&gt;
&lt;p&gt;Kubeflow Operator helps deploy, monitor and manage the lifecycle of Kubeflow. Built using the &lt;a href=&#34;https://coreos.com/blog/introducing-operator-framework&#34;&gt;Operator Framework&lt;/a&gt; which offers an open source toolkit to build, test, package operators and manage the lifecycle of operators.&lt;/p&gt;
&lt;p&gt;The operator is currently in incubation phase and is based on this &lt;a href=&#34;https://docs.google.com/document/d/1vNBZOM-gDMpwTbhx0EDU6lDpyUjc7vhT3bdOWWCRjdk/edit#&#34;&gt;design doc&lt;/a&gt;. It is built on top of &lt;em&gt;KfDef&lt;/em&gt; CR, and uses &lt;em&gt;kfctl&lt;/em&gt; as the nucleus for Controller. Current roadmap for this Operator is listed &lt;a href=&#34;https://github.com/kubeflow/kfctl/issues/193&#34;&gt;here&lt;/a&gt;. The Operator is also &lt;a href=&#34;https://operatorhub.io/operator/kubeflow&#34;&gt;published on OperatorHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Applications and components to be deployed as part of Kubeflow platform are defined in the KfDef configuration manifest. Each application has a &lt;a href=&#34;https://github.com/kubernetes-sigs/kustomize&#34;&gt;kustomize&lt;/a&gt; configuration with all its resource manifests. KfDef &lt;code&gt;spec&lt;/code&gt; includes the &lt;code&gt;applications&lt;/code&gt; field.  Application are specified in the &lt;code&gt;kustomizeConfig&lt;/code&gt; field. &lt;code&gt;parameters&lt;/code&gt; and &lt;code&gt;overlays&lt;/code&gt; may be used to provide custom setting for the application. &lt;code&gt;repoRef&lt;/code&gt; field specifies the path to retrieve the application&amp;rsquo;s kustomize configuration.&lt;/p&gt;
&lt;p&gt;KfDef &lt;code&gt;spec&lt;/code&gt; may also include a &lt;code&gt;plugins&lt;/code&gt; field for certain cloud platforms, including AWS and GCP. It is used by the platforms to preprocess certain tasks before Kubeflow deployment.&lt;/p&gt;
&lt;p&gt;An example of KfDef is as follow:&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;kfdef.apps.kubeflow.org/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;KfDef&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;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;applications&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;# Install Istio&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;kustomizeConfig&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;repoRef&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;manifests&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;path&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;stacks/ibm/application/istio-stack&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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-stack&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;# Install Kubeflow applications.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;kustomizeConfig&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;repoRef&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;manifests&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;path&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;stacks/ibm&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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-apps&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;# Other applications&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;kustomizeConfig&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;repoRef&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;manifests&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;path&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;stacks/ibm/application/spark-operator&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;spark-operator&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;# Model Serving applications&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;kustomizeConfig&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;repoRef&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;manifests&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;path&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;knative/installs/generic&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;knative&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;kustomizeConfig&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;repoRef&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;manifests&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;path&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;kfserving/installs/generic&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;kfserving&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;repos&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;manifests&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;uri&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://github.com/kubeflow/manifests/archive/master.tar.gz&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;version&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;master&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;More KfDef examples may be found in Kubeflow &lt;a href=&#34;https://github.com/kubeflow/manifests/tree/master/kfdef&#34;&gt;manifests&lt;/a&gt; repo. Users can pick one there and make some modification to fit their requirements. &lt;a href=&#34;https://github.com/opendatahub-io&#34;&gt;OpenDataHub&lt;/a&gt; project also maintains a KfDef &lt;a href=&#34;https://github.com/opendatahub-io/manifests/blob/v1.0-branch-openshift/kfdef/kfctl_openshift.yaml&#34;&gt;manifest&lt;/a&gt; for Kubeflow deployment on OpenShift Container Platforms.&lt;/p&gt;
&lt;p&gt;The operator watches on all KfDef configuration instances in the cluster as custom resources (CR) and manage them. It handles reconcile requests to all the &lt;em&gt;KfDef&lt;/em&gt; instances. To understand more on the operator controller behavior, refer to this &lt;a href=&#34;https://github.com/kubernetes-sigs/controller-runtime/blob/master/pkg/doc.go&#34;&gt;controller-runtime link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Kubeflow Operator shares the same packages and functions as the &lt;code&gt;kfctl&lt;/code&gt; CLI, which is the command line approach to deploy Kubeflow. Therefore, the deployment flow is similar except that the &lt;code&gt;ownerReferences&lt;/code&gt; metadata is added for each application&amp;rsquo;s Kubernetes object. The KfDef CR is the parent of all these objects. Kubeflow Operator does better in tearing down the Kubeflow deployment than the CLI approach. When the KfDef CR is deleted, Kubernetes garbage collection mechanism then takes over the responsibility to remove all and only the resources deployed through this KfDef configuration.&lt;/p&gt;
&lt;p&gt;One of the many good reasons to use an operator is to monitor the resources. The Kubeflow Operator also watches all child resources of the KfDef CR. Should any of these resources be deleted, the operator would try to apply the resource manifest and bring the object up again.&lt;/p&gt;
&lt;p&gt;The operator responds to following events:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When a &lt;em&gt;KfDef&lt;/em&gt; instance is created or updated, the operator&amp;rsquo;s &lt;em&gt;reconciler&lt;/em&gt; will be notified of the event and invoke the &lt;code&gt;Apply&lt;/code&gt; functions provided by the &lt;a href=&#34;https://github.com/kubeflow/kfctl/tree/master/pkg&#34;&gt;&lt;code&gt;kfctl&lt;/code&gt; package&lt;/a&gt; to deploy Kubeflow. The Kubeflow resources specified with the manifests will be owned by the &lt;em&gt;KfDef&lt;/em&gt; instance with their &lt;code&gt;ownerReferences&lt;/code&gt; set.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When a &lt;em&gt;KfDef&lt;/em&gt; instance is deleted, since the owner is deleted, all the secondary resources owned by it will be deleted through the &lt;a href=&#34;https://kubernetes.io/docs/concepts/cluster-administration/kubelet-garbage-collection/&#34;&gt;garbage colleciton&lt;/a&gt;. In the mean time, the &lt;em&gt;reconciler&lt;/em&gt; will be notified of the event and remove the finalizers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When any resource deployed as part of a &lt;em&gt;KfDef&lt;/em&gt; instance is deleted, the operator&amp;rsquo;s &lt;em&gt;reconciler&lt;/em&gt; will be notified of the event and invoke the &lt;code&gt;Apply&lt;/code&gt; functions provided by the &lt;a href=&#34;https://github.com/kubeflow/kfctl/tree/master/pkg&#34;&gt;&lt;code&gt;kfctl&lt;/code&gt; package&lt;/a&gt; to re-deploy the Kubeflow. The deleted resource will be recreated with the same manifest as specified when the &lt;em&gt;KfDef&lt;/em&gt; instance is created.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deploying Kubeflow with the Kubeflow Operator includes two steps: &lt;a href=&#34;/docs/operator/install-operator&#34;&gt;installing the Kubeflow Operator&lt;/a&gt; followed by &lt;a href=&#34;/docs/operator/deploy/operator&#34;&gt;deploying&lt;/a&gt; the KfDef custom resource.&lt;/p&gt;
&lt;h2 id=&#34;current-tested-operators-and-pre-built-images&#34;&gt;Current Tested Operators and Pre-built Images&lt;/h2&gt;
&lt;p&gt;Kubeflow Operator controller logic is based on the &lt;a href=&#34;https://github.com/kubeflow/kfctl/tree/master/pkg&#34;&gt;&lt;code&gt;kfctl&lt;/code&gt; package&lt;/a&gt;, so for each major release of &lt;code&gt;kfctl&lt;/code&gt;, an operator image is built and tested with that version of &lt;a href=&#34;github.com/kubeflow/manifests&#34;&gt;&lt;code&gt;manifests&lt;/code&gt;&lt;/a&gt; to deploy a &lt;em&gt;KfDef&lt;/em&gt; instance. Following table shows what releases have been tested.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;branch tag&lt;/th&gt;
&lt;th&gt;operator image&lt;/th&gt;
&lt;th&gt;manifests version&lt;/th&gt;
&lt;th&gt;kfdef example&lt;/th&gt;
&lt;th&gt;note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/kfctl/tree/v1.0&#34;&gt;v1.0&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://hub.docker.com/layers/aipipeline/kubeflow-operator/v1.0.0/images/sha256-63d00b29a61ff5bc9b0527c8a515cd4cb55de474c45d8e0f65742908ede4d88f?context=repo&#34;&gt;aipipeline/kubeflow-operator:v1.0.0&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/tree/f56bb47d7dc5378497ad1e38ea99f7b5ebe7a950&#34;&gt;1.0.0&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/blob/f56bb47d7dc5378497ad1e38ea99f7b5ebe7a950/kfdef/kfctl_k8s_istio.v1.0.0.yaml&#34;&gt;kfctl_k8s_istio.v1.0.0.yaml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/kfctl/tree/v1.0.1&#34;&gt;v1.0.1&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://hub.docker.com/layers/aipipeline/kubeflow-operator/v1.0.1/images/sha256-828024b773040271e4b547ce9219046f705fb7123e05503d5a2d1428dfbcfb6e?context=repo&#34;&gt;aipipeline/kubeflow-operator:v1.0.1&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/tree/v1.0.1&#34;&gt;1.0.1&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/blob/v1.0.1/kfdef/kfctl_k8s_istio.v1.0.1.yaml&#34;&gt;kfctl_k8s_istio.v1.0.1.yaml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/kfctl/tree/v1.0.2&#34;&gt;v1.0.2&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://hub.docker.com/layers/aipipeline/kubeflow-operator/v1.0.2/images/sha256-18d2ca6f19c1204d5654dfc4cc08032c168e89a95dee68572b9e2aaedada4bda?context=repo&#34;&gt;aipipeline/kubeflow-operator:v1.0.2&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/tree/v1.0.2&#34;&gt;1.0.2&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/blob/v1.0.2/kfdef/kfctl_k8s_istio.v1.0.2.yaml&#34;&gt;kfctl_k8s_istio.v1.0.2.yaml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/kfctl/tree/v1.1.0&#34;&gt;v1.1.0&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://hub.docker.com/layers/aipipeline/kubeflow-operator/v1.0.0/images/sha256-63d00b29a61ff5bc9b0527c8a515cd4cb55de474c45d8e0f65742908ede4d88f?context=explore&#34;&gt;aipipeline/kubeflow-operator:v1.1.0&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/tree/v1.1.0&#34;&gt;1.1.0&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/blob/v1.1-branch/kfdef/kfctl_ibm.v1.1.0.yaml&#34;&gt;kfctl_ibm.v1.1.0.yaml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/kfctl&#34;&gt;master&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://hub.docker.com/layers/aipipeline/kubeflow-operator/master/images/sha256-e81020c426a12237c7cf84316dbbd0efda76e732233ddd57ef33543381dfb8a1?context=repo&#34;&gt;aipipeline/kubeflow-operator:master&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests&#34;&gt;master&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/manifests/blob/master/kfdef/kfctl_ibm.yaml&#34;&gt;kfctl_ibm.yaml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;as of 07/29/2020&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: if building a customized operator for a specific version of Kubeflow is desired, you can run &lt;code&gt;git checkout&lt;/code&gt; to that specific branch tag. Keep in mind to use the matching version of manifests.&lt;/p&gt;
&lt;/blockquote&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;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Out of date&lt;/h4&gt;
This guide contains outdated information pertaining to Kubeflow 1.0. This guide
needs to be updated for Kubeflow 1.1.
&lt;/div&gt;

&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.1.0.yaml in Kubeflow v1.1.0. 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.1.0.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.1.0.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.1.0.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.1.0 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.1.0&#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.1-branch/kfdef/kfctl_istio_dex.v1.1.0.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.1-branch/kfdef/kfctl_istio_dex.v1.1.0.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_istio_dex.v1.1.0.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.1-branch/kfdef/kfctl_istio_dex.v1.1.0.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_istio_dex.v1.1.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;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: Create an IBM Cloud cluster</title>
      <link>/docs/ibm/create-cluster/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/ibm/create-cluster/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to create a Kubernetes cluster with IBM Cloud Kubernetes Service.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ibm.com/cloud/container-service/&#34;&gt;IBM Cloud Kubernetes Service&lt;/a&gt; provides powerful tools and services to help deploy highly available containerized apps in Kubernetes clusters and to automate, isolate, secure, manage, and monitor your workloads across zones or regions.&lt;/p&gt;
&lt;p&gt;You can use your existing clusters to install Kubeflow as far as it meets the minimum system requirement.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;IBMid&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To get started, first go to &lt;a href=&#34;https://ibm.biz/Bdqgck&#34;&gt;IBM Cloud&lt;/a&gt; to create your &lt;code&gt;IBMid&lt;/code&gt; if you do not have one.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Installing the IBM Cloud CLI&lt;/p&gt;
&lt;p&gt;Follow the instructions in this &lt;a href=&#34;https://cloud.ibm.com/docs/cli?topic=cli-getting-started#overview&#34;&gt;Getting started with the IBM Cloud CLI&lt;/a&gt; guide to install the IBM Cloud CLI.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Installing the IBM Cloud Kubernetes Service plug-in with the 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-shell&#34; data-lang=&#34;shell&#34;&gt;ibmcloud plugin install container-service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Refer to this &lt;a href=&#34;https://cloud.ibm.com/docs/cli?topic=containers-cli-plugin-kubernetes-service-cli&#34;&gt;link&lt;/a&gt; for more info on IBM Cloud Kubernetes Service CLI.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Authenticating with IBM Cloud&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;ibmcloud login
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Use your registered email and password for your &lt;code&gt;IBMid&lt;/code&gt; to log in to IBM Cloud.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Follow these steps to create a cluster:&lt;/p&gt;
&lt;h2 id=&#34;setting-environment-variables&#34;&gt;Setting environment variables&lt;/h2&gt;
&lt;p&gt;Choose the region and the worker node provider for your cluster, and set the environment variables.&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:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;KUBERNERTES_VERSION&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;1.16
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;CLUSTER_ZONE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;dal13
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;WORKER_NODE_PROVIDER&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;classic
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;CLUSTER_NAME&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;kubeflow
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;KUBERNETES_VERSION&lt;/code&gt; specifies the Kubernetes version for the cluster. Run &lt;code&gt;ibmcloud ks versions&lt;/code&gt; to see the supported Kubernetes versions. If this environment variable is not set, the cluster will be created with the default version set by IBM Cloud Kubernetes Service. Refer to the &lt;a href=&#34;https://www.kubeflow.org/docs/started/k8s/overview/#minimum-system-requirements&#34;&gt;Minimum system requirements&lt;/a&gt; and choose a Kubernetes version compatible with the Kubeflow release to be deployed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLUSTER_ZONE&lt;/code&gt; identifies the regions or 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;li&gt;&lt;code&gt;WORKER_NODE_PROVIDER&lt;/code&gt; specifies the kind of IBM Cloud infrastructure on which the Kubernetes worker nodes will be created. The &lt;code&gt;classic&lt;/code&gt; type supports worker nodes with GPUs. There are other worker nodes providers including &lt;code&gt;vpc-classic&lt;/code&gt; and &lt;code&gt;vpc-gen2&lt;/code&gt; where zone names and worker flavors will be different. Please use &lt;code&gt;ibmcloud ks zones --provider ${WORKER_NODE_PROVIDER}&lt;/code&gt; to list zone names if using other providers and set the &lt;code&gt;CLUSTER_ZONE&lt;/code&gt; accordingly.&lt;/li&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 &lt;code&gt;${CLUSTER_ZONE}&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Notice&lt;/strong&gt;: If choosing other Kubernetes worker nodes providers than &lt;code&gt;classic&lt;/code&gt;, refer to the IBM Cloud official document &lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-clusters&#34;&gt;Creating clusters&lt;/a&gt; for detailed steps.&lt;/p&gt;
&lt;h2 id=&#34;choosing-a-worker-node-flavor&#34;&gt;Choosing a worker node flavor&lt;/h2&gt;
&lt;p&gt;The worker nodes flavor name varies from zones and providers. Run &lt;code&gt;ibmcloud ks flavors --zone ${CLUSTER_ZONE} --provider ${WORKER_NODE_PROVIDER}&lt;/code&gt; to list available flavors. For example, following are some flavors supported in the &lt;code&gt;dal13&lt;/code&gt; zone with &lt;code&gt;classic&lt;/code&gt; worker node provider.&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-text&#34; data-lang=&#34;text&#34;&gt;$ ibmcloud ks flavors --zone dal13 --provider classic
OK
For more information about these flavors, see &amp;#39;https://ibm.biz/flavors&amp;#39;
Name                      Cores   Memory   Network Speed   OS             Server Type   Storage      Secondary Storage   Provider
b2c.16x64                 16      64GB     1000Mbps        UBUNTU_16_64   virtual       25GB         100GB               classic
b2c.32x128                32      128GB    1000Mbps        UBUNTU_16_64   virtual       25GB         100GB               classic
b2c.4x16                  4       16GB     1000Mbps        UBUNTU_16_64   virtual       25GB         100GB               classic
b2c.56x242                56      242GB    1000Mbps        UBUNTU_16_64   virtual       25GB         100GB               classic
b2c.8x32                  8       32GB     1000Mbps        UBUNTU_16_64   virtual       25GB         100GB               classic
b3c.16x64                 16      64GB     1000Mbps        UBUNTU_18_64   virtual       25GB         100GB               classic
b3c.32x128                32      128GB    1000Mbps        UBUNTU_18_64   virtual       25GB         100GB               classic
b3c.4x16                  4       16GB     1000Mbps        UBUNTU_18_64   virtual       25GB         100GB               classic
b3c.56x242                56      242GB    1000Mbps        UBUNTU_18_64   virtual       25GB         100GB               classic
b3c.8x32                  8       32GB     1000Mbps        UBUNTU_18_64   virtual       25GB         100GB               classic
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Choose a flavor that will work for your applications. For the purpose of the Kubeflow deployment, the recommended configuration for a cluster is at least 8 vCPU cores with 16GB memory. Hence you can either choose the &lt;code&gt;b3c.8x32&lt;/code&gt; flavor to create a one-worker-node cluster or choose the &lt;code&gt;b3c.4x16&lt;/code&gt; flavor to create a two-worker-node cluster. Keep in mind that you can always scale the cluster by adding more worker nodes should your application scales up.&lt;/p&gt;
&lt;p&gt;Now set the environment variable with the flavor you choose.&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:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;WORKER_NODE_FLAVOR&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;b3c.4x16
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;creating-a-ibm-cloud-kubernetes-cluster&#34;&gt;Creating a IBM Cloud Kubernetes cluster&lt;/h2&gt;
&lt;p&gt;Run with the following command to create a 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;ibmcloud ks cluster create &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;WORKER_NODE_PROVIDER&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:#4e9a06&#34;&gt;&lt;/span&gt;  --name &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;CLUSTER_NAME&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:#4e9a06&#34;&gt;&lt;/span&gt;  --zone&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;CLUSTER_ZONE&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:#4e9a06&#34;&gt;&lt;/span&gt;  --version&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;KUBERNETES_VERSION&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:#4e9a06&#34;&gt;&lt;/span&gt;  --flavor &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;WORKER_NODE_FLAVOR&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:#4e9a06&#34;&gt;&lt;/span&gt;  --workers&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;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace the &lt;code&gt;workers&lt;/code&gt; parameter above with the desired number of worker nodes.&lt;/p&gt;
&lt;p&gt;Note: If you&amp;rsquo;re starting in a fresh account with no public and private VLANs, they are created automatically for you when creating a Kubernetes cluster with worker nodes provider &lt;code&gt;classic&lt;/code&gt; for the first time. If you already have VLANs configured in your account, retrieve them via &lt;code&gt;ibmcloud ks vlans --zone ${CLUSTER_ZONE}&lt;/code&gt; and include the public and private VLAN ids (set in the &lt;code&gt;PUBLIC_VLAN_ID&lt;/code&gt; and &lt;code&gt;PRIVATE_VLAN_ID&lt;/code&gt; environment variables) in the command, for example:&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;ibmcloud ks cluster create &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;WORKER_NODE_PROVIDER&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:#4e9a06&#34;&gt;&lt;/span&gt;  --name&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$CLUSTER_NAME&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;  --zone&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$CLUSTER_ZONE&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;  --version&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;KUBERNETES_VERSION&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:#4e9a06&#34;&gt;&lt;/span&gt;  --flavor &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;WORKER_NODE_FLAVOR&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:#4e9a06&#34;&gt;&lt;/span&gt;  --workers&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;2&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;  --private-vlan &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;PRIVATE_VLAN_ID&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:#4e9a06&#34;&gt;&lt;/span&gt;  --public-vlan &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;PUBLIC_VLAN_ID&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;Wait until the cluster is deployed and configured. It can take a while for the cluster to be ready. Run with following command to periodically check the state of your cluster. Your cluster is ready when the state is &lt;code&gt;normal&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;ibmcloud ks clusters --provider &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;WORKER_NODE_PROVIDER&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; &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;&lt;span style=&#34;color:#000&#34;&gt;CLUSTER_NAME&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt;awk &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{print &amp;#34;Name:&amp;#34;$1&amp;#34;\tState:&amp;#34;$3}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;verifying-the-cluster&#34;&gt;Verifying the cluster&lt;/h3&gt;
&lt;p&gt;To use the created cluster, switch the Kubernetes context to point to the cluster with the 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-shell&#34; data-lang=&#34;shell&#34;&gt;ibmcloud ks cluster config --cluster &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;CLUSTER_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;Make sure all worker nodes are up with the command below&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 nodes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and make sure all the nodes are in &lt;code&gt;Ready&lt;/code&gt; state.&lt;/p&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-your-existing-cluster&#34;&gt;Initial setup for your existing cluster&lt;/h2&gt;
&lt;p&gt;Get the Kubeconfig file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```shell
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/deploy/install-kubeflow&#34;&gt;Install Kubeflow&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Install Kubeflow</title>
      <link>/docs/ibm/deploy/install-kubeflow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/ibm/deploy/install-kubeflow/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to use the kfctl binary to deploy Kubeflow on IBM Cloud Kubernetes Service (IKS).&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Authenticate with IBM Cloud&lt;/p&gt;
&lt;p&gt;Log into IBM Cloud using the &lt;a href=&#34;https://www.ibm.com/cloud/cli&#34;&gt;IBM Cloud Command Line Interface (CLI)&lt;/a&gt; as follows:&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;ibmcloud login
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create and access a Kubernetes cluster on IKS&lt;/p&gt;
&lt;p&gt;To deploy Kubeflow on IBM Cloud, you need a cluster running on IKS. If you don&amp;rsquo;t have a cluster running, follow the &lt;a href=&#34;/docs/ibm/create-cluster&#34;&gt;Create an IBM Cloud cluster&lt;/a&gt; guide.&lt;/p&gt;
&lt;p&gt;Run the following command to switch the Kubernetes context and access the 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;ibmcloud ks cluster config --cluster &amp;lt;cluster_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;&amp;lt;cluster_name&amp;gt;&lt;/code&gt; with your cluster name.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ibm-cloud-block-storage-setup&#34;&gt;IBM Cloud Block Storage Setup&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This section is only required when the worker nodes provider &lt;code&gt;WORKER_NODE_PROVIDER&lt;/code&gt; is set to &lt;code&gt;classic&lt;/code&gt;. For other infrastructures, IBM Cloud Block Storage is already set up as the cluster&amp;rsquo;s default storage class.&lt;/p&gt;
&lt;p&gt;When using the &lt;code&gt;classic&lt;/code&gt; worker nodes provider of IBM Cloud Kubernetes cluster, by default, it 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, you&amp;rsquo;re recommended 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.7.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.7.0
LAST DEPLOYED: Fri Aug 28 11:23:56 2020
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
NOTES:
Thank you for installing: ibmcloud-block-storage-plugin.   Your release is named: 1.7.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 storage class.&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:#000&#34;&gt;NEW_STORAGE_CLASS&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;ibmc-block-gold
&lt;span style=&#34;color:#000&#34;&gt;OLD_STORAGE_CLASS&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;$(&lt;/span&gt;kubectl get sc -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;{.items[?(@.metadata.annotations.storageclass\.kubernetes\.io\/is-default-class==&amp;#34;true&amp;#34;)].metadata.name}&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
kubectl patch storageclass &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;NEW_STORAGE_CLASS&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; -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;

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# List all the (default) storage classes&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;&amp;#34;(default)&amp;#34;&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;p&gt;Make sure &lt;code&gt;ibmc-block-gold&lt;/code&gt; is the only &lt;code&gt;(default)&lt;/code&gt; storage class. If there are two or more rows in the above output, unset the previous &lt;code&gt;(default)&lt;/code&gt; storage classes with the command below:&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 &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;OLD_STORAGE_CLASS&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; -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;/code&gt;&lt;/pre&gt;&lt;/div&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.1-branch/kfdef/kfctl_ibm.v1.1.0.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_ibm.v1.1.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;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.1.0 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.1.0&#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.1.0_&amp;lt;platform&amp;gt;.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make kfctl binary easier to use (optional). 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;export PATH=$PATH:&amp;lt;path to where kfctl was unpacked&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Choose either &lt;strong&gt;single user&lt;/strong&gt; or &lt;strong&gt;multi-tenant&lt;/strong&gt; section based on your usage.&lt;/p&gt;
&lt;h3 id=&#34;single-user&#34;&gt;Single user&lt;/h3&gt;
&lt;p&gt;Run the following commands to set up and deploy Kubeflow for a single user without any authentication.&lt;/p&gt;
&lt;pre&gt;&lt;code&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.1-branch/kfdef/kfctl_ibm.v1.1.0.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;h3 id=&#34;multi-user-auth-enabled&#34;&gt;Multi-user, auth-enabled&lt;/h3&gt;
&lt;p&gt;Run the following steps to deploy Kubeflow with &lt;a href=&#34;https://cloud.ibm.com/catalog/services/app-id&#34;&gt;IBM Cloud AppID&lt;/a&gt;
as an authentication provider.&lt;/p&gt;
&lt;p&gt;The scenario is a Kubeflow cluster admin configures Kubeflow as a web
application in AppID and manages user authentication with builtin identity
providers (Cloud Directory, SAML, social log-in with Google or Facebook etc.) or
custom providers.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Follow the guide &lt;a href=&#34;https://cloud.ibm.com/docs/appid?topic=appid-getting-started&#34;&gt;Getting started with App ID&lt;/a&gt;
to create an AppID service instance.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Follow the step &lt;a href=&#34;https://cloud.ibm.com/docs/appid?topic=appid-app#app-register&#34;&gt;Registering your app&lt;/a&gt;
to create an application with type &lt;em&gt;regularwebapp&lt;/em&gt; under the provisioned AppID
instance. Make sure the &lt;em&gt;scope&lt;/em&gt; contains &lt;em&gt;email&lt;/em&gt;. Then retrieve the following
configuration parameters from your AppID:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;clientId&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;secret&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;oAuthServerUrl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create the namespace &lt;code&gt;istio-system&lt;/code&gt; if not exist:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl create namespace istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a secret prior to kubeflow deployment by filling parameters from the
step 2 accordingly:&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 create secret generic appid-application-configuration -n istio-system &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --from-literal&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;clientId&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;clientId&amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --from-literal&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;secret&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;secret&amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --from-literal&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;oAuthServerUrl&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;oAuthServerUrl&amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --from-literal&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;oidcRedirectUrl&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;https://&amp;lt;kubeflow-FQDN&amp;gt;/login/oidc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;oAuthServerUrl&amp;gt;&lt;/code&gt; - fill in the value of oAuthServerUrl&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;clientId&amp;gt;&lt;/code&gt; - fill in the value of clientId&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;secret&amp;gt;&lt;/code&gt; - fill in the value of secret&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;kubeflow-FQDN&amp;gt;&lt;/code&gt; - fill in the FQDN of Kubeflow, if you don&amp;rsquo;t know yet, just give a dummy one like &lt;code&gt;localhost&lt;/code&gt;. Then change it after you got one.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Notice&lt;/strong&gt;: If any of the parameters changed after Kubeflow deployment, it
will need to manually update these parameters in the secret &lt;code&gt;appid-application-configuration&lt;/code&gt;
then restart authservice by running the command &lt;code&gt;kubectl rollout restart sts authservice -n istio-system&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Setup environment variables:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;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/.
export BASE_DIR=&amp;lt;path to a base directory&amp;gt;

# Then set the Kubeflow application directory for this deployment.
export KF_DIR=${BASE_DIR}/${KF_NAME}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Setup configuration files:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CONFIG_URI=&amp;quot;https://raw.githubusercontent.com/kubeflow/manifests/master/kfdef/kfctl_ibm_multi_user.yaml&amp;quot;
# Generate and deploy Kubeflow:
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;Deploy Kubeflow:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kfctl apply -V -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait until the deployment finishes successfully. e.g., all pods are in &lt;code&gt;Running&lt;/code&gt; state when running &lt;code&gt;kubectl get pod -n kubeflow&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;verify-mutli-user-installation&#34;&gt;Verify mutli-user installation&lt;/h3&gt;
&lt;p&gt;Check the pod &lt;code&gt;authservice-0&lt;/code&gt; is in running state in namespace &lt;code&gt;istio-system&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;kubectl get pod authservice-0 -n istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Please follow the steps in &lt;a href=&#34;../authentication/#exposing-the-kubeflow-dashboard-with-dns-and-tls-termination&#34;&gt;Exposing the Kubeflow dashboard with DNS and TLS termination&lt;/a&gt; to secure the Kubeflow dashboard with HTTPS, then you will have the required DNS name as Kubeflow FQDN to enable the OIDC flow for AppID:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Follow the step &lt;a href=&#34;https://cloud.ibm.com/docs/appid?topic=appid-managing-idp#add-redirect-uri&#34;&gt;Adding redirect URIs&lt;/a&gt;
to fill a URL for AppID to redirect to Kubeflow. The URL should look like &lt;code&gt;https://&amp;lt;kubeflow-FQDN&amp;gt;/login/oidc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Update the secret &lt;code&gt;appid-application-configuration&lt;/code&gt; with the updated Kubeflow FQDN to replace &lt;code&gt;&amp;lt;kubeflow-FQDN&amp;gt;&lt;/code&gt; in below command:&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-SHELL&#34; data-lang=&#34;SHELL&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;redirect_url&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;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;printf&lt;/span&gt; https://&amp;lt;kubeflow-FQDN&amp;gt;/login/oidc &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -w0&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&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; kubectl patch secret appid-application-configuration -n istio-system &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt; -p &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;printf&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;data&amp;#34;:{&amp;#34;oidcRedirectUrl&amp;#34;: &amp;#34;%s&amp;#34;}}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$redirect_url&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;restart the pod &lt;code&gt;authservice-0&lt;/code&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-SHELL&#34; data-lang=&#34;SHELL&#34;&gt;kubectl rollout restart statefulset authservice -n istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then visit &lt;code&gt;https://&amp;lt;kubeflow-FQDN&amp;gt;/&lt;/code&gt;, it should redirect you to AppID for 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: Installing Kubeflow Operator</title>
      <link>/docs/operator/install-operator/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/operator/install-operator/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to install the Kubeflow Operator.&lt;/p&gt;
&lt;p&gt;There are different ways to install the Kubeflow Operator, choose one of the following:&lt;/p&gt;
&lt;h2 id=&#34;1-installing-the-kubeflow-operator-through-the-operatorhubiohttpsoperatorhubiooperatorkubeflow&#34;&gt;1. Installing the Kubeflow Operator through the &lt;a href=&#34;https://operatorhub.io/operator/kubeflow&#34;&gt;operatorhub.io&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The stable release of Kubeflow Operator is published to the &lt;a href=&#34;https://operatorhub.io&#34;&gt;operatorhub.io&lt;/a&gt;. Navigate to the &lt;a href=&#34;https://operatorhub.io/operator/kubeflow&#34;&gt;operatorhub.io&lt;/a&gt;, click on the &lt;code&gt;Install&lt;/code&gt; and follow the instructions there to install the operator.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/operator-operatorhubio-kubeflow.png&#34; 
alt=&#34;Kubeflow Operator in OperatorHub&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&gt;
&lt;p&gt;Verify the Kubeflow Operator is running with 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-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl get pod -n operators

NAME                                 READY   STATUS    RESTARTS   AGE
kubeflow-operator-55876578df-25mq5   1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          17h
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;2-installing-the-kubeflow-operator-with-kustomize-and-kubectl&#34;&gt;2. Installing the Kubeflow Operator with &lt;code&gt;kustomize&lt;/code&gt; and &lt;code&gt;kubectl&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Previous method is convenient and simple enough without any knowledges of the Operator SDK. However, if any of the following reasons applies, choose this approach to install the operator.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You want to install a different release of Kubeflow Operator since the Kubeflow KfDef manifests may not be compatible from release to release.&lt;/li&gt;
&lt;li&gt;You want to install the latest release of Kubeflow Operator.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href=&#34;https://github.com/kubernetes-sigs/kustomize/blob/master/docs/INSTALL.md&#34;&gt;kustomize&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;clone-the-kfctlhttpsgithubcomkubeflowkfctlgit-repo-and-switch-to-the-desired-release-branch&#34;&gt;Clone the &lt;a href=&#34;https://github.com/kubeflow/kfctl.git&#34;&gt;&lt;code&gt;kfctl&lt;/code&gt;&lt;/a&gt; repo and switch to the desired release branch&lt;/h3&gt;
&lt;p&gt;Clone the repo and switch to the desired release branch with the following &lt;code&gt;git&lt;/code&gt; commands&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;git clone https://github.com/kubeflow/kfctl.git
&lt;span style=&#34;color:#204a87&#34;&gt;cd&lt;/span&gt; kfctl
git checkout v1.1-branch
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;create-operators-namespace-and-update-the-operator-manifests&#34;&gt;Create &lt;code&gt;operators&lt;/code&gt; namespace and update the operator manifests&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;operators&lt;/code&gt; namespace is the namespace where the Kubeflow Operator will be installed to. Create the namespace and update the manifests with these commands&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:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;OPERATOR_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;operators
kubectl create ns &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;OPERATOR_NAMESPACE&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; deploy
kustomize edit &lt;span style=&#34;color:#204a87&#34;&gt;set&lt;/span&gt; namespace &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;OPERATOR_NAMESPACE&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;# only deploy this if the k8s cluster is 1.15+ and has resource quota support, which will allow only one _kfdef_ instance or one deployment of Kubeflow on the cluster. This follows the singleton model, and is the current recommended and supported mode.&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# kustomize edit add resource kustomize/include/quota&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;install-the-operator&#34;&gt;Install the operator&lt;/h3&gt;
&lt;p&gt;Install the Kubeflow Operator with the &lt;code&gt;kustomize&lt;/code&gt; and &lt;code&gt;kubectl&lt;/code&gt; commands&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;kustomize build &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;Verify the Kubeflow Operator is running with 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-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl get pod -n operators

NAME                                 READY   STATUS    RESTARTS   AGE
kubeflow-operator-55876578df-25mq5   1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          17h
&lt;/code&gt;&lt;/pre&gt;&lt;/div&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.1.0 was
released. This is therefore the default version of the application that you
receive when you deploy Kubeflow v1.1.0. 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.1.0&lt;/th&gt;
        &lt;th&gt;Application version in Kubeflow v1.1.0&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/feature-store/overview&#34;&gt;Feature store: Feast&lt;/a&gt;
        (&lt;a href=&#34;https://github.com/feast-dev/feast&#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.3.0&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;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/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.1.0, 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.1.0&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/components/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.1.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;Stable&lt;/td&gt;
        &lt;td&gt;1.0.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;p&gt;&lt;img src=&#34;/docs/images/metadata-model.png&#34; 
alt=&#34;Model metadata for an example MNIST model&#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;Example of &lt;strong&gt;metrics&lt;/strong&gt; metadata with the name &amp;ldquo;MNIST-evaluation&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/metadata-metrics.png&#34; 
alt=&#34;Metrics metadata for an evaluation of an MNIST model&#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;Example of &lt;strong&gt;dataset&lt;/strong&gt; metadata with the name &amp;ldquo;mytable-dump&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/docs/images/metadata-dataset.png&#34; 
alt=&#34;Dataset metadata&#34;
class=&#34;mt-3 mb-3 border border-info rounded&#34;&gt;&lt;/p&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;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Out of date&lt;/h4&gt;
This guide contains outdated information pertaining to Kubeflow 1.0. This guide
needs to be updated for Kubeflow 1.1.
&lt;/div&gt;

&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-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Out of date&lt;/h4&gt;
This guide contains outdated information pertaining to Kubeflow 1.0. This guide
needs to be updated for Kubeflow 1.1.
&lt;/div&gt;

&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/components/fairing/fairing-overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/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;Out of date&lt;/h4&gt;
This guide contains outdated information pertaining to Kubeflow 1.0. This guide
needs to be updated for Kubeflow 1.1.
&lt;/div&gt;

&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/components/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/components/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/components/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: Authentication using OIDC in Azure</title>
      <link>/docs/azure/authentication-oidc/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/azure/authentication-oidc/</guid>
      <description>
        
        
        &lt;p&gt;This section shows the how to set up Kubeflow with authentication and authorization support through OIDC in Azure using &lt;a href=&#34;https://azure.microsoft.com/en-us/services/active-directory/&#34;&gt;Azure Active Directory&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install the &lt;a href=&#34;/docs/azure/deploy/install-kubeflow&#34;&gt;prerequisites for Kubeflow in Azure&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app#register-an-application&#34;&gt;Register an application with the Microsoft Identity Platform&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app#add-a-client-secret&#34;&gt;Add a client secret&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;  Save your client ID, client secret, and tenant ID in a secure place to be used in the next steps to configure OIDC Auth Service.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;kubeflow-configuration&#34;&gt;Kubeflow configuration&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the kfctl v1.1.0 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.1.0&#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.1.0_&amp;lt;platform&amp;gt;.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the below commands to build configuration files before deploying Kubeflow. The code below includes an optional command to add the binary kfctl to your path - if you don’t add it, 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, &#39;/opt/&#39;.
# 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.1-branch/kfdef/kfctl_azure_aad.v1.1.0.yaml&amp;quot;

# Generate and deploy Kubeflow:
mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl build -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 &lt;code&gt;KF_NAME&lt;/code&gt; 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;Configure OIDC Auth service settings:&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;/manifests/stacks/azure/application/oidc-authservice/kustomization.yaml&lt;/code&gt; update the settings with values corresponding your app registration as follows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- client_id=&amp;lt;client_id&amp;gt;
- oidc_provider=https://login.microsoftonline.com/&amp;lt;tenant_id&amp;gt;/v2.0
- oidc_redirect_uri=https://&amp;lt;load_balancer_ip&amp;gt; or dns_name&amp;gt;/login/oidc
- oidc_auth_url=https://login.microsoftonline.com/&amp;lt;tenant_id&amp;gt;/oauth2/v2.0/authorize
- application_secret=&amp;lt;client_secret&amp;gt;
- skip_auth_uri=
- namespace=istio-system
- userid-header=kubeflow-userid
- userid-prefix=
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure OIDC scopes:&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;/manifests/istio/oidc-authservice/base/statefulset.yaml&lt;/code&gt; update &lt;a href=&#34;https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes&#34;&gt;OIDC scopes&lt;/a&gt; to remove groups and keep profile and email.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- name: OIDC_SCOPES
 value: &amp;quot;profile email&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy Kubeflow:&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;kfctl apply -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;/li&gt;
&lt;li&gt;
&lt;p&gt;Check that the resources were deployed correctly in namespace &lt;code&gt;kubeflow&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;kubectl get all -n kubeflow
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;expose-kubeflow-securely-over-https&#34;&gt;Expose Kubeflow securely over HTTPS&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Update Istio Gateway to expose port 443 with HTTPS and 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-shell&#34; data-lang=&#34;shell&#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:#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;networking.istio.io/v1alpha3&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;Gateway&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;kubeflow-gateway&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;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;span style=&#34;color:#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;/li&gt;
&lt;li&gt;
&lt;p&gt;Expose Kubeflow with a load balancer service:&lt;/p&gt;
&lt;p&gt;To expose Kubeflow with a load balancer service, 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-shell&#34; data-lang=&#34;shell&#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, obtain the &lt;code&gt;LoadBalancer&lt;/code&gt; IP address 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-shell&#34; data-lang=&#34;shell&#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;&lt;strong&gt;Note&lt;/strong&gt;: If you are exposing &lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/ingress/&#34;&gt;Ingress&lt;/a&gt; gateway through public IP, make sure it matches the IP address of the OIDC &lt;code&gt;REDIRECT_URL&lt;/code&gt; by 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-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl get statefulset authservice -n istio-system -o yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If it doesn&amp;rsquo;t match, update &lt;code&gt;REDIRECT_URL&lt;/code&gt; in the StatefulSet to be the public IP address from the last step, by 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-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl edit statefulset authservice -n istio-system
kubectl rollout restart statefulset authservice -n istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a self-signed Certificate with cert-manager:&lt;/p&gt;
&lt;p&gt;Create a new file &lt;code&gt;certficate.yaml&lt;/code&gt; with the YAML below to create a self-signed Certificate with cert-manager. For production environments, you should use appropriate trusted CA 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-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;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 address&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;span style=&#34;color:#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;p&gt;Apply &lt;code&gt;certificate.yaml&lt;/code&gt; in &lt;code&gt;istio-system&lt;/code&gt; 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-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl apply -f certificate.yaml -n istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app#add-a-redirect-uri&#34;&gt;Configure Redirect URI for your registered App&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Add the redirect URI below to the app registered with Microsoft Identity:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;https://&amp;lt;YOUR_LOADBALANCER_IP_ADDRESS_OR_DNS_NAME&amp;gt;/login/oidc&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Make sure the app&amp;rsquo;s redirect URI matches the &lt;code&gt;oidc_redirect_uri&lt;/code&gt; value in OIDC auth service settings.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;code&gt;https://&amp;lt;YOUR_LOADBALANCER_IP_ADDRESS_OR_DNS_NAME&amp;gt;/&lt;/code&gt; and start using Kubeflow.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;authenticate-kubeflow-pipelines-using-kubeflow-pipelines-sdkhttpswwwkubefloworgdocspipelinessdksdk-overview&#34;&gt;Authenticate Kubeflow pipelines using &lt;a href=&#34;https://www.kubeflow.org/docs/pipelines/sdk/sdk-overview/&#34;&gt;Kubeflow Pipelines SDK&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Perform interactive login from browser by visitng &lt;code&gt;https://&amp;lt;YOUR_LOADBALANCER_IP_ADDRESS_OR_DNS_NAME&amp;gt;/&lt;/code&gt; and copy the value of cookie &lt;code&gt;authservice_session&lt;/code&gt; to authenticate using SDK with below 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-bash&#34; data-lang=&#34;bash&#34;&gt;import kfp
&lt;span style=&#34;color:#000&#34;&gt;authservice_session_cookie&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;authservice_session=&amp;lt;cookie&amp;gt;&amp;#39;&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; kfp.Client&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;host&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;https://&amp;lt;YOUR_LOADBALANCER_IP_ADDRESS_OR_DNS_NAME&amp;gt;/pipeline&amp;#39;&lt;/span&gt;,
                    &lt;span style=&#34;color:#000&#34;&gt;cookies&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;authservice_session_cookie&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;)&lt;/span&gt;
client.list_experiments&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;namespace&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;&amp;lt;your_namespace&amp;gt;&amp;#39;&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;&lt;strong&gt;Limitation:&lt;/strong&gt; The current OIDC auth service in Kubeflow system supports only &lt;a href=&#34;https://openid.net/specs/openid-connect-basic-1_0.html#CodeFlow&#34;&gt;Authorization Code Flow&lt;/a&gt;.&lt;/p&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 explains how to delete a Kubeflow deployment on
Google Cloud Platform (GCP) using &lt;code&gt;kubectl&lt;/code&gt;.&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;/ul&gt;
&lt;h2 id=&#34;deleting-your-deployment&#34;&gt;Deleting your deployment&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To delete the applications running in the Kubeflow namespace, remove that namespace:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl delete namespace kubeflow
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To delete the cluster and all GCP resources, run the following commands:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;cd ${KF_DIR}
make delete-gcp
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Warning&lt;/strong&gt; This will delete the persistent disks storing metadata. If you want to preserve the disk don&amp;rsquo;t run this command;
instead selectively delete only those resources you want to delete.&lt;/li&gt;
&lt;/ul&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: 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-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Out of date&lt;/h4&gt;
This guide contains outdated information pertaining to Kubeflow 1.0. This guide
needs to be updated for Kubeflow 1.1.
&lt;/div&gt;

&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;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Out of date&lt;/h4&gt;
This guide contains outdated information pertaining to Kubeflow 1.0. This guide
needs to be updated for Kubeflow 1.1.
&lt;/div&gt;

&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;You can also compose your own configuration file with components and applications of your choice. Starting with Kubeflow 1.1 release, the &lt;em&gt;KfDef&lt;/em&gt; manifest also supports using &lt;em&gt;stack&lt;/em&gt; to declare a specific stack of applications. To use this new feature, the manifest should contain one application with &lt;code&gt;kubeflow-apps&lt;/code&gt; name.&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;kfdef.apps.kubeflow.org/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;KfDef&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;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;applications&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;# Install istio in a different namespace: 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:#8f5902;font-style:italic&#34;&gt;# Remove this application if istio is already installed&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;kustomizeConfig&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;repoRef&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;manifests&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;path&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/istio/base&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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-istio&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;...&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;# Install Kubeflow applications. In the stacks/generic path, a set of core&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;# Kubeflow components (pipelines, central dashboard, profiles, etc) are included&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;# in the one kustomization.yaml.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;kustomizeConfig&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;repoRef&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;manifests&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;path&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;stacks/generic&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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-apps&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;...&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;# Spartakus is a separate applications so that kfctl can remove it&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;# to disable usage reporting&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;kustomizeConfig&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;repoRef&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;manifests&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;path&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;common/spartakus/overlays/application&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;spartakus&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;...&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;repos&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;manifests&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;uri&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://github.com/kubeflow/manifests/archive/v1.1-branch.tar.gz&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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;version&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.1-branch&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;Note that with the above manifests, the &lt;code&gt;kfctl&lt;/code&gt; CLI expects all applications to have a &lt;code&gt;kustomization.yaml&lt;/code&gt; file in the &lt;code&gt;kustomizeConfig.repoRef.path&lt;/code&gt; directory. The &lt;code&gt;kustomization.yaml&lt;/code&gt; file will be used by the &lt;code&gt;kustomize&lt;/code&gt; to build and apply all Kubernetes resources for that stack of applications. The &lt;code&gt;parameters&lt;/code&gt; and &lt;code&gt;overlays&lt;/code&gt; fields under &lt;code&gt;kustomizeConfig&lt;/code&gt; for each application will be ignored.&lt;/p&gt;
&lt;p&gt;You can continue to compose the &lt;em&gt;KfDef&lt;/em&gt; manifest in the old format prior to Kubeflow 1.1 without naming any application as &lt;code&gt;kubeflow-apps&lt;/code&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_ibm.yaml&#34;&gt;kfctl_ibm.yaml&lt;/a&gt;
configuration. This configuration is written using the &lt;em&gt;stack&lt;/em&gt; option.&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.1-branch/kfdef/kfctl_ibm.v1.1.0.yaml
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&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_ibm.v1.1.0.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_ibm.v1.1.0.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_ibm.yaml&#34;&gt;kfctl_ibm.yaml&lt;/a&gt;
to create a IBM Cloud Kubernetes Service (IKS) cluster with Kubeflow.&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;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://kubernetes-sigs.github.io/kustomize/api-reference/glossary/&#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;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Out of date&lt;/h4&gt;
This guide contains outdated information pertaining to Kubeflow 1.0. This guide
needs to be updated for Kubeflow 1.1.
&lt;/div&gt;

&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 integrates with
the critical Kubeflow components. Rok’s built-in 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-enas&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/suggestion-darts&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/nas/darts/v1alpha3/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/nas/darts/v1alpha3/Dockerfile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;katib/suggestion-goptuna&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/goptuna/v1alpha3/Dockerfile&#34;&gt;https://github.com/kubeflow/katib/blob/master/cmd/suggestion/goptuna/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 has the following benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The
&lt;a href=&#34;https://cloud.google.com/config-connector/docs&#34;&gt;Cloud Native Resource Manager&lt;/a&gt; to
declaratively manage all non-Kubernetes resources (including the GKE
cluster).&lt;/li&gt;
&lt;li&gt;You can take advantage of GKE&amp;rsquo;s
&lt;a href=&#34;https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler&#34;&gt;Cluster Autoscaler&lt;/a&gt;
to automatically resize the number of nodes in a node pool in your cluster depending on the workload demands.&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/components/fairing/install-fairing/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/fairing/install-fairing/</guid>
      <description>
        
        
        

&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Out of date&lt;/h4&gt;
This guide contains outdated information pertaining to Kubeflow 1.0. This guide
needs to be updated for Kubeflow 1.1.
&lt;/div&gt;

&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/components/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/components/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/components/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/components/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;&lt;a href=&#34;#kubeflow-pipelines-standalone&#34;&gt;Kubeflow Pipelines Standalone&lt;/a&gt; is the minimal
portable installation that only includes Kubeflow Pipelines.&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines as &lt;a href=&#34;#full-kubeflow-deployment&#34;&gt;part of a full Kubeflow deployment&lt;/a&gt; provides
all Kubeflow components and more integration with each platform.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beta&lt;/strong&gt;: &lt;a href=&#34;#google-cloud-ai-platform-pipelines&#34;&gt;Google Cloud AI Platform Pipelines&lt;/a&gt; makes it easier to install and use Kubeflow Pipelines on Google Cloud by providing a management UI on &lt;a href=&#34;https://console.cloud.google.com/ai-platform/pipelines/clusters&#34;&gt;Google Cloud Console&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;a href=&#34;/docs/pipelines/installation/localcluster-deployment&#34;&gt;local&lt;/a&gt; Kubeflow Pipelines deployment for testing purposes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;choosing-an-installation-option&#34;&gt;Choosing an installation option&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Do you want to use other Kubeflow components in addition to Pipelines?&lt;/p&gt;
&lt;p&gt;If yes, choose the &lt;a href=&#34;#full-kubeflow-deployment&#34;&gt;full Kubeflow deployment&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do you want to use Kubeflow Pipelines with &lt;a href=&#34;https://github.com/kubeflow/pipelines/issues/1223&#34;&gt;multi-user support&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;If yes, choose the &lt;a href=&#34;#full-kubeflow-deployment&#34;&gt;full Kubeflow deployment&lt;/a&gt; with version &amp;gt;= v1.1.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do you deploy on Google Cloud?&lt;/p&gt;
&lt;p&gt;If yes, deploy &lt;a href=&#34;#kubeflow-pipelines-standalone&#34;&gt;Kubeflow Pipelines Standalone&lt;/a&gt;. You can also
use &lt;a href=&#34;#google-cloud-ai-platform-pipelines&#34;&gt;Google Cloud AI Platform Pipelines&lt;/a&gt; to deploy Kubeflow Pipelines
using a user interface, but there are limitations in
customizability and upgradability. For details, please read corresponding
sections.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You deploy on other platforms.&lt;/p&gt;
&lt;p&gt;Please compare your platform specific &lt;a href=&#34;#full-kubeflow-deployment&#34;&gt;full Kubeflow&lt;/a&gt; with the
&lt;a href=&#34;#kubeflow-pipelines-standalone&#34;&gt;Kubeflow Pipelines Standalone&lt;/a&gt; before making your decision.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; Choose your installation option with caution, there&amp;rsquo;s no current
supported path to migrate data between different installation options. Please
create &lt;a href=&#34;https://github.com/kubeflow/pipelines/issues/new/choose&#34;&gt;a GitHub issue&lt;/a&gt;
if that&amp;rsquo;s important for you.&lt;/p&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, cloud
or even local 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;/dl&gt;
&lt;p&gt;Interfaces
:&lt;/p&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;li&gt;Kubeflow Pipelines endpoint is &lt;strong&gt;only auto-configured&lt;/strong&gt; for Google Cloud.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you wish to deploy Kubeflow Pipelines on other platforms, you can either access it through
&lt;code&gt;kubectl port-forward&lt;/code&gt; or configure your own platform specific auth-enabled
endpoint by yourself.&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Release Schedule&lt;/dt&gt;
&lt;dd&gt;Kubeflow Pipelines Standalone is available for every Kubeflow Pipelines release.
You will have access to the latest features.&lt;/dd&gt;
&lt;dt&gt;Upgrade Support (&lt;strong&gt;Beta&lt;/strong&gt;)&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&#34;/docs/pipelines/installation/standalone-deployment/#upgrading-kubeflow-pipelines&#34;&gt;Upgrading Kubeflow Pipelines Standalone&lt;/a&gt; introduces how to upgrade
in place.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Google Cloud Integrations
:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Kubeflow Pipelines public endpoint with auth support is &lt;strong&gt;auto-configured&lt;/strong&gt; for you.&lt;/li&gt;
&lt;li&gt;Open the Kubeflow Pipelines UI via the &lt;strong&gt;Open Pipelines Dashboard&lt;/strong&gt; link in &lt;a href=&#34;https://console.cloud.google.com/ai-platform/pipelines/clusters&#34;&gt;the AI Platform Pipelines dashboard of Cloud Console&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;(Optional) You can choose to persist your data in Google Cloud managed storage (Cloud SQL and Cloud Storage).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/gke/pipelines/authentication-pipelines/&#34;&gt;All options to authenticate to Google Cloud&lt;/a&gt; are supported.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes on specific features
:&lt;/p&gt;
&lt;ul&gt;
&lt;li&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;/li&gt;
&lt;li&gt;Kubeflow Pipelines multi-user support is &lt;strong&gt;not available&lt;/strong&gt; in standalone, because
multi-user support depends on other Kubeflow components.&lt;/li&gt;
&lt;/ul&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;li&gt;Kubeflow Pipelines endpoint is auto-configured with auth support for each platform&lt;/li&gt;
&lt;/ul&gt;
&lt;dl&gt;
&lt;dt&gt;Release Schedule&lt;/dt&gt;
&lt;dd&gt;The full Kubeflow is released quarterly. It has significant delay in receiving
Kubeflow Pipelines updates.&lt;/dd&gt;
&lt;/dl&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kubeflow Version&lt;/th&gt;
&lt;th&gt;Kubeflow Pipelines Version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0.7.0&lt;/td&gt;
&lt;td&gt;0.1.31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;0.2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.0.2&lt;/td&gt;
&lt;td&gt;0.2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.1.0&lt;/td&gt;
&lt;td&gt;1.0.0* (see note below)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Note: Google Cloud, AWS, and IBM Cloud have supported Kubeflow Pipelines 1.0.0 with multi-user separation. Other platforms might not be up-to-date for now, refer to &lt;a href=&#34;https://github.com/kubeflow/manifests/issues/1364#issuecomment-668415871&#34;&gt;this GitHub issue&lt;/a&gt; for status.&lt;/p&gt;
&lt;p&gt;Upgrade Support
:
Refer to &lt;a href=&#34;/docs/gke/pipelines/upgrade/#full-kubeflow&#34;&gt;the full Kubeflow section of upgrading Kubeflow Pipelines on Google Cloud&lt;/a&gt; guide.&lt;/p&gt;
&lt;p&gt;Google Cloud Integrations
:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Kubeflow Pipelines public endpoint with auth support is &lt;strong&gt;auto-configured&lt;/strong&gt; for you using &lt;a href=&#34;https://cloud.google.com/iap&#34;&gt;Cloud Identity-Aware Proxy&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s no current support for persisting your data in Google Cloud managed storage (Cloud SQL and Cloud Storage). Refer to &lt;a href=&#34;https://github.com/kubeflow/pipelines/issues/4356&#34;&gt;this GitHub issue&lt;/a&gt; for the latest status.&lt;/li&gt;
&lt;li&gt;You can &lt;a href=&#34;/docs/gke/pipelines/authentication-pipelines/#workload-identity&#34;&gt;authenticate to Google Cloud with Workload Identity&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes on specific features
:&lt;/p&gt;
&lt;ul&gt;
&lt;li&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;/li&gt;
&lt;li&gt;Kubeflow Pipelines multi-user support is &lt;strong&gt;only available&lt;/strong&gt; in full Kubeflow. It supports
using a single Kubeflow Pipelines control plane to orchestrate user pipeline
runs in multiple user namespaces with authorization.&lt;/li&gt;
&lt;li&gt;Latest features and bug fixes may not be available soon because release
cadence is long.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#34;marketplace&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;google-cloud-ai-platform-pipelines&#34;&gt;Google Cloud AI Platform 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;Beta release&lt;/h4&gt;
&lt;p&gt;Google Cloud AI Platform Pipelines is currently in &lt;b&gt;Beta&lt;/b&gt; with
  limited support. The Kubeflow Pipelines team is interested in any feedback you may have,
  in particular on the usability of the feature.
&lt;p&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;/p&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;p&gt;Use this option to deploy Kubeflow Pipelines to Google Kubernetes Engine (GKE)
from Google Cloud Marketplace. You can deploy Kubeflow Pipelines to an existing or new
GKE cluster and manage your cluster within Google Cloud.&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Installation guide&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&#34;https://cloud.google.com/ai-platform/pipelines/docs&#34;&gt;Google Cloud AI Platform Pipelines documentation&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Interfaces
:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google Cloud Console for managing the Kubeflow Pipelines cluster and other Google Cloud
services&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines UI via the &lt;strong&gt;Open Pipelines Dashboard&lt;/strong&gt; link in the
Google Cloud Console&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines SDK in Cloud Notebooks&lt;/li&gt;
&lt;li&gt;Kubeflow Pipelines endpoint of your instance is auto-configured for you&lt;/li&gt;
&lt;/ul&gt;
&lt;dl&gt;
&lt;dt&gt;Release Schedule&lt;/dt&gt;
&lt;dd&gt;AI Platform Pipelines is available for a chosen set of stable Kubeflow
Pipelines releases. You will receive updates slightly slower than Kubeflow
Pipelines Standalone.&lt;/dd&gt;
&lt;dt&gt;Upgrade Support (&lt;strong&gt;Alpha&lt;/strong&gt;)&lt;/dt&gt;
&lt;dd&gt;An in-place upgrade is not supported.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;To upgrade AI Platform Pipelines by reinstalling it (with existing data), refer to the &lt;a href=&#34;/docs/gke/pipelines/upgrade/#ai-platform-pipelines&#34;&gt;Upgrading AI Platform Pipelines&lt;/a&gt; guide.&lt;/p&gt;
&lt;p&gt;Google Cloud Integrations
:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can deploy AI Platform Pipelines on &lt;a href=&#34;https://console.cloud.google.com/marketplace/details/google-cloud-ai-platform/kubeflow-pipelines&#34;&gt;Cloud Console UI&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A Kubeflow Pipelines public endpoint with auth support is &lt;strong&gt;auto-configured&lt;/strong&gt; for you.&lt;/li&gt;
&lt;li&gt;(Optional) You can choose to persist your data in Google Cloud managed storage services (Cloud SQL and Cloud Storage).&lt;/li&gt;
&lt;li&gt;You can &lt;a href=&#34;/docs/gke/pipelines/authentication-pipelines/#compute-engine-default-service-account&#34;&gt;authenticate to Google Cloud with the Compute Engine default service account&lt;/a&gt;. However, this method may not be suitable if you need workload permission separation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes on specific features
:&lt;/p&gt;
&lt;ul&gt;
&lt;li&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;/li&gt;
&lt;li&gt;Kubeflow Pipelines multi-user support is &lt;strong&gt;not available&lt;/strong&gt; in AI Platform Pipelines, because
multi-user support depends on other Kubeflow components.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Installing Kubeflow</title>
      <link>/docs/operator/install-kubeflow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/operator/install-kubeflow/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to use the Kubeflow Operator to deploy Kubeflow. As mentioned in the Operator &lt;a href=&#34;/docs/operator/introduction.md&#34;&gt;introduction&lt;/a&gt;, the Operator also allows you to monitor and manage the Kubeflow installation beyond the initial installation.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Kubeflow Operator needs to be deployed on your cluster for rest of steps to work. Please follow the &lt;a href=&#34;/docs/operator/install-operator&#34;&gt;&lt;code&gt;Install the Kubeflow Operator&lt;/code&gt;&lt;/a&gt; guide to install the Kubeflow Operator&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;deployment-instructions&#34;&gt;Deployment Instructions&lt;/h2&gt;
&lt;p&gt;The Kubeflow Operator uses the KfDef as its custom resource. You can compose a KfDef configuration or pick a default KfDef from the Kubeflow &lt;a href=&#34;https://github.com/kubeflow/manifests/tree/master/kfdef&#34;&gt;manifests&lt;/a&gt; repo. Keep in mind choosing the release that will work with the Kubeflow Operator.&lt;/p&gt;
&lt;h3 id=&#34;prepare-kfdef-configuration&#34;&gt;Prepare KfDef configuration&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;metadata.name&lt;/code&gt; field must be set for the KfDef manifests whether it is downloaded from the Kubeflow manifests repo or is originally written. Following example shows how to prepare the KfDef manifests&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;# download a default KfDef configuration from remote repo&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;KFDEF_URL&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_ibm.yaml
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;KFDEF&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;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KFDEF_URL&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; rev &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; cut -d/ -f1 &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; rev&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
curl -L &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KFDEF_URL&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; &amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KFDEF&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;# add metadata.name field&lt;/span&gt;
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Note: yq can be installed from https://github.com/mikefarah/yq&lt;/span&gt;
&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;KUBEFLOW_DEPLOYMENT_NAME&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;kubeflow
yq w &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KFDEF&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;metadata.name&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KUBEFLOW_DEPLOYMENT_NAME&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; &amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KFDEF&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;.tmp &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; mv &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KFDEF&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;.tmp &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KFDEF&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;deploy-the-kubeflow-with-the-kubeflow-operator&#34;&gt;Deploy the Kubeflow with the Kubeflow Operator&lt;/h3&gt;
&lt;p&gt;Kubeflow Operator is watching on any KfDef resource in the Kubernetes cluster. Depends on how the operator is installed, there are a couple of ways to start the Kubeflow deployment. You can always manually run with following commands&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;# create the namespace for Kubeflow deployment&lt;/span&gt;
&lt;span style=&#34;color:#000&#34;&gt;KUBEFLOW_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;kubeflow
kubectl create ns &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KUBEFLOW_NAMESPACE&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;# create the KfDef custom resource&lt;/span&gt;
kubectl create -f &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KFDEF&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KUBEFLOW_NAMESPACE&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;Note: in the example above, ${KFDEF} points to a local KfDef configuration file, however, it can also points to a remote URL containing a valid KfDef configuration.&lt;/p&gt;
&lt;h3 id=&#34;watch-the-deployment-progress&#34;&gt;Watch the deployment progress&lt;/h3&gt;
&lt;p&gt;The Kubeflow deployment is carried on by the operator, you can watch the progress with this 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-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl logs deployment/kubeflow-operator -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;OPERATOR_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; -f
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Verify the Kubeflow deployment by monitoring the pods in the ${KUBEFLOW_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-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl get pod -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KUBEFLOW_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;

NAME                                                     READY   STATUS    RESTARTS   AGE
admission-webhook-bootstrap-stateful-set-0               1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;3&lt;/span&gt;          2m26s
admission-webhook-deployment-5bc5f97cfd-chjnm            1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2&lt;/span&gt;          46s
application-controller-stateful-set-0                    1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          2m30s
argo-ui-669bcd8bfc-5dk5c                                 1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          45s
cache-deployer-deployment-b75f5c5f6-42n6l                2/2     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;          45s
cache-server-85bccd99bd-tfrnr                            2/2     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          44s
centraldashboard-8849f64cf-l45zc                         1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          44s
jupyter-web-app-deployment-6c568f4cbc-pd68m              1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          43s
kubeflow-pipelines-profile-controller-846cc56f44-cmbbf   1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          43s
metacontroller-0                                         1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          96s
metadata-writer-59d755696c-fh6px                         2/2     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          43s
minio-d45d44d4f-rmxft                                    1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          42s
ml-pipeline-6bc56cd86d-kn7zt                             1/2     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          42s
ml-pipeline-persistenceagent-6f99b56974-x2f52            2/2     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          41s
ml-pipeline-scheduledworkflow-d596b8bd-qdz6m             2/2     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          41s
ml-pipeline-ui-8695cc6b46-hr8p5                          2/2     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          40s
ml-pipeline-viewer-crd-5998ff7f56-5rn4s                  2/2     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2&lt;/span&gt;          40s
ml-pipeline-visualizationserver-cbbb5b5b-w7rbd           2/2     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          39s
mysql-76597cf5b5-jpsrx                                   1/2     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          39s
notebook-controller-deployment-756587d86-fffg8           1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          38s
profiles-deployment-865b78d47f-pbgl4                     2/2     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          38s
workflow-controller-54dccb7dc4-hkg9s                     1/1     Running   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;          37s
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Introduction to Feast</title>
      <link>/docs/components/feature-store/overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/feature-store/overview/</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/feast-dev/feast/issues&#34;&gt;feedback&lt;/a&gt;&lt;/h4&gt; 
  about the usability of the feature.
&lt;/div&gt;
&lt;p&gt;Use &lt;a href=&#34;http://feast.dev/&#34;&gt;Feast&lt;/a&gt; for defining, managing, discovering, validating, and serving features to your models during training and inference.&lt;/p&gt;
&lt;p&gt;This page introduces feature store concepts as well as Feast as a component of Kubeflow.&lt;/p&gt;
&lt;h2 id=&#34;introduction-to-feature-stores&#34;&gt;Introduction to feature stores&lt;/h2&gt;
&lt;p&gt;Feature stores are systems that help to address some of the key challenges that ML teams face when productionizing features&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Feature sharing and reuse&lt;/strong&gt;: Engineering features is one of the most time consuming activities in building an end-to-end ML system, yet many teams continue to develop features in silos. This leads to a high amount of re-development and duplication of work across teams and projects.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Serving features at scale&lt;/strong&gt;: Models need data that can come from a variety of sources, including event streams, data lakes, warehouses, or notebooks. ML teams need to be able to store and serve all these data sources to their models in a performant and reliable way. The challenge is scalably producing massive datasets of features for model training, and providing access to real-time feature data at low latency and high throughput in serving.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consistency between training and serving&lt;/strong&gt;: The separation between data scientists and engineering teams often lead to the re-development of feature transformations when moving from training to online serving. Inconsistencies that arise due to discrepancies between training and serving implementations frequently leads to a drop in model performance in production.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Point-in-time correctness&lt;/strong&gt;:  General purpose data systems are not built with ML use cases in mind and by extension don&amp;rsquo;t provide point-in-time correct lookups of feature data. Without a point-in-time correct view of data, models are trained on datasets that are not representative of what is found in production, leading to a drop in accuracy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Data quality and validation&lt;/strong&gt;: Features are business critical inputs to ML systems. Teams need to be confident in the quality of data that is served in production and need to be able to react when there is any drift in the underlying data.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;feast-as-a-feature-store&#34;&gt;Feast as a feature store&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;http://feast.dev/&#34;&gt;Feast&lt;/a&gt; is an &lt;a href=&#34;https://github.com/feast-dev/feast&#34;&gt;open-source&lt;/a&gt; feature store that helps teams operate ML systems at scale by allowing them to define, manage, validate, and serve features to models in production.&lt;/p&gt;
&lt;p&gt;Feast provides the following functionality:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Load streaming and batch data&lt;/strong&gt;: Feast is built to be able to ingest data from a variety of bounded or unbounded sources. Feast allows users to ingest data from streams, object stores, databases, or notebooks. Data that is ingested into Feast is persisted in both online store and historical stores, which in turn is used for the creation of training datasets and serving features to online systems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Standardized definitions&lt;/strong&gt;: Feast becomes the single source of truth for all feature definitions and data within an organization. Teams are able to capture documentation, metadata, and metrics about features. This allows teams to communicate clearly about features, test feature data, and determine if a feature is both safe and relevant to their use cases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Historical serving&lt;/strong&gt;: Features that are persisted in Feast can be retrieved through its feature serving APIs to produce training datasets. Feast is able to produce massive training datasets that are agnostics of the data source that was used to ingest the data originally. Feast is also able to ensure point-in-time correctness when joining these data sources, which in turn ensures the quality and consistency of features reaching models.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Online serving&lt;/strong&gt;: Feast exposes low latency serving APIs for all data that has been ingested into the system. This allows all production ML systems to use Feast as the primary data source when looking up real-time features.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consistency between training and serving&lt;/strong&gt;: Feast provides a consistent view of feature data through the use of a unified ingestion layer, unified serving API and canonical feature references. By building ML systems on feature references, teams abstract away the underlying data infrastructure and make it possible to safely move models between training and serving without a drop in data consistency.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Feature sharing and reuse&lt;/strong&gt;: Feast provides a discovery and metadata API that allows teams to track, share, and reuse features across projects. Feast also decouples the process of creating features from the process of consumption, meaning teams that start new projects can begin by simply consuming features that already exist in the store, instead of starting from scratch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Statistics and validation&lt;/strong&gt;: Feast allows for the generation of statistics based on features within the systems. Feast has compatibility with TFDV, meaning statistics that are generated by Feast can be validated using TFDV. Feast also allows teams to capture TFDV schemas as part of feature definitions, allowing domain experts to define data properties that can be used for validating these features in other production settings like training, ingestion, or serving.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Please follow the &lt;a href=&#34;/docs/components/feature-store/getting-started/&#34;&gt;Getting Started with Feast&lt;/a&gt; guide to set up Feast and run walk through our tutorials.&lt;/p&gt;
&lt;h2 id=&#34;resources&#34;&gt;Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://docs.feast.dev/&#34;&gt;Feast: Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/feast-dev/feast&#34;&gt;Feast: Source Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.google.com/blog/products/ai-machine-learning/introducing-feast-an-open-source-feature-store-for-machine-learning&#34;&gt;Google Cloud - Introducing Feast: An open source feature store for machine learning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.gojekengineering.com/feast-bridging-ml-models-and-data-efd06b7d1644&#34;&gt;Medium - Feast: Bridging ML Models and Data&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

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