<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kubeflow – Deploying Kubeflow</title>
    <link>/docs/gke/deploy/</link>
    <description>Recent content in Deploying Kubeflow on Kubeflow</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
	  <atom:link href="/docs/gke/deploy/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <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: 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: 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: 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: 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: 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: 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: Deploy using UI</title>
      <link>/docs/gke/deploy/deploy-ui/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/gke/deploy/deploy-ui/</guid>
      <description>
        
        
        

&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;No longer supported&lt;/h4&gt;
Starting with Kubeflow 1.1.0 deploying Kubeflow via the click to deploy web application
is no longer supported. Please &lt;a href=&#34;/docs/gke/deploy/deploy-cli/&#34;&gt;use kustomize and kpt&lt;/a&gt; to deploy Kubeflow.
&lt;/div&gt;


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