From 483579da1221200006074c62d0f77504d6eb1a79 Mon Sep 17 00:00:00 2001 From: Joaquin Date: Mon, 15 Apr 2024 11:42:25 +0300 Subject: [PATCH] refactor to allow a more modular installation with different component combination options --- .gitignore | 3 +- config.env | 4 +- deployment/README.md | 14 +- .../kserve-custom/base}/kserve-sa.yaml | 2 - .../kserve-custom/base}/kustomization.yaml | 1 - .../env/kubeflow/kustomization.yaml | 7 + .../kserve-inference-namespace.yaml | 4 + .../env/standalone-kfp/kustomization.yaml | 8 + .../kubeflow-custom/base}/aws-secret.yaml | 1 - .../kubeflow-custom/base/kustomization.yaml | 5 + .../env/kubeflow/kustomization.yaml | 7 + .../kserve-deployer.yaml | 110 +++++++++++++ .../standalone-kfp-kserve/kustomization.yaml | 8 + .../env/standalone-kfp/kustomization.yaml | 7 + .../kubeflow-monitoring/kustomization.yaml | 9 ++ deployment/envs/kubeflow/kustomization.yaml | 8 + .../kustomization.yaml | 9 ++ .../standalone-kfp-kserve/kustomization.yaml | 8 + .../kustomization.yaml | 8 + .../envs/standalone-kfp/kustomization.yaml | 7 + .../in-cluster-setup/kubeflow/README.md | 1 + .../kubeflow/kustomization.yaml | 87 +++++++++++ .../in-cluster-setup/kustomization.yaml | 87 ----------- .../standalone-kfp-kserve/README.md | 1 + .../standalone-kfp-kserve/kustomization.yaml | 57 +++++++ .../in-cluster-setup/standalone-kfp/README.md | 1 + .../standalone-kfp/kustomization.yaml | 54 +++++++ deployment/kustomization.yaml | 8 - .../monitoring/alert-manager/deployment.yaml | 2 +- .../grafana/grafana-deployment.yaml | 2 +- scripts/create_cluster.sh | 6 +- scripts/install_helm.sh | 2 +- scripts/install_local_registry.sh | 2 +- scripts/install_ray.sh | 2 +- scripts/install_tools.sh | 2 +- scripts/install_tools_mac.sh | 2 +- scripts/run_tests.sh | 2 +- setup.md | 45 +++--- setup.sh | 146 +++++++++++++++--- tests/conftest.py | 7 +- tests/resources/kfp/build_image.sh | 2 +- tests/resources/registry/build_push_image.sh | 3 - 42 files changed, 590 insertions(+), 161 deletions(-) rename deployment/{kubeflow-custom => custom/kserve-custom/base}/kserve-sa.yaml (83%) rename deployment/{kubeflow-custom => custom/kserve-custom/base}/kustomization.yaml (83%) create mode 100644 deployment/custom/kserve-custom/env/kubeflow/kustomization.yaml create mode 100644 deployment/custom/kserve-custom/env/standalone-kfp/kserve-inference-namespace.yaml create mode 100644 deployment/custom/kserve-custom/env/standalone-kfp/kustomization.yaml rename deployment/{kubeflow-custom => custom/kubeflow-custom/base}/aws-secret.yaml (86%) create mode 100644 deployment/custom/kubeflow-custom/base/kustomization.yaml create mode 100644 deployment/custom/kubeflow-custom/env/kubeflow/kustomization.yaml create mode 100644 deployment/custom/kubeflow-custom/env/standalone-kfp-kserve/kserve-deployer.yaml create mode 100644 deployment/custom/kubeflow-custom/env/standalone-kfp-kserve/kustomization.yaml create mode 100644 deployment/custom/kubeflow-custom/env/standalone-kfp/kustomization.yaml create mode 100644 deployment/envs/kubeflow-monitoring/kustomization.yaml create mode 100644 deployment/envs/kubeflow/kustomization.yaml create mode 100644 deployment/envs/standalone-kfp-kserve-monitoring/kustomization.yaml create mode 100644 deployment/envs/standalone-kfp-kserve/kustomization.yaml create mode 100644 deployment/envs/standalone-kfp-monitoring/kustomization.yaml create mode 100644 deployment/envs/standalone-kfp/kustomization.yaml create mode 100644 deployment/kubeflow/manifests/in-cluster-setup/kubeflow/README.md create mode 100644 deployment/kubeflow/manifests/in-cluster-setup/kubeflow/kustomization.yaml delete mode 100644 deployment/kubeflow/manifests/in-cluster-setup/kustomization.yaml create mode 100644 deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp-kserve/README.md create mode 100644 deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp-kserve/kustomization.yaml create mode 100644 deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp/README.md create mode 100644 deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp/kustomization.yaml delete mode 100644 deployment/kustomization.yaml diff --git a/.gitignore b/.gitignore index 2bc18e4..9094443 100644 --- a/.gitignore +++ b/.gitignore @@ -62,4 +62,5 @@ tutorials/openstack/secure.yaml # Others old/ istio* -temp/ \ No newline at end of file +temp/ +.platform/ \ No newline at end of file diff --git a/config.env b/config.env index c0a7bdc..90f77b7 100644 --- a/config.env +++ b/config.env @@ -1,4 +1,2 @@ HOST_IP="127.0.0.1" -CLUSTER_NAME="kind-ep" -INSTALL_LOCAL_REGISTRY="true" -INSTALL_RAY="false" \ No newline at end of file +CLUSTER_NAME="mlops-platform" \ No newline at end of file diff --git a/deployment/README.md b/deployment/README.md index fb32127..49a2fff 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -1,7 +1,19 @@ ## Deploy the stack +Choose the deployment option that best fits your needs: +1. `kubeflow-monitoring`: Full Kubeflow deployment with all components. +2. `kubeflow`: Full Kubeflow deployment without monitoring components (prometheus, grafana). +3. `standalone-kfp-monitoring`: Standalone KFP deployment. +4. `standalone-kfp`: Standalone KFP deployment without monitoring components (prometheus, grafana). +5. `standalone-kfp-kserve-monitoring`: Standalone KFP and Kserve deployment. +6. `standalone-kfp-kserve`: Standalone KFP and Kserve deployment without monitoring components (prometheus, grafana). + +```bash +export DEPLOYMENT_OPTION=kubeflow-monitoring +``` + Deploy to your kubernetes cluster with the following command: ```bash -while ! kustomize build deployment | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done +while ! kustomize build "deployment/envs/$DEPLOYMENT_OPTION" | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done ``` \ No newline at end of file diff --git a/deployment/kubeflow-custom/kserve-sa.yaml b/deployment/custom/kserve-custom/base/kserve-sa.yaml similarity index 83% rename from deployment/kubeflow-custom/kserve-sa.yaml rename to deployment/custom/kserve-custom/base/kserve-sa.yaml index dd2d9cb..a300f81 100644 --- a/deployment/kubeflow-custom/kserve-sa.yaml +++ b/deployment/custom/kserve-custom/base/kserve-sa.yaml @@ -2,7 +2,6 @@ apiVersion: v1 kind: Secret metadata: name: mysecret - namespace: kubeflow-user-example-com annotations: serving.kserve.io/s3-endpoint: mlflow-minio-service.mlflow.svc.cluster.local:9000 serving.kserve.io/s3-usehttps: "0" @@ -15,6 +14,5 @@ apiVersion: v1 kind: ServiceAccount metadata: name: kserve-sa - namespace: kubeflow-user-example-com secrets: - name: mysecret diff --git a/deployment/kubeflow-custom/kustomization.yaml b/deployment/custom/kserve-custom/base/kustomization.yaml similarity index 83% rename from deployment/kubeflow-custom/kustomization.yaml rename to deployment/custom/kserve-custom/base/kustomization.yaml index 2bf776f..12b6241 100644 --- a/deployment/kubeflow-custom/kustomization.yaml +++ b/deployment/custom/kserve-custom/base/kustomization.yaml @@ -2,5 +2,4 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- aws-secret.yaml - kserve-sa.yaml \ No newline at end of file diff --git a/deployment/custom/kserve-custom/env/kubeflow/kustomization.yaml b/deployment/custom/kserve-custom/env/kubeflow/kustomization.yaml new file mode 100644 index 0000000..0ad2c65 --- /dev/null +++ b/deployment/custom/kserve-custom/env/kubeflow/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: kubeflow-user-example-com + +resources: +- ../../base diff --git a/deployment/custom/kserve-custom/env/standalone-kfp/kserve-inference-namespace.yaml b/deployment/custom/kserve-custom/env/standalone-kfp/kserve-inference-namespace.yaml new file mode 100644 index 0000000..950c92b --- /dev/null +++ b/deployment/custom/kserve-custom/env/standalone-kfp/kserve-inference-namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: kserve-inference \ No newline at end of file diff --git a/deployment/custom/kserve-custom/env/standalone-kfp/kustomization.yaml b/deployment/custom/kserve-custom/env/standalone-kfp/kustomization.yaml new file mode 100644 index 0000000..762483e --- /dev/null +++ b/deployment/custom/kserve-custom/env/standalone-kfp/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: kserve-inference + +resources: + - ../../base + - kserve-inference-namespace.yaml diff --git a/deployment/kubeflow-custom/aws-secret.yaml b/deployment/custom/kubeflow-custom/base/aws-secret.yaml similarity index 86% rename from deployment/kubeflow-custom/aws-secret.yaml rename to deployment/custom/kubeflow-custom/base/aws-secret.yaml index b63fb1e..7203f52 100644 --- a/deployment/kubeflow-custom/aws-secret.yaml +++ b/deployment/custom/kubeflow-custom/base/aws-secret.yaml @@ -2,7 +2,6 @@ apiVersion: v1 kind: Secret metadata: name: aws-secret - namespace: kubeflow-user-example-com type: Opaque data: # your BASE64 encoded AWS_ACCESS_KEY_ID diff --git a/deployment/custom/kubeflow-custom/base/kustomization.yaml b/deployment/custom/kubeflow-custom/base/kustomization.yaml new file mode 100644 index 0000000..e6ae779 --- /dev/null +++ b/deployment/custom/kubeflow-custom/base/kustomization.yaml @@ -0,0 +1,5 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- aws-secret.yaml \ No newline at end of file diff --git a/deployment/custom/kubeflow-custom/env/kubeflow/kustomization.yaml b/deployment/custom/kubeflow-custom/env/kubeflow/kustomization.yaml new file mode 100644 index 0000000..0ad2c65 --- /dev/null +++ b/deployment/custom/kubeflow-custom/env/kubeflow/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: kubeflow-user-example-com + +resources: +- ../../base diff --git a/deployment/custom/kubeflow-custom/env/standalone-kfp-kserve/kserve-deployer.yaml b/deployment/custom/kubeflow-custom/env/standalone-kfp-kserve/kserve-deployer.yaml new file mode 100644 index 0000000..0ac0071 --- /dev/null +++ b/deployment/custom/kubeflow-custom/env/standalone-kfp-kserve/kserve-deployer.yaml @@ -0,0 +1,110 @@ +# Required for deploy model to have the necessery permissions to create inference services + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: kserve-deployer +rules: + - verbs: + - '*' + apiGroups: + - '' + resources: + - secrets + - serviceaccounts + - verbs: + - get + - watch + - list + apiGroups: + - '' + resources: + - configmaps + - verbs: + - '*' + apiGroups: + - '' + resources: + - persistentvolumes + - persistentvolumeclaims + - verbs: + - create + - delete + - get + apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + - verbs: + - get + - list + - watch + - update + - patch + apiGroups: + - argoproj.io + resources: + - workflows + - verbs: + - '*' + apiGroups: + - '' + resources: + - pods + - pods/exec + - pods/log + - services + - verbs: + - '*' + apiGroups: + - '' + - apps + - extensions + resources: + - deployments + - replicasets + - verbs: + - '*' + apiGroups: + - kubeflow.org + resources: + - '*' + - verbs: + - '*' + apiGroups: + - batch + resources: + - jobs + - verbs: + - '*' + apiGroups: + - machinelearning.seldon.io + resources: + - seldondeployments + - verbs: + - '*' + apiGroups: + - serving.kserve.io + resources: + - '*' + - verbs: + - '*' + apiGroups: + - networking.istio.io + resources: + - '*' +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: pipeline-runner-binding-cluster + labels: + application-crd-id: kubeflow-pipelines +subjects: + - kind: ServiceAccount + name: pipeline-runner + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kserve-deployer \ No newline at end of file diff --git a/deployment/custom/kubeflow-custom/env/standalone-kfp-kserve/kustomization.yaml b/deployment/custom/kubeflow-custom/env/standalone-kfp-kserve/kustomization.yaml new file mode 100644 index 0000000..1eec75e --- /dev/null +++ b/deployment/custom/kubeflow-custom/env/standalone-kfp-kserve/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: kubeflow + +resources: + - ../../base + - kserve-deployer.yaml diff --git a/deployment/custom/kubeflow-custom/env/standalone-kfp/kustomization.yaml b/deployment/custom/kubeflow-custom/env/standalone-kfp/kustomization.yaml new file mode 100644 index 0000000..1241abe --- /dev/null +++ b/deployment/custom/kubeflow-custom/env/standalone-kfp/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: kubeflow + +resources: + - ../../base diff --git a/deployment/envs/kubeflow-monitoring/kustomization.yaml b/deployment/envs/kubeflow-monitoring/kustomization.yaml new file mode 100644 index 0000000..3e7c6ce --- /dev/null +++ b/deployment/envs/kubeflow-monitoring/kustomization.yaml @@ -0,0 +1,9 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- ../../kubeflow/manifests/in-cluster-setup/kubeflow +- ../../custom/kubeflow-custom/env/kubeflow +- ../../custom/kserve-custom/env/kubeflow +- ../../mlflow/env/local +- ../../monitoring \ No newline at end of file diff --git a/deployment/envs/kubeflow/kustomization.yaml b/deployment/envs/kubeflow/kustomization.yaml new file mode 100644 index 0000000..c4c1ca5 --- /dev/null +++ b/deployment/envs/kubeflow/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- ../../kubeflow/manifests/in-cluster-setup/kubeflow +- ../../custom/kubeflow-custom/env/kubeflow +- ../../custom/kserve-custom/env/kubeflow +- ../../mlflow/env/local \ No newline at end of file diff --git a/deployment/envs/standalone-kfp-kserve-monitoring/kustomization.yaml b/deployment/envs/standalone-kfp-kserve-monitoring/kustomization.yaml new file mode 100644 index 0000000..9a23144 --- /dev/null +++ b/deployment/envs/standalone-kfp-kserve-monitoring/kustomization.yaml @@ -0,0 +1,9 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- ../../kubeflow/manifests/in-cluster-setup/standalone-kfp-kserve +- ../../custom/kubeflow-custom/env/standalone-kfp +- ../../custom/kserve-custom/env/standalone-kfp +- ../../mlflow/env/local +- ../../monitoring \ No newline at end of file diff --git a/deployment/envs/standalone-kfp-kserve/kustomization.yaml b/deployment/envs/standalone-kfp-kserve/kustomization.yaml new file mode 100644 index 0000000..c090b17 --- /dev/null +++ b/deployment/envs/standalone-kfp-kserve/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- ../../kubeflow/manifests/in-cluster-setup/standalone-kfp-kserve +- ../../custom/kubeflow-custom/env/standalone-kfp +- ../../custom/kserve-custom/env/standalone-kfp +- ../../mlflow/env/local \ No newline at end of file diff --git a/deployment/envs/standalone-kfp-monitoring/kustomization.yaml b/deployment/envs/standalone-kfp-monitoring/kustomization.yaml new file mode 100644 index 0000000..696c68b --- /dev/null +++ b/deployment/envs/standalone-kfp-monitoring/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- ../../kubeflow/manifests/in-cluster-setup/standalone-kfp +- ../../custom/kubeflow-custom/env/standalone-kfp +- ../../mlflow/env/local +- ../../monitoring \ No newline at end of file diff --git a/deployment/envs/standalone-kfp/kustomization.yaml b/deployment/envs/standalone-kfp/kustomization.yaml new file mode 100644 index 0000000..16cc703 --- /dev/null +++ b/deployment/envs/standalone-kfp/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- ../../kubeflow/manifests/in-cluster-setup/standalone-kfp +- ../../custom/kubeflow-custom/env/standalone-kfp +- ../../mlflow/env/local \ No newline at end of file diff --git a/deployment/kubeflow/manifests/in-cluster-setup/kubeflow/README.md b/deployment/kubeflow/manifests/in-cluster-setup/kubeflow/README.md new file mode 100644 index 0000000..f87f5c1 --- /dev/null +++ b/deployment/kubeflow/manifests/in-cluster-setup/kubeflow/README.md @@ -0,0 +1 @@ +# TODO \ No newline at end of file diff --git a/deployment/kubeflow/manifests/in-cluster-setup/kubeflow/kustomization.yaml b/deployment/kubeflow/manifests/in-cluster-setup/kubeflow/kustomization.yaml new file mode 100644 index 0000000..d3c11cf --- /dev/null +++ b/deployment/kubeflow/manifests/in-cluster-setup/kubeflow/kustomization.yaml @@ -0,0 +1,87 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +sortOptions: + order: legacy + legacySortOptions: + orderFirst: + - Namespace + - ResourceQuota + - StorageClass + - CustomResourceDefinition + - MutatingWebhookConfiguration + - ServiceAccount + - PodSecurityPolicy + - Role + - ClusterRole + - RoleBinding + - ClusterRoleBinding + - ConfigMap + - Secret + - Endpoints + - Service + - LimitRange + - PriorityClass + - PersistentVolume + - PersistentVolumeClaim + - Deployment + - StatefulSet + - CronJob + - PodDisruptionBudget + orderLast: + - ValidatingWebhookConfiguration + +resources: +# Cert-Manager +- ../../common/cert-manager/cert-manager/base +- ../../common/cert-manager/kubeflow-issuer/base +# Istio +- ../../common/istio-1-17/istio-crds/base +- ../../common/istio-1-17/istio-namespace/base +- ../../common/istio-1-17/istio-install/base +# OIDC Authservice +- ../../common/oidc-client/oidc-authservice/base +# Dex +- ../../common/dex/overlays/istio +# KNative +- ../../common/knative/knative-serving/overlays/gateways +- ../../common/knative/knative-eventing/base +- ../../common/istio-1-17/cluster-local-gateway/base +# Kubeflow namespace +- ../../common/kubeflow-namespace/base +# Kubeflow Roles +- ../../common/kubeflow-roles/base +# Kubeflow Istio Resources +- ../../common/istio-1-17/kubeflow-istio-resources/base + + +# Kubeflow Pipelines +- ../../apps/pipeline/upstream/env/cert-manager/platform-agnostic-multi-user +# Katib +- ../../apps/katib/upstream/installs/katib-with-kubeflow +# Central Dashboard +- ../../apps/centraldashboard/upstream/overlays/kserve +# Admission Webhook +- ../../apps/admission-webhook/upstream/overlays/cert-manager +# Jupyter Web App +- ../../apps/jupyter/jupyter-web-app/upstream/overlays/istio +# Notebook Controller +- ../../apps/jupyter/notebook-controller/upstream/overlays/kubeflow +# Profiles + KFAM +- ../../apps/profiles/upstream/overlays/kubeflow +# PVC Viewer +- ../../apps/pvcviewer-controller/upstream/base/ +# Volumes Web App +- ../../apps/volumes-web-app/upstream/overlays/istio +# Tensorboards Controller +- ../../apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow +# Tensorboard Web App +- ../../apps/tensorboard/tensorboards-web-app/upstream/overlays/istio +# Training Operator +- ../../apps/training-operator/upstream/overlays/kubeflow +# User namespace +- ../../common/user-namespace/base + +# KServe +- ../../contrib/kserve/kserve +- ../../contrib/kserve/models-web-app/overlays/kubeflow diff --git a/deployment/kubeflow/manifests/in-cluster-setup/kustomization.yaml b/deployment/kubeflow/manifests/in-cluster-setup/kustomization.yaml deleted file mode 100644 index c1a8578..0000000 --- a/deployment/kubeflow/manifests/in-cluster-setup/kustomization.yaml +++ /dev/null @@ -1,87 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -sortOptions: - order: legacy - legacySortOptions: - orderFirst: - - Namespace - - ResourceQuota - - StorageClass - - CustomResourceDefinition - - MutatingWebhookConfiguration - - ServiceAccount - - PodSecurityPolicy - - Role - - ClusterRole - - RoleBinding - - ClusterRoleBinding - - ConfigMap - - Secret - - Endpoints - - Service - - LimitRange - - PriorityClass - - PersistentVolume - - PersistentVolumeClaim - - Deployment - - StatefulSet - - CronJob - - PodDisruptionBudget - orderLast: - - ValidatingWebhookConfiguration - -resources: -# Cert-Manager -- ../common/cert-manager/cert-manager/base -- ../common/cert-manager/kubeflow-issuer/base -# Istio -- ../common/istio-1-17/istio-crds/base -- ../common/istio-1-17/istio-namespace/base -- ../common/istio-1-17/istio-install/base -# OIDC Authservice -- ../common/oidc-client/oidc-authservice/base -# Dex -- ../common/dex/overlays/istio -# KNative -- ../common/knative/knative-serving/overlays/gateways -- ../common/knative/knative-eventing/base -- ../common/istio-1-17/cluster-local-gateway/base -# Kubeflow namespace -- ../common/kubeflow-namespace/base -# Kubeflow Roles -- ../common/kubeflow-roles/base -# Kubeflow Istio Resources -- ../common/istio-1-17/kubeflow-istio-resources/base - - -# Kubeflow Pipelines -- ../apps/pipeline/upstream/env/cert-manager/platform-agnostic-multi-user -# Katib -- ../apps/katib/upstream/installs/katib-with-kubeflow -# Central Dashboard -- ../apps/centraldashboard/upstream/overlays/kserve -# Admission Webhook -- ../apps/admission-webhook/upstream/overlays/cert-manager -# Jupyter Web App -- ../apps/jupyter/jupyter-web-app/upstream/overlays/istio -# Notebook Controller -- ../apps/jupyter/notebook-controller/upstream/overlays/kubeflow -# Profiles + KFAM -- ../apps/profiles/upstream/overlays/kubeflow -# PVC Viewer -- ../apps/pvcviewer-controller/upstream/base/ -# Volumes Web App -- ../apps/volumes-web-app/upstream/overlays/istio -# Tensorboards Controller -- ../apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow -# Tensorboard Web App -- ../apps/tensorboard/tensorboards-web-app/upstream/overlays/istio -# Training Operator -- ../apps/training-operator/upstream/overlays/kubeflow -# User namespace -- ../common/user-namespace/base - -# KServe -- ../contrib/kserve/kserve -- ../contrib/kserve/models-web-app/overlays/kubeflow diff --git a/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp-kserve/README.md b/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp-kserve/README.md new file mode 100644 index 0000000..f87f5c1 --- /dev/null +++ b/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp-kserve/README.md @@ -0,0 +1 @@ +# TODO \ No newline at end of file diff --git a/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp-kserve/kustomization.yaml b/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp-kserve/kustomization.yaml new file mode 100644 index 0000000..d4e9892 --- /dev/null +++ b/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp-kserve/kustomization.yaml @@ -0,0 +1,57 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +sortOptions: + order: legacy + legacySortOptions: + orderFirst: + - Namespace + - ResourceQuota + - StorageClass + - CustomResourceDefinition + - MutatingWebhookConfiguration + - ServiceAccount + - PodSecurityPolicy + - Role + - ClusterRole + - RoleBinding + - ClusterRoleBinding + - ConfigMap + - Secret + - Endpoints + - Service + - LimitRange + - PriorityClass + - PersistentVolume + - PersistentVolumeClaim + - Deployment + - StatefulSet + - CronJob + - PodDisruptionBudget + orderLast: + - ValidatingWebhookConfiguration + +resources: +# Cert-Manager +- ../../common/cert-manager/cert-manager/base +- ../../common/cert-manager/kubeflow-issuer/base + +# Istio +- ../../common/istio-1-17/istio-crds/base +- ../../common/istio-1-17/istio-namespace/base +- ../../common/istio-1-17/istio-install/base + +# KNative +- ../../common/knative/knative-serving/overlays/gateways +- ../../common/knative/knative-eventing/base +- ../../common/istio-1-17/cluster-local-gateway/base + +# Kubeflow Istio Resources +- ../../common/istio-1-17/kubeflow-istio-resources/base + +# Kubeflow Pipelines +- ../../apps/pipeline/upstream/cluster-scoped-resources +- ../../apps/pipeline/upstream/env/platform-agnostic-emissary + +# KServe +- ../../contrib/kserve/kserve \ No newline at end of file diff --git a/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp/README.md b/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp/README.md new file mode 100644 index 0000000..f87f5c1 --- /dev/null +++ b/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp/README.md @@ -0,0 +1 @@ +# TODO \ No newline at end of file diff --git a/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp/kustomization.yaml b/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp/kustomization.yaml new file mode 100644 index 0000000..a92789a --- /dev/null +++ b/deployment/kubeflow/manifests/in-cluster-setup/standalone-kfp/kustomization.yaml @@ -0,0 +1,54 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +sortOptions: + order: legacy + legacySortOptions: + orderFirst: + - Namespace + - ResourceQuota + - StorageClass + - CustomResourceDefinition + - MutatingWebhookConfiguration + - ServiceAccount + - PodSecurityPolicy + - Role + - ClusterRole + - RoleBinding + - ClusterRoleBinding + - ConfigMap + - Secret + - Endpoints + - Service + - LimitRange + - PriorityClass + - PersistentVolume + - PersistentVolumeClaim + - Deployment + - StatefulSet + - CronJob + - PodDisruptionBudget + orderLast: + - ValidatingWebhookConfiguration + +resources: +# Cert-Manager +- ../../common/cert-manager/cert-manager/base +- ../../common/cert-manager/kubeflow-issuer/base + +# Istio +- ../../common/istio-1-17/istio-crds/base +- ../../common/istio-1-17/istio-namespace/base +- ../../common/istio-1-17/istio-install/base + +# KNative +- ../../common/knative/knative-serving/overlays/gateways +- ../../common/knative/knative-eventing/base +- ../../common/istio-1-17/cluster-local-gateway/base + +# Kubeflow Istio Resources +- ../../common/istio-1-17/kubeflow-istio-resources/base + +# Kubeflow Pipelines +- ../../apps/pipeline/upstream/cluster-scoped-resources +- ../../apps/pipeline/upstream/env/platform-agnostic-emissary \ No newline at end of file diff --git a/deployment/kustomization.yaml b/deployment/kustomization.yaml deleted file mode 100644 index c5d654e..0000000 --- a/deployment/kustomization.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -resources: -- ./kubeflow/manifests/in-cluster-setup -- ./kubeflow-custom -- ./mlflow/env/local -- ./monitoring \ No newline at end of file diff --git a/deployment/monitoring/alert-manager/deployment.yaml b/deployment/monitoring/alert-manager/deployment.yaml index 2e44389..96028d2 100644 --- a/deployment/monitoring/alert-manager/deployment.yaml +++ b/deployment/monitoring/alert-manager/deployment.yaml @@ -25,7 +25,7 @@ spec: containerPort: 9093 resources: requests: - cpu: 500m + cpu: 250m memory: 500M limits: cpu: 1 diff --git a/deployment/monitoring/grafana/grafana-deployment.yaml b/deployment/monitoring/grafana/grafana-deployment.yaml index 71032e1..8e3144e 100644 --- a/deployment/monitoring/grafana/grafana-deployment.yaml +++ b/deployment/monitoring/grafana/grafana-deployment.yaml @@ -28,7 +28,7 @@ spec: cpu: "1000m" requests: memory: 500M - cpu: "500m" + cpu: "250m" volumeMounts: - mountPath: /var/lib/grafana name: grafana-storage diff --git a/scripts/create_cluster.sh b/scripts/create_cluster.sh index bbe9697..ae01799 100755 --- a/scripts/create_cluster.sh +++ b/scripts/create_cluster.sh @@ -1,11 +1,11 @@ #!/bin/bash -set -xeoa pipefail +set -eoa pipefail ####################################################################################### # Create and configure a cluster with Kind # -# Usage: $ export HOST_IP=127.0.0.1; export CLUSTER_NAME="kind-ep"; ./create_cluster.sh +# Usage: $ export HOST_IP=127.0.0.1; export CLUSTER_NAME="mlops-platform"; ./create_cluster.sh ####################################################################################### @@ -67,7 +67,7 @@ fi # see https://github.com/kubernetes-sigs/kind/issues/2586 -CONTAINER_ID=$(docker ps -aqf "name=kind-ep-control-plane") +CONTAINER_ID=$(docker ps -aqf "name=$CLUSTER_NAME-control-plane") docker exec -t ${CONTAINER_ID} bash -c "echo 'fs.inotify.max_user_watches=1048576' >> /etc/sysctl.conf" docker exec -t ${CONTAINER_ID} bash -c "echo 'fs.inotify.max_user_instances=512' >> /etc/sysctl.conf" docker exec -i ${CONTAINER_ID} bash -c "sysctl -p /etc/sysctl.conf" diff --git a/scripts/install_helm.sh b/scripts/install_helm.sh index 4a15055..ef44c43 100644 --- a/scripts/install_helm.sh +++ b/scripts/install_helm.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -xeo pipefail +set -eo pipefail function add_local_bin_to_path { # make sure ~/.local/bin is in $PATH diff --git a/scripts/install_local_registry.sh b/scripts/install_local_registry.sh index 4665d4b..3f1844b 100755 --- a/scripts/install_local_registry.sh +++ b/scripts/install_local_registry.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -xeoa pipefail +set -eoa pipefail ####################################################################################### # The following shell script will create a local docker registry and connect the diff --git a/scripts/install_ray.sh b/scripts/install_ray.sh index b53d539..1e1a864 100644 --- a/scripts/install_ray.sh +++ b/scripts/install_ray.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -xeo pipefail +set -eo pipefail helm repo add kuberay https://ray-project.github.io/kuberay-helm/ helm repo update diff --git a/scripts/install_tools.sh b/scripts/install_tools.sh index d4dc587..105415f 100755 --- a/scripts/install_tools.sh +++ b/scripts/install_tools.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -xeoa pipefail +set -eoa pipefail ####################################################################################### # CHECK PRE-REQUISITES diff --git a/scripts/install_tools_mac.sh b/scripts/install_tools_mac.sh index ad87a1b..a7c30c9 100644 --- a/scripts/install_tools_mac.sh +++ b/scripts/install_tools_mac.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -xeoa pipefail +set -eoa pipefail ####################################################################################### # CHECK PRE-REQUISITES diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh index ea1cf7d..0df3505 100755 --- a/scripts/run_tests.sh +++ b/scripts/run_tests.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -xeoa pipefail +set -eoa pipefail ####################################################################################### # RUN TESTS diff --git a/setup.md b/setup.md index bf89b2e..9bed5b0 100644 --- a/setup.md +++ b/setup.md @@ -15,6 +15,16 @@ Install the experimentation platform with: > **WARNING:** Using the `--test` flag will install the `requirements-tests.txt` in your current python environment. +## Deployment options + +1. **Kubeflow:** Full Kubeflow deployment with all components. +2. **Kubeflow (without monitoring):** Full Kubeflow deployment without monitoring components (prometheus, grafana). +3. **Standalone KFP:** Standalone KFP deployment. +4. **Standalone KFP (without monitoring):** Standalone KFP deployment without monitoring components (prometheus, grafana). +5. **Standalone KFP and Kserve:** Standalone KFP and Kserve deployment. +6. **Standalone KFP and Kserve (without monitoring):** Standalone KFP and Kserve deployment without monitoring components (prometheus, grafana). + + ## Test the deployment (manually) If you just deployed the platform, it will take a while to become ready. You can use @@ -40,15 +50,27 @@ pytest tests/ [-vrP] [--log-cli-level=INFO] *These are the same tests that are run automatically if you use the `--test` flag on installation.* -## Deleting the deployment +## Uninstall + +Uninstall the MLOps Platform with: -Delete the cluster: ```bash -# e.g. $ kind delete cluster --name kind-ep +./uninstall.sh +``` + +### Manual deletion + +The `uninstall.sh` script should delete everything, but if you need to manually remove the platform, you can do it with: + +```bash +# list kind clusters +kind get clusters + +# delete the kind cluster kind delete cluster --name [CLUSTER_NAME] ``` -If you also installed the local docker registry (`config.env` > `INSTALL_LOCAL_REGISTRY="true"`): +If you also installed the local docker registry: ```bash # check if it is running (kind-registry) @@ -68,20 +90,7 @@ docker rm -f $(docker ps -aqf "name=kind-registry") ### Error: namespace "kubeflow-user-example-com" not found This is not an error, and it is expected. Some of the things being deployed depend on other components, which need to be deployed and become ready first. -For example, the namespace `kubeflow-user-example-com` is created by a `kubeflow` component. That's why we deploy in a loop until everything is applied successfully: - -```bash -while true; do - if kubectl apply -f "$tmpfile"; then - echo "Resources successfully applied." - rm "$tmpfile" - break - else - echo "Retrying to apply resources. Be patient, this might take a while..." - sleep 10 - fi -done -``` +For example, the namespace `kubeflow-user-example-com` is created by a `kubeflow` component. That's why we deploy in a loop until everything is applied successfully. Once the main `kubeflow` deployment is ready, the `kubeflow-user-example-com` namespace will be created, and the command should finish successfully. diff --git a/setup.sh b/setup.sh index 2304afb..6c5dafc 100755 --- a/setup.sh +++ b/setup.sh @@ -1,8 +1,15 @@ #!/bin/bash -set -xeoa pipefail +set -eoa pipefail -source config.env +# Internal directory where to store platform settings +SCRIPT_DIR=$(dirname "$(readlink -f "$0")") +PLATFORM_DIR="$SCRIPT_DIR/.platform" +mkdir -p "$PLATFORM_DIR" +PLATFORM_CONFIG="$PLATFORM_DIR/.config" +cp "$SCRIPT_DIR/config.env" $PLATFORM_CONFIG + +source $PLATFORM_CONFIG RUN_TESTS=false LOG_LEVEL_TESTS="WARNING" @@ -23,13 +30,66 @@ echo Cluster name set to: "$CLUSTER_NAME" echo Host IP set to: "$HOST_IP" echo Run tests after installation set to: "$RUN_TESTS" +DEFAULT_DEPLOYMENT_OPTION="kubeflow-monitoring" +echo +echo "Please choose the deployment option:" +echo "[1] Kubeflow (all components)" +echo "[2] Kubeflow (without monitoring)" +echo "[3] Standalone KFP" +echo "[4] Standalone KFP (without monitoring)" +echo "[5] Standalone KFP and Kserve" +echo "[6] Standalone KFP and Kserve (without monitoring)" +read -p "Enter the number of your choice [1-6] (default is [1]): " choice +case "$choice" in + 1 ) DEPLOYMENT_OPTION="kubeflow-monitoring" ;; + 2 ) DEPLOYMENT_OPTION="kubeflow" ;; + 3 ) DEPLOYMENT_OPTION="standalone-kfp-monitoring" ;; + 4 ) DEPLOYMENT_OPTION="standalone-kfp" ;; + 5 ) DEPLOYMENT_OPTION="standalone-kfp-kserve-monitoring" ;; + 6 ) DEPLOYMENT_OPTION="standalone-kfp-kserve" ;; + * ) DEPLOYMENT_OPTION="$DEFAULT_DEPLOYMENT_OPTION" ;; +esac + +INSTALL_LOCAL_REGISTRY=true +echo +read -p "Install local Docker registry? (y/n) (default is [y]): " choice +case "$choice" in + n|N ) INSTALL_LOCAL_REGISTRY=false ;; + * ) INSTALL_LOCAL_REGISTRY=true ;; +esac + +INSTALL_RAY=false +echo +read -p "Install Ray? (y/n) (default is [n]): " choice +case "$choice" in + y|Y ) INSTALL_RAY=true ;; + * ) INSTALL_RAY=false ;; +esac + +# Save selections to settings file +echo -e "\nDEPLOYMENT_OPTION=$DEPLOYMENT_OPTION" >> $PLATFORM_CONFIG +echo -e "\nINSTALL_LOCAL_REGISTRY=$INSTALL_LOCAL_REGISTRY" >> $PLATFORM_CONFIG +echo -e "\nINSTALL_RAY=$INSTALL_RAY" >> $PLATFORM_CONFIG + # CHECK DISK SPACE -RECOMMENDED_DISK_SPACE=26214400 -RECOMMENDED_DISK_SPACE_GB=$(($RECOMMENDED_DISK_SPACE / 1024 / 1024)) +RECOMMENDED_DISK_SPACE_KUBEFLOW=26214400 +RECOMMENDED_DISK_SPACE_KUBEFLOW_GB=$(($RECOMMENDED_DISK_SPACE / 1024 / 1024)) +RECOMMENDED_DISK_SPACE_KFP=20971520 +RECOMMENDED_DISK_SPACE_KFP_GB=$(($RECOMMENDED_DISK_SPACE / 1024 / 1024)) + +if [[ $DEPLOYMENT_OPTION == *"kfp"* ]]; then + RECOMMENDED_DISK_SPACE=$RECOMMENDED_DISK_SPACE_KFP + RECOMMENDED_DISK_SPACE_GB=$RECOMMENDED_DISK_SPACE_KFP_GB +else + RECOMMENDED_DISK_SPACE=$RECOMMENDED_DISK_SPACE_KUBEFLOW + RECOMMENDED_DISK_SPACE_GB=$RECOMMENDED_DISK_SPACE_KUBEFLOW_GB +fi DISK_SPACE=$(df -k . | awk -F ' ' '{print $4}' | sed -n '2 p') DISK_SPACE_GB=$(($DISK_SPACE / 1024 / 1024)) +# TODO: Set required depending on the deployment, ray, etc. + if [[ DISK_SPACE < $RECOMMENDED_DISK_SPACE ]]; then echo "WARNING: Not enough disk space detected!" echo "The recommended is > ${RECOMMENDED_DISK_SPACE_GB} GB of disk space. You have ${DISK_SPACE_GB} GB." @@ -44,7 +104,19 @@ if [[ DISK_SPACE < $RECOMMENDED_DISK_SPACE ]]; then fi # CHECK CPU COUNT -RECOMMENDED_CPUS=16 +RECOMMENDED_CPUS_KUBEFLOW=12 +RECOMMENDED_CPUS_KFP=8 +EXTRA_RAY_CPUS=4 + +if [[ $DEPLOYMENT_OPTION == *"kfp"* ]]; then + RECOMMENDED_CPUS=$RECOMMENDED_CPUS_KFP +else + RECOMMENDED_CPUS=$RECOMMENDED_CPUS_KUBEFLOW +fi + +if [ "$INSTALL_RAY" = true ]; then + RECOMMENDED_CPUS=$(($RECOMMENDED_CPUS + $EXTRA_RAY_CPUS)) +fi # Detect the OS OS=$(uname) @@ -59,12 +131,13 @@ fi if [[ $CPU_COUNT -lt $RECOMMENDED_CPUS ]]; then echo "WARNING: Not enough CPU cores detected!" - echo "The recommended is >= ${RECOMMENDED_CPUS} CPU cores. You have ${CPU_COUNT} cores." + echo "The recommended is >= ${RECOMMENDED_CPUS} CPU cores for this deployment configuration. You have ${CPU_COUNT} cores." while true; do read -p "Do you want to continue with the installation? (y/n): " yn case $yn in [Yy]* ) break;; [Nn]* ) exit 1;; + "" ) echo "Please enter a response.";; * ) echo "Please answer yes or no.";; esac done @@ -72,9 +145,9 @@ fi # INSTALL TOOLS if [[ "$(uname)" == "Darwin" ]]; then - bash scripts/install_tools_mac.sh # Using default bash because /bin/bash is an old version (3) + bash "$SCRIPT_DIR/scripts/install_tools_mac.sh" # Using default bash because /bin/bash is an old version (3) else - /bin/bash scripts/install_tools.sh + /bin/bash "$SCRIPT_DIR/scripts/install_tools.sh" fi # CREATE CLUSTER @@ -83,30 +156,61 @@ function fail { exit "${2-1}" ## Return a code specified by $2, or 1 by default. } -/bin/bash scripts/create_cluster.sh || fail +# Check if the kind cluster already exists +if kind get clusters | grep -q "^$CLUSTER_NAME$"; then + echo + echo "Kind cluster with name \"$CLUSTER_NAME\" already exists. It can be deleted with the following command: kind delete cluster --name $CLUSTER_NAME" + while true; do + read -p "Do you want to continue the installation on the existing cluster? (y/n): " choice + case "$choice" in + y|Y ) echo "Using existing kind cluster..."; break;; + n|N ) exit 0 ;; + * ) echo "Invalid response. Please enter y or n." ;; + "" ) echo "Please enter a response." ;; + esac + done +else + echo "Creating kind cluster..." + /bin/bash "$SCRIPT_DIR/scripts/create_cluster.sh" +fi kubectl cluster-info --context kind-$CLUSTER_NAME # DEPLOY LOCAL DOCKER REGISTRY if [ "$INSTALL_LOCAL_REGISTRY" = true ]; then - /bin/bash scripts/install_local_registry.sh + /bin/bash "$SCRIPT_DIR/scripts/install_local_registry.sh" fi # DEPLOY STACK kubectl config use-context kind-$CLUSTER_NAME -# Create a temporary file -tmpfile=$(mktemp) # Build the kustomization and store the output in the temporary file -kustomize build deployment > "$tmpfile" - +tmp_file=$(mktemp) +DEPLOYMENT_ROOT="$SCRIPT_DIR/deployment/envs/$DEPLOYMENT_OPTION" +echo "Deployment root set to: $DEPLOYMENT_ROOT" +echo +echo "Building manifests..." +kustomize build $DEPLOYMENT_ROOT > "$tmp_file" +echo "Manifests built successfully." +echo +echo "Applying resources..." while true; do - if kubectl apply -f "$tmpfile"; then + if kubectl apply -f "$tmp_file"; then echo "Resources successfully applied." - rm "$tmpfile" + rm "$tmp_file" break else - echo "Retrying to apply resources. Be patient, this might take a while..." + echo + echo "Retrying to apply resources." + echo "Be patient, this might take a while... (Errors are expected until all resources are available!)" + echo + echo "Help:" + echo " If the errors persists, please check the pods status with: kubectl get pods --all-namespaces" + echo " All pods should be either in Running state, or ContainerCreating if they are still starting up." + echo " Check specific pod errors with: kubectl describe pod -n [NAMESPACE] [POD_NAME]" + echo " For further help, see the Troubleshooting section in setup.md" + echo + sleep 10 fi done @@ -114,17 +218,17 @@ done # DEPLOY RAY if [ "$INSTALL_RAY" = true ]; then echo "Installing Ray" - /bin/bash scripts/install_helm.sh - /bin/bash scripts/install_ray.sh + /bin/bash "$SCRIPT_DIR/scripts/install_helm.sh" + /bin/bash "$SCRIPT_DIR/scripts/install_ray.sh" fi echo -echo Installation completed! +echo "Installation completed!" echo # TESTS if [ "$RUN_TESTS" = "true" ]; then - /bin/bash scripts/run_tests.sh + /bin/bash "$SCRIPT_DIR/scripts/run_tests.sh" fi exit 0 diff --git a/tests/conftest.py b/tests/conftest.py index 1df8804..003ce94 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,7 +3,8 @@ from dotenv import load_dotenv import os -ENV_FILE = pathlib.Path(__file__).parent.parent / "config.env" +ENV_FILE = pathlib.Path(__file__).parent.parent / ".platform/.config" +assert ENV_FILE.exists(), f"File not found: {ENV_FILE} (autogenerated by the platform on installation)" # noqa load_dotenv(dotenv_path=ENV_FILE) CLUSTER_NAME = os.getenv("CLUSTER_NAME") @@ -14,8 +15,8 @@ assert HOST_IP is not None # MLFLOW -MLFLOW_ENV_FILE = pathlib.Path(__file__).parent.parent / "deployment/mlflow/env/local" / "config.env" -MLFLOW_SECRETS_FILE = pathlib.Path(__file__).parent.parent / "deployment/mlflow/env/local" / "secret.env" +MLFLOW_ENV_FILE = pathlib.Path(__file__).parent.parent / "deployment/mlflow/env/local" / "config.env" # noqa +MLFLOW_SECRETS_FILE = pathlib.Path(__file__).parent.parent / "deployment/mlflow/env/local" / "secret.env" # noqa load_dotenv(dotenv_path=MLFLOW_ENV_FILE, override=True) AWS_ACCESS_KEY_ID = os.getenv("MINIO_ACCESS_KEY") diff --git a/tests/resources/kfp/build_image.sh b/tests/resources/kfp/build_image.sh index 6ced22e..779bec1 100755 --- a/tests/resources/kfp/build_image.sh +++ b/tests/resources/kfp/build_image.sh @@ -12,7 +12,7 @@ cd "$(dirname "$0")" docker build -t "$FULL_IMAGE_NAME" . -# load the image into the local "kind" cluster with name "kind-ep" +# load the image into the local "kind" cluster kind load docker-image "$FULL_IMAGE_NAME" --name $CLUSTER_NAME # to push the image to a remote repository instead diff --git a/tests/resources/registry/build_push_image.sh b/tests/resources/registry/build_push_image.sh index 513de3c..14bf947 100755 --- a/tests/resources/registry/build_push_image.sh +++ b/tests/resources/registry/build_push_image.sh @@ -14,8 +14,5 @@ cd "$(dirname "$0")" docker build -t "$FULL_IMAGE_NAME" . -# load the image into the local "kind" cluster with name "kind-ep" -#kind load docker-image "$FULL_IMAGE_NAME" --name kind-ep - # to push the image to a remote repository instead docker push "$FULL_IMAGE_NAME" \ No newline at end of file