diff --git a/awsconfigs/apps/kserve/kustomization.yaml b/awsconfigs/apps/kserve/kustomization.yaml new file mode 100644 index 0000000000..715d83396d --- /dev/null +++ b/awsconfigs/apps/kserve/kustomization.yaml @@ -0,0 +1,21 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +# kserve offers 2 installation options for serverless: standalone installation (in its own namespace) and a Kubeflow one +# See: https://github.com/kserve/kserve/tree/release-0.7/install/v0.7.0 +# In 1.5 since both KFServing and KServe were included, Kserve standalone installation was used to avoid conflicts in resource names +# but in doing so the default ingress gateway configured became knative-serving/knative-ingress-gateway which does not exist in Kubeflow installation +# Kubeflow integrated installation should use kubeflow/kubeflow-gateway +# this overlay fixes what is achieved by https://github.com/kserve/kserve/blob/release-0.7/config/overlays/kubeflow/params.env#L1 and should eventually be merged upstream +bases: +- ../../../upstream/contrib/kserve/kserve + +# To make namespace for standalone installation kustomizable, +# variabalize ingress gateway, webhook service name and +# kserve namespace in webhook configurations +configMapGenerator: + - name: kserve-config + namespace: kserve + behavior: merge + envs: + - params.env \ No newline at end of file diff --git a/awsconfigs/apps/kserve/params.env b/awsconfigs/apps/kserve/params.env new file mode 100644 index 0000000000..74936391b5 --- /dev/null +++ b/awsconfigs/apps/kserve/params.env @@ -0,0 +1 @@ +ingressGateway=kubeflow/kubeflow-gateway \ No newline at end of file diff --git a/deployments/cognito-rds-s3/kustomization.yaml b/deployments/cognito-rds-s3/kustomization.yaml index b2cb13dcb6..9278a0a06e 100644 --- a/deployments/cognito-rds-s3/kustomization.yaml +++ b/deployments/cognito-rds-s3/kustomization.yaml @@ -42,7 +42,7 @@ resources: - ../../awsconfigs/common/aws-telemetry # KServe - - ../../upstream/contrib/kserve/kserve + - ../../awsconfigs/apps/kserve - ../../upstream/contrib/kserve/models-web-app/overlays/kubeflow # Configured for AWS Cognito diff --git a/deployments/cognito/kustomization.yaml b/deployments/cognito/kustomization.yaml index e7d0062c2b..da9cb70ce5 100644 --- a/deployments/cognito/kustomization.yaml +++ b/deployments/cognito/kustomization.yaml @@ -46,7 +46,7 @@ resources: - ../../awsconfigs/common/aws-telemetry # KServe - - ../../upstream/contrib/kserve/kserve + - ../../awsconfigs/apps/kserve - ../../upstream/contrib/kserve/models-web-app/overlays/kubeflow # Configured for AWS Cognito diff --git a/deployments/rds-s3/base/kustomization.yaml b/deployments/rds-s3/base/kustomization.yaml index 4b5f3d0fdc..91c992ebf1 100644 --- a/deployments/rds-s3/base/kustomization.yaml +++ b/deployments/rds-s3/base/kustomization.yaml @@ -48,7 +48,7 @@ resources: - ../../../upstream/common/user-namespace/base # KServe - - ../../../upstream/contrib/kserve/kserve + - ../../../awsconfigs/apps/kserve - ../../../upstream/contrib/kserve/models-web-app/overlays/kubeflow # AWS Telemetry - This is an optional component. See usage tracking documentation for more information diff --git a/deployments/vanilla/kustomization.yaml b/deployments/vanilla/kustomization.yaml index 7f84ec37ac..0ea7996dc0 100644 --- a/deployments/vanilla/kustomization.yaml +++ b/deployments/vanilla/kustomization.yaml @@ -52,7 +52,7 @@ resources: - ../../upstream/common/user-namespace/base # KServe - - ../../upstream/contrib/kserve/kserve + - ../../awsconfigs/apps/kserve - ../../upstream/contrib/kserve/models-web-app/overlays/kubeflow # AWS Telemetry - This is an optional component. See usage tracking documentation for more information diff --git a/tests/e2e/utils/kserve/inference_sample.py b/tests/e2e/utils/kserve/inference_sample.py new file mode 100644 index 0000000000..9c98c6d0e8 --- /dev/null +++ b/tests/e2e/utils/kserve/inference_sample.py @@ -0,0 +1,47 @@ +import requests +import os +import json + +from e2e.utils.utils import load_json_file + +# common vars +KUBEFLOW_DOMAIN = os.environ.get("KUBEFLOW_DOMAIN", "kubeflow.example.com") +PROFILE_NAMESPACE = os.environ.get("PROFILE_NAMESPACE", "staging") +MODEL_NAME = os.environ.get("MODEL_NAME", "sklearn-irisv2") +AUTH_PROVIDER = os.environ.get("AUTH_PROVIDER", "dex") + +URL = f"https://{MODEL_NAME}.{PROFILE_NAMESPACE}.{KUBEFLOW_DOMAIN}/v2/models/{MODEL_NAME}/infer" +HEADERS = {"Host": f"{MODEL_NAME}.{PROFILE_NAMESPACE}.{KUBEFLOW_DOMAIN}"} +DASHBOARD_URL = f"https://kubeflow.{KUBEFLOW_DOMAIN}" + +data = load_json_file("./utils/kserve/iris-input.json") + +response = None +if AUTH_PROVIDER != "cognito": + USERNAME = os.environ.get("USERNAME", "user@example.com") + PASSWORD = os.environ.get("PASSWORD", "12341234") + + def session_cookie(host, login, password): + session = requests.Session() + response = session.get(host) + headers = { + "Content-Type": "application/x-www-form-urlencoded", + } + data = {"login": login, "password": password} + session.post(response.url, headers=headers, data=data) + session_cookie = session.cookies.get_dict()["authservice_session"] + return session_cookie + + cookie = {"authservice_session": session_cookie(DASHBOARD_URL, USERNAME, PASSWORD)} + response = requests.post(URL, headers=HEADERS, json=data, cookies=cookie) +else: + HTTP_HEADER_NAME = os.environ.get("HTTP_HEADER_NAME", "x-api-key") + HTTP_HEADER_VALUE = os.environ.get("HTTP_HEADER_VALUE", "token1") + HEADERS[HTTP_HEADER_NAME] = HTTP_HEADER_VALUE + + response = requests.post(URL, headers=HEADERS, json=data) + +status_code = response.status_code +print("Status Code", status_code) +if status_code == 200: + print("JSON Response ", json.dumps(response.json(), indent=2)) diff --git a/tests/e2e/utils/kserve/inference_sample_cognito.py b/tests/e2e/utils/kserve/inference_sample_cognito.py deleted file mode 100644 index 829962ab69..0000000000 --- a/tests/e2e/utils/kserve/inference_sample_cognito.py +++ /dev/null @@ -1,20 +0,0 @@ -import requests -import os - -KUBEFLOW_DOMAIN = os.environ.get("KUBEFLOW_DOMAIN", "kubeflow.example.com") -PROFILE_NAMESPACE = os.environ.get("PROFILE_NAMESPACE", "staging") -HTTP_HEADER_NAME = os.environ.get("HTTP_HEADER_NAME", "x-api-key") -HTTP_HEADER_VALUE = os.environ.get("HTTP_HEADER_VALUE", "token1") - -URL = f"https://sklearn-iris.{PROFILE_NAMESPACE}.{KUBEFLOW_DOMAIN}/v1/models/sklearn-iris:predict" -HEADERS = { - "Host": f"sklearn-iris.{PROFILE_NAMESPACE}.{KUBEFLOW_DOMAIN}", - f"{HTTP_HEADER_NAME}": f"{HTTP_HEADER_VALUE}", -} - -data = {"instances": [[6.8, 2.8, 4.8, 1.4], [6.0, 3.4, 4.5, 1.6]]} - - -response = requests.post(URL, headers=HEADERS, json=data) -print("Status Code", response.status_code) -print("JSON Response ", response.json()) diff --git a/tests/e2e/utils/kserve/inference_sample_dex.py b/tests/e2e/utils/kserve/inference_sample_dex.py deleted file mode 100644 index 3a1a1f8e3b..0000000000 --- a/tests/e2e/utils/kserve/inference_sample_dex.py +++ /dev/null @@ -1,32 +0,0 @@ -import requests -import os - -KUBEFLOW_DOMAIN = os.environ.get("KUBEFLOW_DOMAIN", "kubeflow.example.com") -PROFILE_NAMESPACE = os.environ.get("PROFILE_NAMESPACE", "staging") -USERNAME = os.environ.get("USERNAME", "user@example.com") -PASSWORD = os.environ.get("PASSWORD", "12341234") - -URL = f"https://sklearn-iris.{PROFILE_NAMESPACE}.{KUBEFLOW_DOMAIN}/v1/models/sklearn-iris:predict" -HEADERS = {"Host": f"sklearn-iris.{PROFILE_NAMESPACE}.{KUBEFLOW_DOMAIN}"} -DASHBOARD_URL = f"https://kubeflow.{KUBEFLOW_DOMAIN}" - -data = {"instances": [[6.8, 2.8, 4.8, 1.4], [6.0, 3.4, 4.5, 1.6]]} - - -def session_cookie(host, login, password): - session = requests.Session() - response = session.get(host) - headers = { - "Content-Type": "application/x-www-form-urlencoded", - } - data = {"login": login, "password": password} - session.post(response.url, headers=headers, data=data) - session_cookie = session.cookies.get_dict()["authservice_session"] - return session_cookie - - -cookie = {"authservice_session": session_cookie(DASHBOARD_URL, USERNAME, PASSWORD)} - -response = requests.post(URL, headers=HEADERS, json=data, cookies=cookie) -print("Status Code", response.status_code) -print("JSON Response ", response.json()) diff --git a/tests/e2e/utils/kserve/iris-input.json b/tests/e2e/utils/kserve/iris-input.json new file mode 100644 index 0000000000..acb5921120 --- /dev/null +++ b/tests/e2e/utils/kserve/iris-input.json @@ -0,0 +1,13 @@ +{ + "inputs":[ + { + "name":"input-0", + "shape":[2, 4], + "datatype":"FP32", + "data":[ + [6.8, 2.8, 4.8, 1.4], + [6.0, 3.4, 4.5, 1.6] + ] + } + ] +} \ No newline at end of file diff --git a/website/content/en/docs/component-guides/kserve.md b/website/content/en/docs/component-guides/kserve.md index e78a0bf502..f7b1a2b9e9 100644 --- a/website/content/en/docs/component-guides/kserve.md +++ b/website/content/en/docs/component-guides/kserve.md @@ -59,14 +59,15 @@ DNS only supports wildcard placeholders in the [leftmost part of the domain name ### Create a certificate > Note: Both of these domains should be requested in the same certificate -Create an ACM certificate for `*.platform.example.com` and `*.staging.platform.example.com` in your cluster's region by following the [create certificates for domain](/kubeflow-manifests/docs/deployment/add-ons/load-balancer/guide/#create-domain-and-certificates) steps in the Load Balancer installation guide. + +Create an ACM certificate for `*.platform.example.com` and `*.staging.platform.example.com` in your cluster's region by following the [create certificates for domain](/kubeflow-manifests/deployments/add-ons/load-balancer/guide/#create-certificates-for-domain) steps in the Load Balancer installation guide. Once the certificate status changes to `Issued`, export the ARN of the certificate created: ```bash export certArn=<> ``` -If you are using Cognito for user authentication, see [Cognito](/kubeflow-manifests/docs/component-guides/kserve/#cognito). If you use Dex as the auth provider in your Kubeflow deployment, see [Dex](/kubeflow-manifests/docs/component-guides/kserve/#dex). +If you are using Cognito for user authentication, see [Cognito](/kubeflow-manifests/docs/component-guides/kserve/#cognito-ingress). If you use Dex as the auth provider in your Kubeflow deployment, see [Dex](/kubeflow-manifests/docs/component-guides/kserve/#dex-ingress). ## Cognito ingress @@ -99,8 +100,8 @@ Use an ingress to set the [HTTP header conditions](https://docs.aws.amazon.com/e 4. Check if the ingress-managed Load Balancer is provisioned. This may take a few minutes to complete. ```bash kubectl get ingress -n istio-system istio-ingress-api - NAME CLASS HOSTS ADDRESS PORTS AGE - istio-ingress-api * xxxxxx-istiosystem-istio-2af2-1100502020.us-west-2.elb.amazonaws.com 80 14m + NAME CLASS HOSTS ADDRESS PORTS AGE + istio-ingress-api * k8s-istiosys-istioing-xxxxxx-110050202.us-west-2.elb.amazonaws.com 80 14m ``` Once your Load Balancer is ready, move on to the [Add DNS records](/kubeflow-manifests/docs/component-guides/kserve/#add-dns-records) step to add a DNS record for the staging subdomain. @@ -118,10 +119,10 @@ Once your Load Balancer is ready, move on to the [Add DNS records](/kubeflow-man kustomize build awsconfigs/common/istio-ingress/overlays/https | kubectl apply -f - ``` 3. Get the Load Balancer address - ``` + ```bash kubectl get ingress -n istio-system istio-ingress - NAME CLASS HOSTS ADDRESS PORTS AGE - istio-ingress * xxxxxx-istiosystem-istio-2af2-1100502020.us-west-2.elb.amazonaws.com 80 15d + NAME CLASS HOSTS ADDRESS PORTS AGE + istio-ingress * k8s-istiosys-istioing-xxxxxx-110050202.us-west-2.elb.amazonaws.com 80 15d ``` Once your Load Balancer is ready, move on to the [Add DNS records](/kubeflow-manifests/docs/component-guides/kserve/#add-dns-records) step to add a DNS record for the staging subdomain. @@ -143,60 +144,114 @@ kubectl get authorizationpolicies -n istio-system ``` ### Create an `InferenceService` -Create a scikit-learn `InferenceService` using a [sample](https://github.com/kubeflow/kfserving-lts/blob/release-0.6/docs/samples/v1beta1/sklearn/v1/sklearn.yaml) from the KFserving repository and wait for `READY` to be `True`. + +Set the environment variable value for `PROFILE_NAMESPACE`(e.g. `staging`) according to your environment: +```bash +export PROFILE_NAMESPACE="staging" +``` + +Create a scikit-learn `InferenceService` using a [sample](https://github.com/kserve/kserve/blob/release-0.7/docs/samples/v1beta1/sklearn/v2/sklearn.yaml) from the KFserving repository and wait for `READY` to be `True`. + ```bash -kubectl apply -n staging -f https://raw.githubusercontent.com/kubeflow/kfserving-lts/release-0.6/docs/samples/v1beta1/sklearn/v1/sklearn.yaml +kubectl apply -n ${PROFILE_NAMESPACE} -f https://raw.githubusercontent.com/kserve/kserve/release-0.7/docs/samples/v1beta1/sklearn/v2/sklearn.yaml ``` ### Check `InferenceService` status Check the `InferenceService` status. Once it is ready, copy the URL to use for sending a prediction request. ```bash -kubectl get inferenceservices sklearn-iris -n staging +kubectl get inferenceservices sklearn-irisv2 -n ${PROFILE_NAMESPACE} -NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE -sklearn-iris http://sklearn-iris.staging.platform.example.com True 100 sklearn-iris-predictor-default-00001 3m31s +NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE +sklearn-irisv2 http://sklearn-iris2.staging.platform.example.com True 100 sklearn-irisv2-predictor-default-00001 3m31s ``` ### Send an inference request -Set the environment variable values for `KUBEFLOW_DOMAIN`(e.g. `platform.example.com`) and `PROFILE_NAMESPACE`(e.g. `staging`) according to your environment: -``` +Set the environment variable values for `KUBEFLOW_DOMAIN`(e.g. `platform.example.com`) according to your environment: +```bash export KUBEFLOW_DOMAIN="platform.example.com" -export PROFILE_NAMESPACE="staging" ``` -Install dependencies for the script by running `pip install requests` +Install dependencies for the script by running: +```bash +cd tests/e2e +pip install requirements.txt +``` Run the sample python script to send an inference request based on your auth provider: #### Cognito inference -Run the [inference_sample_cognito.py](https://github.com/awslabs/kubeflow-manifests/blob/main/tests/e2e/utils/kserve/inference_sample_cognito.py) Python script by exporting the values for `HTTP_HEADER_NAME`(e.g. `x-api-key`) and `HTTP_HEADER_VALUE`(e.g. `token1`) according to the values configured in [ingress section](/kubeflow-manifests/docs/component-guides/kserve/#create-ingress). +Run the [inference_sample.py](https://github.com/awslabs/kubeflow-manifests/blob/main/tests/e2e/utils/kserve/inference_sample.py) Python script by exporting the values for `HTTP_HEADER_NAME`(e.g. `x-api-key`) and `HTTP_HEADER_VALUE`(e.g. `token1`) according to the values configured in [ingress section](/kubeflow-manifests/docs/component-guides/kserve/#create-ingress). ```bash +export AUTH_PROVIDER="cognito" export HTTP_HEADER_NAME="x-api-key" export HTTP_HEADER_VALUE="token1" +``` -python inference_sample_cognito.py +```bash +PYTHONPATH=.. python utils/kserve/inference_sample.py ``` The output should look similar to the following: ```bash Status Code 200 -JSON Response {'predictions': [1, 1]} +JSON Response { + "model_name": "sklearn-irisv2", + "model_version": null, + "id": "e5fc40ba-5f02-42f7-aff8-34042facbe11", + "parameters": null, + "outputs": [ + { + "name": "predict", + "shape": [ + 2 + ], + "datatype": "FP32", + "parameters": null, + "data": [ + 1, + 2 + ] + } + ] +} ``` #### Dex inference -Run the [inference_sample_dex.py](https://github.com/awslabs/kubeflow-manifests/blob/main/tests/e2e/utils/kserve/inference_sample_dex.py) Python script by exporting the values for `USERNAME`(e.g. `user@example.com`), `PASSWORD` according to the user profile +Run the [inference_sample.py](https://github.com/awslabs/kubeflow-manifests/blob/main/tests/e2e/utils/kserve/inference_sample.py) Python script by exporting the values for `USERNAME`(e.g. `user@example.com`), `PASSWORD` according to the user profile ```bash +export AUTH_PROVIDER="dex" export USERNAME="user@example.com" export PASSWORD="12341234" +``` -python inference_sample_dex.py +```bash +PYTHONPATH=.. python utils/kserve/inference_sample.py ``` The output should look similar to the following: ```bash Status Code 200 -JSON Response {'predictions': [1, 1]} +JSON Response { + "model_name": "sklearn-irisv2", + "model_version": null, + "id": "e5fc40ba-5f02-42f7-aff8-34042facbe11", + "parameters": null, + "outputs": [ + { + "name": "predict", + "shape": [ + 2 + ], + "datatype": "FP32", + "parameters": null, + "data": [ + 1, + 2 + ] + } + ] +} ``` diff --git a/website/content/en/docs/deployment/add-ons/load-balancer/guide.md b/website/content/en/docs/deployment/add-ons/load-balancer/guide.md index 16cc3fb72b..a2ef650e1d 100644 --- a/website/content/en/docs/deployment/add-ons/load-balancer/guide.md +++ b/website/content/en/docs/deployment/add-ons/load-balancer/guide.md @@ -129,8 +129,8 @@ while ! kustomize build deployments/add-ons/load-balancer | kubectl apply -f -; 1. Check if ALB is provisioned. This may take a few minutes. ``` kubectl get ingress -n istio-system istio-ingress - NAME CLASS HOSTS ADDRESS PORTS AGE - istio-ingress * xxxxxx-istiosystem-istio-2af2-1100502020.us-west-2.elb.amazonaws.com 80 15d + NAME CLASS HOSTS ADDRESS PORTS AGE + istio-ingress * k8s-istiosys-istioing-xxxxxx-110050202.us-west-2.elb.amazonaws.com 80 15d ``` If `ADDRESS` is empty after a few minutes, check the logs of the controller by following the troubleshooting steps in [ALB fails to provision](https://awslabs.github.io/kubeflow-manifests/docs/troubleshooting-aws/#alb-fails-to-provision). 2. When ALB is ready, copy the DNS name of that load balancer and create a CNAME entry to it in Route53 under the subdomain (`platform.example.com`) for `*.platform.example.com`. Please note that it might make up to five to ten minutes for DNS changes to propagate and for your URL to work. @@ -189,6 +189,7 @@ while ! kustomize build deployments/add-ons/load-balancer | kubectl apply -f -; name: platform.example.com ``` 1. The central dashboard should now be available at `https://kubeflow.platform.example.com`. Open a browser and navigate to this URL. +> Note: It might a few minutes for DNS changes to propagate and for your URL to work. Check if the DNS entry propogated with the [Google Admin Toolbox](https://toolbox.googleapps.com/apps/dig/#CNAME/) ## Clean up diff --git a/website/content/en/docs/deployment/cognito-rds-s3/guide.md b/website/content/en/docs/deployment/cognito-rds-s3/guide.md index e186f56711..c7d71d84b8 100644 --- a/website/content/en/docs/deployment/cognito-rds-s3/guide.md +++ b/website/content/en/docs/deployment/cognito-rds-s3/guide.md @@ -54,11 +54,15 @@ Refer to the [general prerequisites guide](/kubeflow-manifests/docs/deployment/p # Kubeflow Istio Resources kustomize build upstream/common/istio-1-9/kubeflow-istio-resources/base | kubectl apply -f - - # KFServing + # KServe + kustomize build awsconfigs/apps/kserve | kubectl apply -f - + kustomize build upstream/contrib/kserve/models-web-app/overlays/kubeflow | kubectl apply -f - + + # KFServing - This is an optional component and required only if you are not ready to migrate to KServe. We recommend migrating to KServe as soon as possible kustomize build upstream/apps/kfserving/upstream/overlays/kubeflow | kubectl apply -f - # Central Dashboard - kustomize build upstream/apps/centraldashboard/upstream/overlays/istio | kubectl apply -f - + kustomize build upstream/apps/centraldashboard/upstream/overlays/kserve | kubectl apply -f - # Notebooks kustomize build upstream/apps/jupyter/notebook-controller/upstream/overlays/kubeflow | kubectl apply -f - @@ -76,9 +80,6 @@ Refer to the [general prerequisites guide](/kubeflow-manifests/docs/deployment/p # Tensorboard kustomize build upstream/apps/tensorboard/tensorboards-web-app/upstream/overlays/istio | kubectl apply -f - kustomize build upstream/apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow | kubectl apply -f - - - # MPI Operator - kustomize build upstream/apps/mpi-job/upstream/overlays/kubeflow | kubectl apply -f - # Training Operator kustomize build upstream/apps/training-operator/upstream/overlays/kubeflow | kubectl apply -f - diff --git a/website/content/en/docs/deployment/cognito/guide-automated.md b/website/content/en/docs/deployment/cognito/guide-automated.md index 47e9dc3059..e4067d2306 100644 --- a/website/content/en/docs/deployment/cognito/guide-automated.md +++ b/website/content/en/docs/deployment/cognito/guide-automated.md @@ -79,8 +79,8 @@ This guide assumes you have Python 3.8 installed and that you have completed the 1. ```sh kubectl get ingress -n istio-system Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress - NAME CLASS HOSTS ADDRESS PORTS AGE - istio-ingress * ebde55ee-istiosystem-istio-2af2-1100502020.us-west-2.elb.amazonaws.com 80 15d + NAME CLASS HOSTS ADDRESS PORTS AGE + istio-ingress * k8s-istiosys-istioing-xxxxxx-110050202.us-west-2.elb.amazonaws.com 80 15d ``` 2. If `ADDRESS` is empty after a few minutes, check the logs of alb-ingress-controller by following [this guide](/kubeflow-manifests/docs/troubleshooting-aws/#alb-fails-to-provision) 1. Substitute the ALB address under `kubeflow.alb.dns` in `tests/e2e/utils/cognito_bootstrap/config.yaml`. The kubeflow section of the config file will look like: diff --git a/website/content/en/docs/deployment/cognito/guide.md b/website/content/en/docs/deployment/cognito/guide.md index 4ea214b443..f8464343ee 100644 --- a/website/content/en/docs/deployment/cognito/guide.md +++ b/website/content/en/docs/deployment/cognito/guide.md @@ -104,40 +104,44 @@ From this point onwards, we will be creating/updating the DNS records **only in 1. **[Option 2]** Install individual components: ```bash # Kubeflow namespace - kustomize build common/kubeflow-namespace/base | kubectl apply -f - + kustomize build upstream/common/kubeflow-namespace/base | kubectl apply -f - # Kubeflow Roles - kustomize build common/kubeflow-roles/base | kubectl apply -f - + kustomize build upstream/common/kubeflow-roles/base | kubectl apply -f - # Istio - kustomize build common/istio-1-9/istio-crds/base | kubectl apply -f - - kustomize build common/istio-1-9/istio-namespace/base | kubectl apply -f - - kustomize build common/istio-1-9/istio-install/base | kubectl apply -f - + kustomize build upstream/common/istio-1-9/istio-crds/base | kubectl apply -f - + kustomize build upstream/common/istio-1-9/istio-namespace/base | kubectl apply -f - + kustomize build upstream/common/istio-1-9/istio-install/base | kubectl apply -f - # Cert-Manager - kustomize build common/cert-manager/cert-manager/base | kubectl apply -f - - kustomize build common/cert-manager/kubeflow-issuer/base | kubectl apply -f - + kustomize build upstream/common/cert-manager/cert-manager/base | kubectl apply -f - + kustomize build upstream/common/cert-manager/kubeflow-issuer/base | kubectl apply -f - # KNative - kustomize build common/knative/knative-serving/overlays/gateways | kubectl apply -f - - kustomize build common/knative/knative-eventing/base | kubectl apply -f - - kustomize build common/istio-1-9/cluster-local-gateway/base | kubectl apply -f - + kustomize build upstream/common/knative/knative-serving/overlays/gateways | kubectl apply -f - + kustomize build upstream/common/knative/knative-eventing/base | kubectl apply -f - + kustomize build upstream/common/istio-1-9/cluster-local-gateway/base | kubectl apply -f - # Kubeflow Istio Resources - kustomize build common/istio-1-9/kubeflow-istio-resources/base | kubectl apply -f - + kustomize build upstream/common/istio-1-9/kubeflow-istio-resources/base | kubectl apply -f - # Kubeflow Pipelines # reapply manifest if you see an error - kustomize build apps/pipeline/upstream/env/cert-manager/platform-agnostic-multi-user | kubectl apply -f - - - # KFServing - kustomize build apps/kfserving/upstream/overlays/kubeflow | kubectl apply -f - + kustomize build upstream/apps/pipeline/upstream/env/cert-manager/platform-agnostic-multi-user | kubectl apply -f - + # KServe + kustomize build awsconfigs/apps/kserve | kubectl apply -f - + kustomize build upstream/contrib/kserve/models-web-app/overlays/kubeflow | kubectl apply -f - + + # KFServing - This is an optional component and required only if you are not ready to migrate to KServe. We recommend migrating to KServe as soon as possible + kustomize build upstream/apps/kfserving/upstream/overlays/kubeflow | kubectl apply -f - + # Katib - kustomize build apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply -f - + kustomize build upstream/apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply -f - # Central Dashboard - kustomize build upstream/apps/centraldashboard/upstream/overlays/istio | kubectl apply -f - + kustomize build upstream/apps/centraldashboard/upstream/overlays/kserve | kubectl apply -f - # Notebooks kustomize build upstream/apps/jupyter/notebook-controller/upstream/overlays/kubeflow | kubectl apply -f - @@ -156,9 +160,6 @@ From this point onwards, we will be creating/updating the DNS records **only in kustomize build upstream/apps/tensorboard/tensorboards-web-app/upstream/overlays/istio | kubectl apply -f - kustomize build upstream/apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow | kubectl apply -f - - # MPI Operator - kustomize build upstream/apps/mpi-job/upstream/overlays/kubeflow | kubectl apply -f - - # Training Operator kustomize build upstream/apps/training-operator/upstream/overlays/kubeflow | kubectl apply -f - @@ -181,8 +182,8 @@ From this point onwards, we will be creating/updating the DNS records **only in 1. ```bash kubectl get ingress -n istio-system Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress - NAME CLASS HOSTS ADDRESS PORTS AGE - istio-ingress * ebde55ee-istiosystem-istio-2af2-1100502020.us-west-2.elb.amazonaws.com 80 15d + NAME CLASS HOSTS ADDRESS PORTS AGE + istio-ingress * k8s-istiosys-istioing-xxxxxx-110050202.us-west-2.elb.amazonaws.com 80 15d ``` 2. If `ADDRESS` is empty after a few minutes, see [ALB fails to provision](/kubeflow-manifests/docs/troubleshooting-aws/#alb-fails-to-provision) in the troubleshooting guide. 1. When ALB is ready, copy the DNS name of that load balancer and create a CNAME entry to it in Route53 under subdomain (`platform.example.com`) for `*.platform.example.com` @@ -194,7 +195,7 @@ From this point onwards, we will be creating/updating the DNS records **only in ## 6.0 Connecting to central dashboard -1. The central dashboard should now be available at [https://kubeflow.platform.example.com](https://kubeflow.platform.example.com/). Before connecting to the dashboard: +1. The central dashboard should now be available at `https://kubeflow.platform.example.com`. Before connecting to the dashboard: 1. Head over to the Cognito console and create some users in `Users and groups`. These are the users who will log in to the central dashboard. 1. ![cognito-user-pool-created](https://raw.githubusercontent.com/awslabs/kubeflow-manifests/main/website/content/en/docs/images/cognito/cognito-user-pool-created.png) 1. Create a Profile for a user by following the steps in the [Manual Profile Creation](https://www.kubeflow.org/docs/components/multi-tenancy/getting-started/#manual-profile-creation). The following is an example Profile for reference: @@ -211,5 +212,5 @@ From this point onwards, we will be creating/updating the DNS records **only in # replace with the email of the user name: my_user_email@kubeflow.com ``` -1. Open the central dashboard at [https://kubeflow.platform.example.com](https://kubeflow.platform.example.com/). It will redirect to Cognito for login. Use the credentials of the user that you just created a Profile for in previous step. - +1. Open the central dashboard at `https://kubeflow.platform.example.com`. It will redirect to Cognito for login. Use the credentials of the user that you just created a Profile for in previous step. +> Note: It might a few minutes for DNS changes to propagate and for your URL to work. Check if the DNS entry propogated with the [Google Admin Toolbox](https://toolbox.googleapps.com/apps/dig/#CNAME/) diff --git a/website/content/en/docs/deployment/vanilla/guide.md b/website/content/en/docs/deployment/vanilla/guide.md index 0b55d5b9c6..7ed6880f4e 100644 --- a/website/content/en/docs/deployment/vanilla/guide.md +++ b/website/content/en/docs/deployment/vanilla/guide.md @@ -61,8 +61,8 @@ admission webhooks. Install `cert-manager`: ```sh -kustomize build common/cert-manager/cert-manager/base | kubectl apply -f - -kustomize build common/cert-manager/kubeflow-issuer/base | kubectl apply -f - +kustomize build upstream/common/cert-manager/cert-manager/base | kubectl apply -f - +kustomize build upstream/common/cert-manager/kubeflow-issuer/base | kubectl apply -f - ``` #### Istio @@ -73,9 +73,9 @@ network authorization, and implement routing policies. Install Istio: ```sh -kustomize build common/istio-1-9/istio-crds/base | kubectl apply -f - -kustomize build common/istio-1-9/istio-namespace/base | kubectl apply -f - -kustomize build common/istio-1-9/istio-install/base | kubectl apply -f - +kustomize build upstream/common/istio-1-9/istio-crds/base | kubectl apply -f - +kustomize build upstream/common/istio-1-9/istio-namespace/base | kubectl apply -f - +kustomize build upstream/common/istio-1-9/istio-install/base | kubectl apply -f - ``` #### Dex @@ -85,7 +85,7 @@ Dex is an OpenID Connect Identity (OIDC) with multiple authentication backends. Install Dex: ```sh -kustomize build common/dex/overlays/istio | kubectl apply -f - +kustomize build upstream/common/dex/overlays/istio | kubectl apply -f - ``` #### OIDC AuthService @@ -95,18 +95,18 @@ The OIDC AuthService extends your Istio Ingress-Gateway capabilities to be able Install OIDC AuthService: ```sh -kustomize build common/oidc-authservice/base | kubectl apply -f - +kustomize build upstream/common/oidc-authservice/base | kubectl apply -f - ``` #### Knative -Knative is used by the KFServing official Kubeflow component. +Knative is used by the KServe/KFServing official Kubeflow component. Install Knative Serving: ```sh -kustomize build common/knative/knative-serving/base | kubectl apply -f - -kustomize build common/istio-1-9/cluster-local-gateway/base | kubectl apply -f - +kustomize build upstream/common/knative/knative-serving/base | kubectl apply -f - +kustomize build upstream/common/istio-1-9/cluster-local-gateway/base | kubectl apply -f - ``` Optionally, you can install Knative Eventing, which can be used for inference request logging. @@ -114,7 +114,7 @@ Optionally, you can install Knative Eventing, which can be used for inference re Install Knative Eventing: ```sh -kustomize build common/knative/knative-eventing/base | kubectl apply -f - +kustomize build upstream/common/knative/knative-eventing/base | kubectl apply -f - ``` #### Kubeflow namespace @@ -125,7 +125,7 @@ is named `kubeflow`. Install the `kubeflow` namespace: ```sh -kustomize build common/kubeflow-namespace/base | kubectl apply -f - +kustomize build upstream/common/kubeflow-namespace/base | kubectl apply -f - ``` #### Kubeflow Roles @@ -137,7 +137,7 @@ ClusterRoles. Install Kubeflow roles: ```sh -kustomize build common/kubeflow-roles/base | kubectl apply -f - +kustomize build upstream/common/kubeflow-roles/base | kubectl apply -f - ``` #### Kubeflow Istio Resources @@ -150,7 +150,7 @@ well. Install Istio resources: ```sh -kustomize build common/istio-1-9/kubeflow-istio-resources/base | kubectl apply -f - +kustomize build upstream/common/istio-1-9/kubeflow-istio-resources/base | kubectl apply -f - ``` #### Kubeflow Pipelines @@ -158,15 +158,30 @@ kustomize build common/istio-1-9/kubeflow-istio-resources/base | kubectl apply - Install the [Multi-User Kubeflow Pipelines](https://www.kubeflow.org/docs/components/pipelines/multi-user/) official Kubeflow component: ```sh -kustomize build apps/pipeline/upstream/env/cert-manager/platform-agnostic-multi-user | kubectl apply -f - +kustomize build upstream/apps/pipeline/upstream/env/cert-manager/platform-agnostic-multi-user | kubectl apply -f - ``` -#### KFServing +#### KServe / KFServing -Install the KFServing official Kubeflow component: +KFServing was rebranded to KServe. + +Install the KServe component: + +```sh +kustomize build awsconfigs/apps/kserve | kubectl apply -f - +``` + +Install the Models web app: + +```sh +kustomize build upstream/contrib/kserve/models-web-app/overlays/kubeflow | kubectl apply -f - +``` + +For those not ready to migrate to KServe, you can still install KFServing v0.6.1 with +the following command, but we recommend migrating to KServe as soon as possible: ```sh -kustomize build apps/kfserving/upstream/overlays/kubeflow | kubectl apply -f - +kustomize build upstream/apps/kfserving/upstream/overlays/kubeflow | kubectl apply -f - ``` #### Katib @@ -174,7 +189,7 @@ kustomize build apps/kfserving/upstream/overlays/kubeflow | kubectl apply -f - Install the Katib official Kubeflow component: ```sh -kustomize build apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply -f - +kustomize build upstream/apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply -f - ``` #### Central Dashboard @@ -182,7 +197,7 @@ kustomize build apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply Install the Central Dashboard official Kubeflow component: ```sh -kustomize build apps/centraldashboard/upstream/overlays/istio | kubectl apply -f - +kustomize build upstream/apps/centraldashboard/upstream/overlays/kserve | kubectl apply -f - ``` #### Admission Webhook @@ -190,7 +205,7 @@ kustomize build apps/centraldashboard/upstream/overlays/istio | kubectl apply -f Install the Admission Webhook for PodDefaults: ```sh -kustomize build apps/admission-webhook/upstream/overlays/cert-manager | kubectl apply -f - +kustomize build upstream/apps/admission-webhook/upstream/overlays/cert-manager | kubectl apply -f - ``` #### Notebooks @@ -198,13 +213,13 @@ kustomize build apps/admission-webhook/upstream/overlays/cert-manager | kubectl Install the Notebook Controller official Kubeflow component: ```sh -kustomize build apps/jupyter/notebook-controller/upstream/overlays/kubeflow | kubectl apply -f - +kustomize build upstream/apps/jupyter/notebook-controller/upstream/overlays/kubeflow | kubectl apply -f - ``` Install the Jupyter Web App official Kubeflow component: ```sh -kustomize build apps/jupyter/jupyter-web-app/upstream/overlays/istio | kubectl apply -f - +kustomize build awsconfigs/apps/jupyter-web-app | kubectl apply -f - ``` #### Profiles and Kubeflow Access-Management (KFAM) @@ -213,7 +228,7 @@ Install the Profile controller and the Kubeflow Access-Management (KFAM) officia components: ```sh -kustomize build apps/profiles/upstream/overlays/kubeflow | kubectl apply -f - +kustomize build upstream/apps/profiles/upstream/overlays/kubeflow | kubectl apply -f - ``` #### Volumes Web App @@ -221,7 +236,7 @@ kustomize build apps/profiles/upstream/overlays/kubeflow | kubectl apply -f - Install the Volumes Web App official Kubeflow component: ```sh -kustomize build apps/volumes-web-app/upstream/overlays/istio | kubectl apply -f - +kustomize build upstream/apps/volumes-web-app/upstream/overlays/istio | kubectl apply -f - ``` #### Tensorboard @@ -229,13 +244,13 @@ kustomize build apps/volumes-web-app/upstream/overlays/istio | kubectl apply -f Install the Tensorboards Web App official Kubeflow component: ```sh -kustomize build apps/tensorboard/tensorboards-web-app/upstream/overlays/istio | kubectl apply -f - +kustomize build upstream/apps/tensorboard/tensorboards-web-app/upstream/overlays/istio | kubectl apply -f - ``` Install the Tensorboard controller official Kubeflow component: ```sh -kustomize build apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow | kubectl apply -f - +kustomize build upstream/apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow | kubectl apply -f - ``` #### Training Operator @@ -243,15 +258,7 @@ kustomize build apps/tensorboard/tensorboard-controller/upstream/overlays/kubefl Install the Training Operator official Kubeflow component: ```sh -kustomize build apps/training-operator/upstream/overlays/kubeflow | kubectl apply -f - -``` - -#### MPI Operator - -Install the MPI Operator official Kubeflow component: - -```sh -kustomize build apps/mpi-job/upstream/overlays/kubeflow | kubectl apply -f - +kustomize build upstream/apps/training-operator/upstream/overlays/kubeflow | kubectl apply -f - ``` #### AWS Telemetry @@ -267,7 +274,7 @@ kustomize build awsconfigs/common/aws-telemetry | kubectl apply -f - Finally, create a new namespace for the the default user. In this example, the namespace is called `kubeflow-user-example-com`. ```sh -kustomize build common/user-namespace/base | kubectl apply -f - +kustomize build upstream/common/user-namespace/base | kubectl apply -f - ``` ### Connect to your Kubeflow cluster @@ -282,6 +289,8 @@ kubectl get pods -n knative-eventing kubectl get pods -n knative-serving kubectl get pods -n kubeflow kubectl get pods -n kubeflow-user-example-com +# Depending on your installation if you installed KServe +kubectl get pods -n kserve ``` #### Port-Forward