From 84093ee55324a8e9f16e77df2b9302bd19599cf0 Mon Sep 17 00:00:00 2001 From: HR Wu <5631010+heiruwu@users.noreply.github.com> Date: Wed, 10 Apr 2024 15:18:06 +0800 Subject: [PATCH] chore(model): adopt latest model serving dependencies (#466) Because - We are adopting latest containerized serverless model serving This commit - retire `controller-model` and `etcd` service - retire `model-repository` and `ray-conda` pvc - fix redis health check excessive port resolves INS-3853 resolves INS-3986 resolves INS-3984 --- .env | 20 +-- .../helm-integration-test-backend.yml | 6 +- .../helm-integration-test-console.yml | 6 +- .../helm-integration-test-latest.yml | 2 +- .../helm-integration-test-release.yml | 2 +- .github/workflows/integration-test-latest.yml | 2 +- .../workflows/integration-test-release.yml | 3 +- .github/workflows/make-all.yml | 1 - .github/workflows/make-latest.yml | 1 - .github/workflows/releases.yml | 1 - Dockerfile | 4 +- Makefile | 27 +--- charts/core/Chart.lock | 7 +- charts/core/Chart.yaml | 6 - charts/core/README.md | 1 - charts/core/charts/etcd-8.8.1.tgz | Bin 41175 -> 0 bytes charts/core/templates/_helpers.tpl | 43 ----- .../templates/controller-model/configmap.yaml | 50 ------ .../controller-model/deployment.yaml | 150 ------------------ .../core/templates/controller-model/hpa.yml | 35 ---- .../templates/controller-model/service.yaml | 21 --- .../templates/model-backend/configmap.yaml | 15 +- .../templates/model-backend/deployment.yaml | 39 ----- .../model-backend/post-install-job.yaml | 13 -- charts/core/templates/pvc.yaml | 60 ------- .../templates/ray-service/ray-service.yaml | 113 ++----------- .../core/templates/registry/deployment.yaml | 2 +- charts/core/values.yaml | 97 +---------- docker-compose-build.yml | 24 --- docker-compose-latest.yml | 30 ---- docker-compose.yml | 54 +------ 31 files changed, 35 insertions(+), 800 deletions(-) delete mode 100644 charts/core/charts/etcd-8.8.1.tgz delete mode 100644 charts/core/templates/controller-model/configmap.yaml delete mode 100644 charts/core/templates/controller-model/deployment.yaml delete mode 100644 charts/core/templates/controller-model/hpa.yml delete mode 100644 charts/core/templates/controller-model/service.yaml diff --git a/.env b/.env index 33bf060a..746ba1e1 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ COMPOSE_PROJECT_NAME=instill-core # docker compose profiles to selectively launch components for developing the latest codebase of the specified component. -# the value can be all, exclude-api-gateway, exclude-mgmt, exclude-pipeline, exclude-model, exclude-controller-model, or exclude-console. +# the value can be all, exclude-api-gateway, exclude-mgmt, exclude-pipeline, exclude-model, or exclude-console. PROFILE=all # build from scratch or not at launch, which will build all sources from scrach. Default to false. @@ -85,12 +85,6 @@ ARTIFACT_BACKEND_HOST=artifact-backend ARTIFACT_BACKEND_PRIVATEPORT=3085 ARTIFACT_BACKEND_PUBLICPORT=8085 -# controller-model -CONTROLLER_MODEL_IMAGE=instill/controller-model -CONTROLLER_MODEL_VERSION=0.4.0-alpha -CONTROLLER_MODEL_HOST=controller-model -CONTROLLER_MODEL_PRIVATEPORT=3086 - # console CONSOLE_IMAGE=instill/console CONSOLE_VERSION=0.43.0-beta @@ -144,18 +138,6 @@ REDOC_OPENAPI_VERSION=v2.0.0-rc.70 REDOC_OPENAPI_HOST=redoc-openapi REDOC_OPENAPI_PORT=3001 -# etcd -ETCD_IMAGE=quay.io/coreos/etcd -ETCD_VERSION=3.5.8 -ETCD_HOST=etcd -ETCD_CLIENT_PORT=3379 -ETCD_PEER_PORT=3380 -ETCD_CLUSTER_TOKEN=instill-core-etcd -ETCD_CLUSTER_STATE=new -ETCDCTL_API=3 -ETCD_AUTO_COMPACTION_MODE=revision -ETCD_AUTO_COMPACTION_RETENTION=1 - # influxdb INFLUXDB_IMAGE=influxdb INFLUXDB_VERSION=2.7 diff --git a/.github/workflows/helm-integration-test-backend.yml b/.github/workflows/helm-integration-test-backend.yml index 714ffbdc..c45c198e 100644 --- a/.github/workflows/helm-integration-test-backend.yml +++ b/.github/workflows/helm-integration-test-backend.yml @@ -59,7 +59,6 @@ jobs: --set pipelineBackend.image.tag=latest \ --set pipelineBackend.excludelocalconnector=false \ --set modelBackend.image.tag=latest \ - --set controllerModel.image.tag=latest \ --set console.image.tag=latest \ --set rayService.image.tag=${RAY_SERVER_VERSION} \ --set rayService.headGroupSpec.resources.limits.cpu=0 \ @@ -84,7 +83,7 @@ jobs: echo "$(kubectl get pods --namespace instill-ai)" sleep 10 done - while [[ $(kubectl get pods --namespace instill-ai -l "app.kubernetes.io/component=controller-model,app.kubernetes.io/instance=core" -o 'jsonpath={..status.phase}') != *"Running"* ]]; do + while [[ $(kubectl get pods --namespace instill-ai -l "app.kubernetes.io/component=model-backend,app.kubernetes.io/instance=core" -o 'jsonpath={..status.phase}') != *"Running"* ]]; do echo "$(kubectl get pods --namespace instill-ai)" sleep 10 done @@ -165,7 +164,6 @@ jobs: --set pipelineBackend.image.tag=${PIPELINE_BACKEND_VERSION} \ --set pipelineBackend.excludelocalconnector=false \ --set modelBackend.image.tag=${MODEL_BACKEND_VERSION} \ - --set controllerModel.image.tag=${CONTROLLER_MODEL_VERSION} \ --set console.image.tag=${CONSOLE_VERSION} \ --set rayService.image.tag=${RAY_SERVER_VERSION} \ --set rayService.headGroupSpec.resources.limits.cpu=0 \ @@ -190,7 +188,7 @@ jobs: echo "$(kubectl get pods --namespace instill-ai)" sleep 10 done - while [[ $(kubectl get pods --namespace instill-ai -l "app.kubernetes.io/component=controller-model,app.kubernetes.io/instance=core" -o 'jsonpath={..status.phase}') != *"Running"* ]]; do + while [[ $(kubectl get pods --namespace instill-ai -l "app.kubernetes.io/component=model-backend,app.kubernetes.io/instance=core" -o 'jsonpath={..status.phase}') != *"Running"* ]]; do echo "$(kubectl get pods --namespace instill-ai)" sleep 10 done diff --git a/.github/workflows/helm-integration-test-console.yml b/.github/workflows/helm-integration-test-console.yml index a764fcf8..32d18a25 100644 --- a/.github/workflows/helm-integration-test-console.yml +++ b/.github/workflows/helm-integration-test-console.yml @@ -52,7 +52,6 @@ jobs: --set pipelineBackend.image.tag=latest \ --set pipelineBackend.excludelocalconnector=false \ --set modelBackend.image.tag=latest \ - --set controllerModel.image.tag=latest \ --set console.image.tag=latest \ --set rayService.image.tag=${RAY_SERVER_VERSION} \ --set rayService.headGroupSpec.resources.limits.cpu=0 \ @@ -77,7 +76,7 @@ jobs: echo "$(kubectl get pods --namespace instill-ai)" sleep 10 done - while [[ $(kubectl get pods --namespace instill-ai -l "app.kubernetes.io/component=controller-model,app.kubernetes.io/instance=core" -o 'jsonpath={..status.phase}') != *"Running"* ]]; do + while [[ $(kubectl get pods --namespace instill-ai -l "app.kubernetes.io/component=model-backend,app.kubernetes.io/instance=core" -o 'jsonpath={..status.phase}') != *"Running"* ]]; do echo "$(kubectl get pods --namespace instill-ai)" sleep 10 done @@ -185,7 +184,6 @@ jobs: --set pipelineBackend.image.tag=${PIPELINE_BACKEND_VERSION} \ --set pipelineBackend.excludelocalconnector=false \ --set modelBackend.image.tag=${MODEL_BACKEND_VERSION} \ - --set controllerModel.image.tag=${CONTROLLER_MODEL_VERSION} \ --set console.image.tag=${CONSOLE_VERSION} \ --set rayService.image.tag=${RAY_SERVER_VERSION} \ --set rayService.headGroupSpec.resources.limits.cpu=0 \ @@ -210,7 +208,7 @@ jobs: echo "$(kubectl get pods --namespace instill-ai)" sleep 10 done - while [[ $(kubectl get pods --namespace instill-ai -l "app.kubernetes.io/component=controller-model,app.kubernetes.io/instance=core" -o 'jsonpath={..status.phase}') != *"Running"* ]]; do + while [[ $(kubectl get pods --namespace instill-ai -l "app.kubernetes.io/component=model-backend,app.kubernetes.io/instance=core" -o 'jsonpath={..status.phase}') != *"Running"* ]]; do echo "$(kubectl get pods --namespace instill-ai)" sleep 10 done diff --git a/.github/workflows/helm-integration-test-latest.yml b/.github/workflows/helm-integration-test-latest.yml index c914a107..a64ac0e0 100644 --- a/.github/workflows/helm-integration-test-latest.yml +++ b/.github/workflows/helm-integration-test-latest.yml @@ -12,7 +12,7 @@ jobs: fail-fast: false matrix: component: - [mgmt-backend, pipeline-backend, model-backend, controller-model] + [mgmt-backend, pipeline-backend, model-backend] uses: instill-ai/instill-core/.github/workflows/helm-integration-test-backend.yml@main with: component: ${{ matrix.component }} diff --git a/.github/workflows/helm-integration-test-release.yml b/.github/workflows/helm-integration-test-release.yml index 5f8cd84d..b54e8760 100644 --- a/.github/workflows/helm-integration-test-release.yml +++ b/.github/workflows/helm-integration-test-release.yml @@ -9,7 +9,7 @@ jobs: fail-fast: false matrix: component: - [mgmt-backend, pipeline-backend, model-backend, controller-model] + [mgmt-backend, pipeline-backend, model-backend] uses: instill-ai/instill-core/.github/workflows/helm-integration-test-backend.yml@main with: component: ${{ matrix.component }} diff --git a/.github/workflows/integration-test-latest.yml b/.github/workflows/integration-test-latest.yml index 9876d8c1..bc6c8bc6 100644 --- a/.github/workflows/integration-test-latest.yml +++ b/.github/workflows/integration-test-latest.yml @@ -12,7 +12,7 @@ jobs: fail-fast: false matrix: component: - [mgmt-backend, pipeline-backend, model-backend, controller-model] + [mgmt-backend, pipeline-backend, model-backend] uses: instill-ai/instill-core/.github/workflows/integration-test-backend.yml@main with: component: ${{ matrix.component }} diff --git a/.github/workflows/integration-test-release.yml b/.github/workflows/integration-test-release.yml index f89c71b2..38d2aa57 100644 --- a/.github/workflows/integration-test-release.yml +++ b/.github/workflows/integration-test-release.yml @@ -9,7 +9,7 @@ jobs: fail-fast: false matrix: component: - [mgmt-backend, pipeline-backend, model-backend, controller-model] + [mgmt-backend, pipeline-backend, model-backend] uses: instill-ai/instill-core/.github/workflows/integration-test-backend.yml@main with: component: ${{ matrix.component }} @@ -18,4 +18,3 @@ jobs: uses: instill-ai/instill-core/.github/workflows/integration-test-console.yml@main with: target: release - \ No newline at end of file diff --git a/.github/workflows/make-all.yml b/.github/workflows/make-all.yml index f79102d1..285ab6b6 100644 --- a/.github/workflows/make-all.yml +++ b/.github/workflows/make-all.yml @@ -51,7 +51,6 @@ jobs: curl -s -o /dev/null -w ''%{http_code}'\n' http://localhost:8080/core/v1beta/health/mgmt curl -s -o /dev/null -w ''%{http_code}'\n' http://localhost:8080/vdp/v1beta/health/pipeline curl -s -o /dev/null -w ''%{http_code}'\n' http://localhost:8080/model/v1beta/health/model - curl -s -o /dev/null -w ''%{http_code}'\n' http://localhost:8080/model/v1beta/health/model-controller - name: Tear down Instill Core (release) run: | diff --git a/.github/workflows/make-latest.yml b/.github/workflows/make-latest.yml index f3a95b7d..f5e6416d 100644 --- a/.github/workflows/make-latest.yml +++ b/.github/workflows/make-latest.yml @@ -55,7 +55,6 @@ jobs: curl -s -o /dev/null -w ''%{http_code}'\n' http://localhost:8080/core/v1beta/health/mgmt curl -s -o /dev/null -w ''%{http_code}'\n' http://localhost:8080/vdp/v1beta/health/pipeline curl -s -o /dev/null -w ''%{http_code}'\n' http://localhost:8080/model/v1beta/health/model - curl -s -o /dev/null -w ''%{http_code}'\n' http://localhost:8080/model/v1beta/health/model-controller - name: Tear down Instill Core (latest) run: | diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index bf82d9e3..4f9c0700 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -79,7 +79,6 @@ jobs: yq ".mgmtBackend.image.tag=\"$MGMT_BACKEND_VERSION\"" -i charts/core/values.yaml yq ".pipelineBackend.image.tag=\"$PIPELINE_BACKEND_VERSION\"" -i charts/core/values.yaml yq ".modelBackend.image.tag=\"$MODEL_BACKEND_VERSION\"" -i charts/core/values.yaml - yq ".controllerModel.image.tag=\"$CONTROLLER_MODEL_VERSION\"" -i charts/core/values.yaml yq ".console.image.tag=\"$CONSOLE_VERSION\"" -i charts/core/values.yaml yq ".rayService.image.tag=\"$RAY_SERVER_VERSION\"" -i charts/core/values.yaml yq ".temporal.image.tag=\"$TEMPORAL_VERSION\"" -i charts/core/values.yaml diff --git a/Dockerfile b/Dockerfile index 53e84401..f797c52d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,7 +33,6 @@ RUN git clone https://github.com/instill-ai/mgmt-backend.git RUN git clone https://github.com/instill-ai/console.git RUN git clone https://github.com/instill-ai/pipeline-backend.git RUN git clone https://github.com/instill-ai/model-backend.git -RUN git clone https://github.com/instill-ai/controller-model.git RUN git clone https://github.com/instill-ai/artifact-backend.git FROM alpine:${ALPINE_VERSION} AS release @@ -48,11 +47,10 @@ RUN echo "Instill Core release codebase cloned on ${CACHE_DATE}" WORKDIR /instill-core -ARG API_GATEWAY_VERSION MGMT_BACKEND_VERSION CONSOLE_VERSION PIPELINE_BACKEND_VERSION MODEL_BACKEND_VERSION CONTROLLER_MODEL_VERSION ARTIFACT_BACKEND_VERSION +ARG API_GATEWAY_VERSION MGMT_BACKEND_VERSION CONSOLE_VERSION PIPELINE_BACKEND_VERSION MODEL_BACKEND_VERSION ARTIFACT_BACKEND_VERSION RUN git clone -b v${API_GATEWAY_VERSION} -c advice.detachedHead=false https://github.com/instill-ai/api-gateway.git RUN git clone -b v${MGMT_BACKEND_VERSION} -c advice.detachedHead=false https://github.com/instill-ai/mgmt-backend.git RUN git clone -b v${CONSOLE_VERSION} -c advice.detachedHead=false https://github.com/instill-ai/console.git RUN git clone -b v${PIPELINE_BACKEND_VERSION} -c advice.detachedHead=false https://github.com/instill-ai/pipeline-backend.git RUN git clone -b v${MODEL_BACKEND_VERSION} -c advice.detachedHead=false https://github.com/instill-ai/model-backend.git -RUN git clone -b v${CONTROLLER_MODEL_VERSION} -c advice.detachedHead=false https://github.com/instill-ai/controller-model.git RUN git clone -b v${ARTIFACT_BACKEND_VERSION} -c advice.detachedHead=false https://github.com/instill-ai/artifact-backend.git diff --git a/Makefile b/Makefile index fe849c38..ead13d1d 100644 --- a/Makefile +++ b/Makefile @@ -95,7 +95,6 @@ build-latest: ## Build latest images for all Instill Core components MGMT_BACKEND_VERSION=latest \ PIPELINE_BACKEND_VERSION=latest \ MODEL_BACKEND_VERSION=latest \ - CONTROLLER_MODEL_VERSION=latest \ ARTIFACT_BACKEND_VERSION=latest \ CONSOLE_VERSION=latest \ COMPOSE_PROFILES=${PROFILE} docker compose -f docker-compose-build.yml build --progress plain \ @@ -113,7 +112,6 @@ build-release: ## Build release images for all Instill Core components --build-arg MGMT_BACKEND_VERSION=${MGMT_BACKEND_VERSION} \ --build-arg PIPELINE_BACKEND_VERSION=${PIPELINE_BACKEND_VERSION} \ --build-arg MODEL_BACKEND_VERSION=${MODEL_BACKEND_VERSION} \ - --build-arg CONTROLLER_MODEL_VERSION=${CONTROLLER_MODEL_VERSION} \ --build-arg ARTIFACT_BACKEND_VERSION=${ARTIFACT_BACKEND_VERSION} \ --build-arg CONSOLE_VERSION=${CONSOLE_VERSION} \ --target release \ @@ -129,7 +127,6 @@ build-release: ## Build release images for all Instill Core components MGMT_BACKEND_VERSION=${MGMT_BACKEND_VERSION} \ PIPELINE_BACKEND_VERSION=${PIPELINE_BACKEND_VERSION} \ MODEL_BACKEND_VERSION=${MODEL_BACKEND_VERSION} \ - CONTROLLER_MODEL_VERSION=${CONTROLLER_MODEL_VERSION} \ ARTIFACT_BACKEND_VERSION=${ARTIFACT_BACKEND_VERSION} \ CONSOLE_VERSION=${CONSOLE_VERSION} \ COMPOSE_PROFILES=${PROFILE} docker compose -f docker-compose-build.yml build --progress plain \ @@ -188,8 +185,7 @@ integration-test-latest: ## Run integration test on the latest VDP ${INSTILL_CORE_IMAGE_NAME}:latest /bin/sh -c " \ /bin/sh -c 'cd mgmt-backend && make integration-test API_GATEWAY_URL=${API_GATEWAY_HOST}:${API_GATEWAY_PORT}' && \ /bin/sh -c 'cd pipeline-backend && make integration-test API_GATEWAY_URL=${API_GATEWAY_HOST}:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=${API_GATEWAY_HOST}:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd controller-model && make integration-test API_GATEWAY_URL=${API_GATEWAY_HOST}:${API_GATEWAY_PORT}' \ + /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=${API_GATEWAY_HOST}:${API_GATEWAY_PORT}' \ " @make down @@ -202,8 +198,7 @@ integration-test-release: ## Run integration test on the release VDP ${INSTILL_CORE_IMAGE_NAME}:${INSTILL_CORE_VERSION} /bin/sh -c " \ /bin/sh -c 'cd mgmt-backend && make integration-test API_GATEWAY_URL=${API_GATEWAY_HOST}:${API_GATEWAY_PORT}' && \ /bin/sh -c 'cd pipeline-backend && make integration-test API_GATEWAY_URL=${API_GATEWAY_HOST}:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=${API_GATEWAY_HOST}:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd controller-model && make integration-test API_GATEWAY_URL=${API_GATEWAY_HOST}:${API_GATEWAY_PORT}' \ + /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=${API_GATEWAY_HOST}:${API_GATEWAY_PORT}' \ " @make down @@ -220,7 +215,6 @@ helm-integration-test-latest: ## Run integration test on t --set pipelineBackend.image.tag=latest \ --set pipelineBackend.excludelocalconnector=false \ --set modelBackend.image.tag=latest \ - --set controllerModel.image.tag=latest \ --set console.image.tag=latest \ --set rayService.image.tag=${RAY_LATEST_TAG} \ --set tags.observability=false \ @@ -233,15 +227,13 @@ ifeq ($(UNAME_S),Darwin) @docker run --rm --name ${INSTILL_CORE_INTEGRATION_TEST_CONTAINER_NAME}-helm-latest ${INSTILL_CORE_IMAGE_NAME}:latest /bin/sh -c " \ /bin/sh -c 'cd mgmt-backend && make integration-test API_GATEWAY_URL=host.docker.internal:${API_GATEWAY_PORT}' && \ /bin/sh -c 'cd pipeline-backend && make integration-test API_GATEWAY_URL=host.docker.internal:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=host.docker.internal:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd controller-model && make integration-test API_GATEWAY_URL=host.docker.internal:${API_GATEWAY_PORT}' \ + /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=host.docker.internal:${API_GATEWAY_PORT}' \ " else ifeq ($(UNAME_S),Linux) @docker run --rm --network host --name ${INSTILL_CORE_INTEGRATION_TEST_CONTAINER_NAME}-helm-latest ${INSTILL_CORE_IMAGE_NAME}:latest /bin/sh -c " \ /bin/sh -c 'cd mgmt-backend && make integration-test API_GATEWAY_URL=localhost:${API_GATEWAY_PORT}' && \ /bin/sh -c 'cd pipeline-backend && make integration-test API_GATEWAY_URL=localhost:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=localhost:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd controller-model && make integration-test API_GATEWAY_URL=localhost:${API_GATEWAY_PORT}' \ + /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=localhost:${API_GATEWAY_PORT}' \ " endif @helm uninstall ${HELM_RELEASE_NAME} --namespace ${HELM_NAMESPACE} @@ -262,7 +254,6 @@ helm-integration-test-release: ## Run integration test on --set pipelineBackend.image.tag=${PIPELINE_BACKEND_VERSION} \ --set pipelineBackend.excludelocalconnector=false \ --set modelBackend.image.tag=${MODEL_BACKEND_VERSION} \ - --set controllerModel.image.tag=${CONTROLLER_MODEL_VERSION} \ --set console.image.tag=${CONSOLE_VERSION} \ --set rayService.image.tag=${RAY_RELEASE_TAG} \ --set tags.observability=false \ @@ -275,15 +266,13 @@ ifeq ($(UNAME_S),Darwin) @docker run --rm --name ${INSTILL_CORE_INTEGRATION_TEST_CONTAINER_NAME}-helm-release ${INSTILL_CORE_IMAGE_NAME}:${INSTILL_CORE_VERSION} /bin/sh -c " \ /bin/sh -c 'cd mgmt-backend && make integration-test API_GATEWAY_URL=host.docker.internal:${API_GATEWAY_PORT}' && \ /bin/sh -c 'cd pipeline-backend && make integration-test API_GATEWAY_URL=host.docker.internal:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=host.docker.internal:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd controller-model && make integration-test API_GATEWAY_URL=host.docker.internal:${API_GATEWAY_PORT}' \ + /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=host.docker.internal:${API_GATEWAY_PORT}' \ " else ifeq ($(UNAME_S),Linux) @docker run --rm --network host --name ${INSTILL_CORE_INTEGRATION_TEST_CONTAINER_NAME}-helm-release ${INSTILL_CORE_IMAGE_NAME}:${INSTILL_CORE_VERSION} /bin/sh -c " \ /bin/sh -c 'cd mgmt-backend && make integration-test API_GATEWAY_URL=localhost:${API_GATEWAY_PORT}' && \ /bin/sh -c 'cd pipeline-backend && make integration-test API_GATEWAY_URL=localhost:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=localhost:${API_GATEWAY_PORT}' && \ - /bin/sh -c 'cd controller-model && make integration-test API_GATEWAY_URL=localhost:${API_GATEWAY_PORT}' \ + /bin/sh -c 'cd model-backend && make integration-test API_GATEWAY_URL=localhost:${API_GATEWAY_PORT}' \ " endif @helm uninstall ${HELM_RELEASE_NAME} --namespace ${HELM_NAMESPACE} @@ -342,7 +331,6 @@ ifeq ($(UNAME_S),Darwin) --set pipelineBackend.image.tag=latest \ --set pipelineBackend.excludelocalconnector=false \ --set modelBackend.image.tag=latest \ - --set controllerModel.image.tag=latest \ --set console.image.tag=latest \ --set rayService.image.tag=${RAY_LATEST_TAG} \ --set apiGatewayURL=http://host.docker.internal:${API_GATEWAY_PORT} \ @@ -360,7 +348,6 @@ else ifeq ($(UNAME_S),Linux) --set pipelineBackend.image.tag=latest \ --set pipelineBackend.excludelocalconnector=false \ --set modelBackend.image.tag=latest \ - --set controllerModel.image.tag=latest \ --set console.image.tag=latest \ --set rayService.image.tag=${RAY_LATEST_TAG} \ --set apiGatewayURL=http://localhost:${API_GATEWAY_PORT} \ @@ -422,7 +409,6 @@ ifeq ($(UNAME_S),Darwin) --set pipelineBackend.image.tag=${PIPELINE_BACKEND_VERSION} \ --set pipelineBackend.excludelocalconnector=false \ --set modelBackend.image.tag=${MODEL_BACKEND_VERSION} \ - --set controllerModel.image.tag=${CONTROLLER_MODEL_VERSION} \ --set console.image.tag=${CONSOLE_VERSION} \ --set rayService.image.tag=${RAY_RELEASE_TAG} \ --set apiGatewayURL=http://host.docker.internal:${API_GATEWAY_PORT} \ @@ -440,7 +426,6 @@ else ifeq ($(UNAME_S),Linux) --set pipelineBackend.image.tag=${PIPELINE_BACKEND_VERSION} \ --set pipelineBackend.excludelocalconnector=false \ --set modelBackend.image.tag=${MODEL_BACKEND_VERSION} \ - --set controllerModel.image.tag=${CONTROLLER_MODEL_VERSION} \ --set console.image.tag=${CONSOLE_VERSION} \ --set rayService.image.tag=${RAY_RELEASE_TAG} \ --set apiGatewayURL=http://localhost:${API_GATEWAY_PORT} \ diff --git a/charts/core/Chart.lock b/charts/core/Chart.lock index 44d632f6..2382eb42 100644 --- a/charts/core/Chart.lock +++ b/charts/core/Chart.lock @@ -2,9 +2,6 @@ dependencies: - name: kuberay-operator repository: https://ray-project.github.io/kuberay-helm/ version: 1.0.0 -- name: etcd - repository: https://charts.bitnami.com/bitnami - version: 8.8.1 - name: elasticsearch repository: https://helm.elastic.co version: 7.17.3 @@ -23,5 +20,5 @@ dependencies: - name: grafana repository: https://grafana.github.io/helm-charts version: 7.0.19 -digest: sha256:e7dccde76e808e60c69a3bfcd6071106b4daab9e2b5fe352f0146814fc64fa61 -generated: "2024-02-26T22:55:15.548288Z" +digest: sha256:cc5d2baa4d56e12db43d69005b7dadf02945026b89b5f011983b40d66116b58b +generated: "2024-03-28T03:28:47.415942+08:00" diff --git a/charts/core/Chart.yaml b/charts/core/Chart.yaml index 812b3414..c5662f0a 100644 --- a/charts/core/Chart.yaml +++ b/charts/core/Chart.yaml @@ -23,12 +23,6 @@ dependencies: version: 1.0.0 tags: - model - - name: etcd - repository: https://charts.bitnami.com/bitnami - version: 8.8.1 - condition: etcd.enabled - tags: - - model - name: elasticsearch repository: https://helm.elastic.co version: 7.17.3 diff --git a/charts/core/README.md b/charts/core/README.md index 42b86e13..4b6524d5 100644 --- a/charts/core/README.md +++ b/charts/core/README.md @@ -8,7 +8,6 @@ The Helm chart of Instill Core | Repository | Name | Version | |------------|------|---------| -| https://charts.bitnami.com/bitnami | etcd | 8.8.1 | | https://grafana.github.io/helm-charts | grafana | 7.0.19 | | https://helm.elastic.co | elasticsearch | 7.17.3 | | https://helm.influxdata.com | influxdb2 | 2.1.1 | diff --git a/charts/core/charts/etcd-8.8.1.tgz b/charts/core/charts/etcd-8.8.1.tgz deleted file mode 100644 index 2a41d2d7bef3da7461ac5bac33f4ef4c92d9a18a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41175 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 LW%eIX0Kx+RWQf73 diff --git a/charts/core/templates/_helpers.tpl b/charts/core/templates/_helpers.tpl index 1cb42c9d..66d83568 100644 --- a/charts/core/templates/_helpers.tpl +++ b/charts/core/templates/_helpers.tpl @@ -153,18 +153,6 @@ model-backend {{- printf "3083" -}} {{- end -}} -{{/* -controller-model -*/}} -{{- define "core.controllerModel" -}} - {{- printf "%s-controller-model" (include "core.fullname" .) -}} -{{- end -}} - -{{/* controller-model service and container private port */}} -{{- define "core.controllerModel.privatePort" -}} - {{- printf "3086" -}} -{{- end -}} - {{/* artifact-backend */}} @@ -346,21 +334,6 @@ redis address host:port {{- include "core.database.rawPassword" . | b64enc | quote -}} {{- end -}} -{{/* -etcd -*/}} -{{- define "core.etcd" -}} - {{- printf "%s-etcd" (include "core.fullname" .) -}} -{{- end -}} - -{{- define "core.etcd.clientPort" -}} - {{- printf "2379" -}} -{{- end -}} - -{{- define "core.etcd.peerPort" -}} - {{- printf "2380" -}} -{{- end -}} - {{/* influxdb */}} @@ -451,14 +424,6 @@ internal TLS secret names {{- end -}} {{- end -}} -{{- define "core.internalTLS.controllerModel.secretName" -}} - {{- if eq .Values.internalTLS.certSource "secret" -}} - {{- .Values.internalTLS.controllerModel.secretName -}} - {{- else -}} - {{- printf "%s-controller-model-internal-tls" (include "core.fullname" .) -}} - {{- end -}} -{{- end -}} - {{- define "core.internalTLS.console.secretName" -}} {{- if eq .Values.internalTLS.certSource "secret" -}} {{- .Values.internalTLS.console.secretName -}} @@ -470,14 +435,6 @@ internal TLS secret names {{/* Persistent Volume Claims */}} -{{- define "core.modelRepositoryDataVolume" -}} - {{- printf "%s-model-repository-data-volume" (include "core.fullname" .) -}} -{{- end -}} - -{{- define "core.rayCondaDataVolume" -}} - {{- printf "%s-ray-conda-data-volume" (include "core.fullname" .) -}} -{{- end -}} - {{- define "core.registryDataVolume" -}} {{- printf "%s-registry-data-volume" (include "core.fullname" .) -}} {{- end -}} diff --git a/charts/core/templates/controller-model/configmap.yaml b/charts/core/templates/controller-model/configmap.yaml deleted file mode 100644 index 21ca5d1d..00000000 --- a/charts/core/templates/controller-model/configmap.yaml +++ /dev/null @@ -1,50 +0,0 @@ -{{- if .Values.tags.model -}} -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ template "core.controllerModel" . }} - labels: - {{- include "core.labels" . | nindent 4 }} - app.kubernetes.io/component: controller-model -data: - config.yaml: |+ - server: - privateport: {{ template "core.controllerModel.privatePort" . }} - edition: {{ .Values.edition }} - loopinterval: {{ .Values.controllerModel.loopinterval }} - timeout: 120 - debug: {{ ternary "true" "false" (eq (.Values.logLevel | upper) "DEBUG") }} - {{- if .Values.internalTLS.enabled }} - https: - cert: /etc/instill-ai/model/ssl/controller/tls.crt - key: /etc/instill-ai/model/ssl/controller/tls.key - {{- end }} - etcd: - host: {{ template "core.etcd" . }} - port: {{ template "core.etcd.clientPort" . }} - timeout: 5 - modelbackend: - host: {{ template "core.modelBackend" . }} - publicport: {{ template "core.modelBackend.publicPort" . }} - privateport: {{ template "core.modelBackend.privatePort" . }} - {{- if .Values.internalTLS.enabled }} - https: - cert: /etc/instill-ai/model/ssl/model/tls.crt - key: /etc/instill-ai/model/ssl/model/tls.key - {{- end }} - cache: - redis: - redisoptions: - addr: {{ default (include "core.redis.addr" .) .Values.redis.external.addr }} - model: - {{- toYaml .Values.modelBackend.cache | nindent 8 }} - mgmtbackend: - host: {{ template "core.mgmtBackend" . }} - publicport: {{ template "core.mgmtBackend.publicPort" . }} - privateport: {{ template "core.mgmtBackend.privatePort" . }} - {{- if .Values.internalTLS.enabled }} - https: - cert: /etc/instill-ai/model/ssl/mgmt/tls.crt - key: /etc/instill-ai/model/ssl/mgmt/tls.key - {{- end }} -{{- end }} diff --git a/charts/core/templates/controller-model/deployment.yaml b/charts/core/templates/controller-model/deployment.yaml deleted file mode 100644 index acd76e14..00000000 --- a/charts/core/templates/controller-model/deployment.yaml +++ /dev/null @@ -1,150 +0,0 @@ -{{- if .Values.tags.model -}} -{{- $modelRepository := .Values.persistence.persistentVolumeClaim.modelRepository -}} -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ template "core.controllerModel" . }} - labels: - {{- include "core.labels" . | nindent 4 }} - app.kubernetes.io/component: controller-model - annotations: - rollme: {{ randAlphaNum 5 | quote }} -spec: - strategy: - type: {{ .Values.updateStrategy.type }} - {{- if eq .Values.updateStrategy.type "RollingUpdate" }} - rollingUpdate: - maxSurge: {{ .Values.updateStrategy.rollingUpdate.maxSurge }} - maxUnavailable: {{ .Values.updateStrategy.rollingUpdate.maxUnavailable }} - {{- else}} - rollingUpdate: null - {{- end }} - {{- if not .Values.controllerModel.autoscaling.enabled }} - replicas: {{ .Values.controllerModel.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "core.matchLabels" . | nindent 6 }} - app.kubernetes.io/component: controller-model - template: - metadata: - labels: - {{- include "core.matchLabels" . | nindent 8 }} - app.kubernetes.io/component: controller-model - annotations: - checksum/config: {{ include (print $.Template.BasePath "/controller-model/configmap.yaml") . | sha256sum }} - {{- with .Values.controllerModel.podAnnotations }} - {{- toYaml . | nindent 8 }} - {{- end }} - spec: - # distroless users - # root:x:0:0:root:/root:/sbin/nologin - # nobody:x:65534:65534:nobody:/nonexistent:/sbin/nologin - # nonroot:x:65532:65532:nonroot:/home/nonroot:/sbin/nologin - securityContext: - runAsUser: 65534 - runAsGroup: 65534 - {{- if .Values.controllerModel.serviceAccountName }} - serviceAccountName: {{ .Values.controllerModel.serviceAccountName }} - {{- end }} - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - automountServiceAccountToken: {{ .Values.controllerModel.automountServiceAccountToken | default false }} - terminationGracePeriodSeconds: 120 - initContainers: - - name: wait-for-dependencies - image: curlimages/curl:8.00.1 - command: ['sh', '-c'] - args: - - > - while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' ${ETCD_HOST}:${ETCD_CLIENT_PORT}/health)" != "200" ]]; do echo waiting for etcd; sleep 1; done && - while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' ${MODEL_BACKEND_HOST}:${MODEL_BACKEND_PORT}/v1alpha/health/model)" != "200" ]]; do echo waiting for model-backend; sleep 1; done - env: - - name: MODEL_BACKEND_HOST - value: "{{ template "core.modelBackend" . }}" - - name: MODEL_BACKEND_PORT - value: "{{ template "core.modelBackend.publicPort" . }}" - - name: ETCD_HOST - value: "{{ template "core.etcd" . }}" - - name: ETCD_CLIENT_PORT - value: "{{ template "core.etcd.clientPort" . }}" - containers: - - name: controller-model - image: {{ .Values.controllerModel.image.repository }}:{{ .Values.controllerModel.image.tag }} - imagePullPolicy: {{ .Values.controllerModel.image.pullPolicy }} - readinessProbe: - httpGet: - path: /v1alpha/__readiness - scheme: {{ ternary "https" "http" .Values.internalTLS.enabled | upper }} - port: {{ ternary "https" "http" .Values.internalTLS.enabled }}-private - periodSeconds: 10 - livenessProbe: - httpGet: - path: /v1alpha/__liveness - scheme: {{ ternary "https" "http" .Values.internalTLS.enabled | upper }} - port: {{ ternary "https" "http" .Values.internalTLS.enabled }}-private - periodSeconds: 10 - {{- if .Values.controllerModel.resources }} - resources: - {{- toYaml .Values.controllerModel.resources | nindent 12 }} - {{- end }} - command: [./{{ .Values.controllerModel.commandName.main }}] - ports: - - name: {{ ternary "https" "http" .Values.internalTLS.enabled }}-private - containerPort: {{ template "core.controllerModel.privatePort" . }} - protocol: TCP - volumeMounts: - - name: config - mountPath: {{ .Values.controllerModel.configPath }} - subPath: config.yaml - - name: model-repository - mountPath: /model-repository - {{- if .Values.internalTLS.enabled }} - - name: controller-internal-certs - mountPath: "/etc/instill-ai/model/ssl/controller" - {{- end }} - {{- with .Values.controllerModel.extraVolumeMounts }} - {{- toYaml . | nindent 12 }} - {{- end }} - {{- if .Values.controllerModel.extraEnv }} - env: - {{- toYaml .Values.controllerModel.extraEnv | nindent 12 }} - {{- end }} - {{- with .Values.controllerModel.sidecarContainers }} - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - name: config - configMap: - name: {{ template "core.controllerModel" . }} - - name: controller-internal-certs - secret: - secretName: {{ template "core.internalTLS.controllerModel.secretName" . }} - - name: model-repository - {{- if not .Values.persistence.enabled }} - emptyDir: {} - {{- else if $modelRepository.existingClaim }} - persistentVolumeClaim: - claimName: {{ $modelRepository.existingClaim }} - {{- else }} - persistentVolumeClaim: - claimName: {{ template "core.modelRepositoryDataVolume" . }} - {{- end }} - {{- with .Values.controllerModel.extraVolumes }} - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.controllerModel.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.controllerModel.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.controllerModel.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} -{{- end }} diff --git a/charts/core/templates/controller-model/hpa.yml b/charts/core/templates/controller-model/hpa.yml deleted file mode 100644 index 9974c323..00000000 --- a/charts/core/templates/controller-model/hpa.yml +++ /dev/null @@ -1,35 +0,0 @@ -{{- if .Values.tags.model -}} -{{- if .Values.controllerModel.autoscaling.enabled }} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ template "core.controllerModel" . }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ template "core.controllerModel" . }} - labels: - {{- include "core.labels" . | nindent 4 }} - app.kubernetes.io/component: controller-model - minReplicas: {{ .Values.controllerModel.autoscaling.minReplicas }} - maxReplicas: {{ .Values.controllerModel.autoscaling.maxReplicas }} - metrics: -{{- with .Values.controllerModel.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ . }} -{{- end }} -{{- with .Values.controllerModel.autoscaling.targetAverageMemoryUtilization }} - - type: Resource - resource: - name: memory - target: - type: AverageValue - averageValue: {{ . }} -{{- end }} -{{- end }} -{{- end }} diff --git a/charts/core/templates/controller-model/service.yaml b/charts/core/templates/controller-model/service.yaml deleted file mode 100644 index 8c4f578e..00000000 --- a/charts/core/templates/controller-model/service.yaml +++ /dev/null @@ -1,21 +0,0 @@ -{{- if .Values.tags.model -}} -apiVersion: v1 -kind: Service -metadata: - name: {{ template "core.controllerModel" . }} - labels: - {{- include "core.labels" . | nindent 4 }} - app.kubernetes.io/component: controller-model - {{- with .Values.controllerModel.serviceAnnotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - ports: - - name: {{ ternary "https" "http" .Values.internalTLS.enabled }}-private - port: {{ template "core.controllerModel.privatePort" . }} - targetPort: {{ template "core.controllerModel.privatePort" . }} - selector: - {{- include "core.matchLabels" . | nindent 4 }} - app.kubernetes.io/component: controller-model -{{- end }} diff --git a/charts/core/templates/model-backend/configmap.yaml b/charts/core/templates/model-backend/configmap.yaml index a137e72e..7cc7cdb9 100644 --- a/charts/core/templates/model-backend/configmap.yaml +++ b/charts/core/templates/model-backend/configmap.yaml @@ -27,9 +27,6 @@ data: cert: /etc/instill-ai/model/ssl/model/tls.crt key: /etc/instill-ai/model/ssl/model/tls.key {{- end }} - github: - patenabled: {{ .Values.modelBackend.github.patenabled }} - pat: {{ .Values.modelBackend.github.pat }} log: external: {{ .Values.tags.observability }} otelcollector: @@ -44,17 +41,9 @@ data: cert: /etc/instill-ai/model/ssl/mgmt/tls.crt key: /etc/instill-ai/model/ssl/mgmt/tls.key {{- end }} - controller: - host: {{ template "core.controllerModel" . }} - privateport: {{ template "core.controllerModel.privatePort" . }} - {{- if .Values.internalTLS.enabled }} - https: - cert: /etc/instill-ai/model/ssl/controller/tls.crt - key: /etc/instill-ai/model/ssl/controller/tls.key - {{- end }} rayserver: grpcuri: {{ include "core.ray" . }}:{{ include "core.ray.serveGrpcPort" . }} - modelstore: /model-repository + modelstore: /model-backend vram: {{ .Values.rayService.vram }} database: username: {{ default (include "core.database.username" .) .Values.database.external.username }} @@ -80,8 +69,6 @@ data: redis: redisoptions: addr: {{ default (include "core.redis.addr" .) .Values.redis.external.addr }} - model: - {{- toYaml .Values.modelBackend.cache | nindent 8 }} maxbatchsizelimitation: unspecified: 2 classification: 16 diff --git a/charts/core/templates/model-backend/deployment.yaml b/charts/core/templates/model-backend/deployment.yaml index 18766b69..d9aaf315 100644 --- a/charts/core/templates/model-backend/deployment.yaml +++ b/charts/core/templates/model-backend/deployment.yaml @@ -1,6 +1,4 @@ {{- if .Values.tags.model -}} -{{- $modelRepository := .Values.persistence.persistentVolumeClaim.modelRepository -}} -{{- $rayConda := .Values.persistence.persistentVolumeClaim.rayConda -}} apiVersion: apps/v1 kind: Deployment metadata: @@ -127,15 +125,6 @@ spec: value: "{{ template "core.ray" . }}" - name: RAY_SERVER_SERVE_PORT value: "{{ template "core.ray.servePort" . }}" - - name: chmod-model-repostiroy - securityContext: - runAsUser: 0 - runAsGroup: 0 - image: busybox - command: ["sh", "-c", "chmod -R 777 /model-repository"] - volumeMounts: - - name: model-repository - mountPath: /model-repository containers: - name: model-backend-worker image: {{ .Values.modelBackend.image.repository }}:{{ .Values.modelBackend.image.tag }} @@ -152,10 +141,6 @@ spec: - name: config mountPath: {{ .Values.modelBackend.configPath }} subPath: config.yaml - - name: model-repository - mountPath: /model-repository - - name: ray-conda - mountPath: /ray-conda {{- with .Values.modelBackend.extraVolumeMounts }} {{- toYaml . | nindent 12 }} {{- end }} @@ -187,10 +172,6 @@ spec: - name: config mountPath: {{ .Values.modelBackend.configPath }} subPath: config.yaml - - name: model-repository - mountPath: /model-repository - - name: ray-conda - mountPath: /ray-conda {{- if .Values.internalTLS.enabled }} - name: model-internal-certs mountPath: "/etc/instill-ai/model/ssl/model" @@ -209,26 +190,6 @@ spec: - name: config configMap: name: {{ template "core.modelBackend" . }} - - name: model-repository - {{- if not .Values.persistence.enabled }} - emptyDir: {} - {{- else if $modelRepository.existingClaim }} - persistentVolumeClaim: - claimName: {{ $modelRepository.existingClaim }} - {{- else }} - persistentVolumeClaim: - claimName: core-model-repository-data-volume - {{- end }} - - name: ray-conda - {{- if not .Values.persistence.enabled }} - emptyDir: {} - {{- else if $rayConda.existingClaim }} - persistentVolumeClaim: - claimName: {{ $rayConda.existingClaim }} - {{- else }} - persistentVolumeClaim: - claimName: {{ template "core.rayCondaDataVolume" . }} - {{- end }} {{- if .Values.internalTLS.enabled }} - name: model-internal-certs secret: diff --git a/charts/core/templates/model-backend/post-install-job.yaml b/charts/core/templates/model-backend/post-install-job.yaml index 5d99e41c..1e9ae266 100644 --- a/charts/core/templates/model-backend/post-install-job.yaml +++ b/charts/core/templates/model-backend/post-install-job.yaml @@ -1,5 +1,4 @@ {{- if .Values.tags.model -}} -{{- $modelRepository := .Values.persistence.persistentVolumeClaim.modelRepository -}} {{- if .Values.modelBackend.initModel.enabled -}} apiVersion: batch/v1 kind: Job @@ -58,8 +57,6 @@ spec: - name: config mountPath: {{ .Values.modelBackend.configPath }} subPath: config.yaml - - name: model-repository - mountPath: /model-repository env: - name: MODEL_BACKEND_HOST value: "{{ template "core.modelBackend" . }}" @@ -67,16 +64,6 @@ spec: - name: config configMap: name: {{ template "core.modelBackend" . }} - - name: model-repository - {{- if not .Values.persistence.enabled }} - emptyDir: {} - {{- else if $modelRepository.existingClaim }} - persistentVolumeClaim: - claimName: {{ $modelRepository.existingClaim }} - {{- else }} - persistentVolumeClaim: - claimName: {{ template "core.modelRepositoryDataVolume" . }} - {{- end }} {{- with .Values.modelBackend.nodeSelector }} nodeSelector: {{- toYaml . | nindent 8 }} diff --git a/charts/core/templates/pvc.yaml b/charts/core/templates/pvc.yaml index 59404c06..242cbfa7 100644 --- a/charts/core/templates/pvc.yaml +++ b/charts/core/templates/pvc.yaml @@ -1,64 +1,4 @@ {{- if .Values.persistence.enabled }} -{{- if .Values.tags.model -}} -{{- $modelRepository := .Values.persistence.persistentVolumeClaim.modelRepository -}} -{{- if not $modelRepository.existingClaim }} -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: {{ template "core.modelRepositoryDataVolume" . }} - annotations: - {{- range $key, $value := $modelRepository.annotations }} - {{ $key }}: {{ $value | quote }} - {{- end }} - {{- if eq .Values.persistence.resourcePolicy "keep" }} - helm.sh/resource-policy: keep - {{- end }} - labels: - {{- include "core.labels" . | nindent 4 }} - app.kubernetes.io/component: model-backend -spec: - accessModes: - - {{ $modelRepository.accessMode }} - resources: - requests: - storage: {{ $modelRepository.size }} - {{- if $modelRepository.storageClass }} - {{- if eq "-" $modelRepository.storageClass }} - storageClassName: "" - {{- else }} - storageClassName: {{ $modelRepository.storageClass }} - {{- end }} - {{- end }} -{{- end }} -{{- $rayConda := .Values.persistence.persistentVolumeClaim.rayConda -}} -{{- if not $rayConda.existingClaim }} ---- -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: {{ template "core.rayCondaDataVolume" . }} - annotations: - {{- range $key, $value := $rayConda.annotations }} - {{ $key }}: {{ $value | quote }} - {{- end }} - labels: - {{- include "core.labels" . | nindent 4 }} - app.kubernetes.io/component: model-backend -spec: - accessModes: - - {{ $rayConda.accessMode }} - resources: - requests: - storage: {{ $rayConda.size }} - {{- if $rayConda.storageClass }} - {{- if eq "-" $rayConda.storageClass }} - storageClassName: "" - {{- else }} - storageClassName: {{ $rayConda.storageClass }} - {{- end }} - {{- end }} -{{- end }} -{{- end }} {{- if eq .Values.registry.config.storage.type "filesystem" }} {{- $registry := .Values.persistence.persistentVolumeClaim.registry -}} {{- if not $registry.existingClaim }} diff --git a/charts/core/templates/ray-service/ray-service.yaml b/charts/core/templates/ray-service/ray-service.yaml index ba627078..5846acd6 100644 --- a/charts/core/templates/ray-service/ray-service.yaml +++ b/charts/core/templates/ray-service/ray-service.yaml @@ -1,6 +1,4 @@ {{- if .Values.tags.model -}} -{{- $modelRepository := .Values.persistence.persistentVolumeClaim.modelRepository -}} -{{- $rayConda := .Values.persistence.persistentVolumeClaim.rayConda -}} apiVersion: ray.io/v1 kind: RayCluster metadata: @@ -15,7 +13,7 @@ spec: upscalingMode: Default # idleTimeoutSeconds is the number of seconds to wait before scaling down a worker pod which is not using Ray resources. idleTimeoutSeconds: 60 - imagePullPolicy: Always + imagePullPolicy: {{ $.Values.rayService.image.pullPolicy }} securityContext: {} env: [] envFrom: [] @@ -39,23 +37,6 @@ spec: {{- toYaml . | nindent 10 }} {{- end }} volumes: - - name: ray-conda - {{- if not $.Values.persistence.enabled }} - emptyDir: {} - {{- else if $rayConda.existingClaim }} - persistentVolumeClaim: - claimName: {{ $rayConda.existingClaim }} - {{- else }} - persistentVolumeClaim: - claimName: {{ template "core.rayCondaDataVolume" . }} - {{- end }} - - name: cp-conda-env-configmap - configMap: - name: cp-conda-env - defaultMode: 0777 - items: - - key: cp_conda_env.sh - path: cp_conda_env.sh - name: podman-configmap configMap: name: podman @@ -81,7 +62,7 @@ spec: # for mounting /dev/fuse # TODO: maybe implement a fuse-device-plugin-daemonset privileged: true - imagePullPolicy: Always + imagePullPolicy: {{ $.Values.rayService.image.pullPolicy }} {{- if .Values.rayService.headGroupSpec.resources }} resources: {{- toYaml .Values.rayService.headGroupSpec.resources | nindent 14 }} @@ -96,10 +77,6 @@ spec: - name: RAY_worker_register_timeout_seconds value: "360" volumeMounts: - - mountPath: /ray-conda-pack - name: ray-conda - - mountPath: /home/ray/script - name: cp-conda-env-configmap - mountPath: /etc/containers/ name: podman-configmap ports: @@ -124,10 +101,9 @@ spec: - "/bin/bash" - "-c" - > - if [[ -n $${NVIDIA_VISIBLE_DEVICES} ]]; then + if [[ -n ${NVIDIA_VISIBLE_DEVICES} ]]; then sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml; fi; - /home/ray/script/cp_conda_env.sh preStop: exec: command: ["/bin/sh","-c","ray stop"] @@ -154,23 +130,6 @@ spec: {{- toYaml . | nindent 12 }} {{- end }} volumes: - - name: model-repository - {{- if not $.Values.persistence.enabled }} - emptyDir: {} - {{- else if $modelRepository.existingClaim }} - persistentVolumeClaim: - claimName: {{ $modelRepository.existingClaim }} - {{- else }} - persistentVolumeClaim: - claimName: core-model-repository-data-volume - {{- end }} - - name: start-ray-serve-configmap - configMap: - name: start-ray-serve - defaultMode: 0777 - items: - - key: start_ray_serve.sh - path: start_ray_serve.sh - name: podman-configmap configMap: name: podman @@ -186,7 +145,7 @@ spec: securityContext: # for newuidmap privileged: true - imagePullPolicy: Always + imagePullPolicy: {{ $.Values.rayService.image.pullPolicy }} env: - name: RAY_worker_register_timeout_seconds value: "360" @@ -197,10 +156,17 @@ spec: - "/bin/bash" - "-c" - > - if [[ -n $${NVIDIA_VISIBLE_DEVICES} ]]; then + if [[ -n ${NVIDIA_VISIBLE_DEVICES} ]]; then sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml; fi; - /home/ray/script/start_ray_serve.sh + while true; do + ray health-check 2>/dev/null; + if [ "$?" = "0" ]; then + break; + fi; + sleep 1; + done; + serve start --http-host=0.0.0.0 --grpc-port 9000 --grpc-servicer-functions ray_pb2_grpc.add_RayServiceServicer_to_server preStop: exec: command: ["/bin/sh","-c","ray stop"] @@ -217,65 +183,12 @@ spec: {{- toYaml $workerGroupSpecs.resources | nindent 16 }} {{- end }} volumeMounts: - - mountPath: /home/ray/script - name: start-ray-serve-configmap - - mountPath: /model-repository - name: model-repository - mountPath: /etc/containers/ name: podman-configmap {{- end }} --- apiVersion: v1 kind: ConfigMap -metadata: - name: cp-conda-env -data: - cp_conda_env.sh: | - #!/bin/bash - - # wait for ray cluster to finish initialization - while true; do - ray health-check 2>/dev/null - if [ "$?" = "0" ]; then - break - else - echo "INFO: waiting for ray head to start" - sleep 1 - fi - done - - echo "INFO: copying Conda env to the shared folder /ray-conda-pack" - - sudo chown -R 1000:100 /ray-conda-pack - cp -r /home/ray/anaconda3/* /ray-conda-pack - - echo "INFO: Conda env copying done" ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: start-ray-serve -data: - start_ray_serve.sh: | - #!/bin/bash - - # wait for ray cluster to finish initialization - while true; do - ray health-check 2>/dev/null - if [ "$?" = "0" ]; then - break - else - echo "INFO: waiting for ray head to start" - sleep 1 - fi - done - - serve start --http-host=0.0.0.0 --grpc-port 9000 --grpc-servicer-functions ray_pb2_grpc.add_RayServiceServicer_to_server - - echo "INFO: Start ray serve" ---- -apiVersion: v1 -kind: ConfigMap metadata: name: podman data: diff --git a/charts/core/templates/registry/deployment.yaml b/charts/core/templates/registry/deployment.yaml index 1dd5ad9c..63f1e625 100644 --- a/charts/core/templates/registry/deployment.yaml +++ b/charts/core/templates/registry/deployment.yaml @@ -59,7 +59,7 @@ spec: - 'ping' env: - name: REDIS_HOST - value: "{{ .Values.registry.config.redis.addr }}" + value: "{{ (split ":" .Values.registry.config.redis.addr)._0 }}" containers: - name: registry image: {{ .Values.registry.image.repository }}:{{ .Values.registry.image.tag }} diff --git a/charts/core/values.yaml b/charts/core/values.yaml index a2c5da95..7901cf11 100644 --- a/charts/core/values.yaml +++ b/charts/core/values.yaml @@ -179,14 +179,6 @@ internalTLS: crt: "" # Content of model-backend's TLS key file, only available when `certSource` is "manual" key: "" - # controller-model related cert configuration - controllerModel: - # secret name for controller-model's tls certs, only available when `certSource` is "secret" - secretName: "" - # Content of controller-model's TLS key file, only available when `certSource` is "manual" - crt: "" - # Content of controller-model's TLS key file, only available when `certSource` is "manual" - key: "" # console related cert configuration console: # secret name for console's tls certs, only available when `certSource` is "secret" @@ -215,20 +207,6 @@ persistence: # and redis components, i.e. they are never deleted automatically) resourcePolicy: "keep" persistentVolumeClaim: - modelRepository: - existingClaim: "" - storageClass: "" - subPath: "" - accessMode: ReadWriteOnce - size: 500Gi - annotations: {} - rayConda: - existingClaim: "" - storageClass: "" - subPath: "" - accessMode: ReadWriteOnce - size: 20Gi - annotations: {} # If external database is used, the following settings for database will be ignored database: existingClaim: "" @@ -520,69 +498,6 @@ modelBackend: ownerid: admin enabled: false path: https://raw.githubusercontent.com/instill-ai/model/main/model-hub/model_hub_cpu.json - cache: - enabled: false - cache_dir: /model-repository/.cache/models - retentionperiod: 24h - github: - patenabled: false - pat: - # -- Add extra env variables - extraEnv: [] - # -- Mount external volumes - # For example, mount a secret containing Certificate root CA to verify database - # TLS connection. - extraVolumes: [] - # - name: my-volume - # secret: - # secretName: my-secret - extraVolumeMounts: [] - # - name: my-volume - # mountPath: /etc/secrets/my-secret - # readOnly: true - # -- Add extra init containers - extraInitContainers: [] - # extraInitContainers: - # - name: ... - # image: ... - # -- Add extra sidecar containers - sidecarContainers: {} - # -- Additional deployment annotations - podAnnotations: {} - # -- Additional service annotations - serviceAnnotations: {} - resources: {} - autoscaling: - enabled: false - minReplicas: - maxReplicas: - targetCPUUtilizationPercentage: - targetAverageMemoryUtilization: - nodeSelector: {} - tolerations: [] - affinity: {} - podDisruptionBudget: - enabled: false - spec: - minAvailable: -# -- The configuration of controller-model -controllerModel: - # -- The image of controller - image: - repository: instill/controller-model - tag: 0.4.0-alpha - pullPolicy: IfNotPresent - # -- The command names to be executed - commandName: - main: controller-model - # -- The path of configuration file for mgmt-backend - configPath: /controller-model/config/config.yaml - # -- Set the service account to be used, default if left empty - serviceAccountName: "" - # -- Mount the service account token - automountServiceAccountToken: false - # -- The number of replica for controller - replicaCount: 1 # -- Add extra env variables extraEnv: [] # -- Mount external volumes @@ -608,7 +523,6 @@ controllerModel: # -- Additional service annotations serviceAnnotations: {} resources: {} - loopinterval: 3 autoscaling: enabled: false minReplicas: @@ -622,7 +536,6 @@ controllerModel: enabled: false spec: minAvailable: - maxUnavailable: # -- The configuration of artifact-backend artifactBackend: # -- The image of artifact-backend @@ -770,6 +683,7 @@ rayService: repository: instill/ray version: "2.9.3" tag: 0.3.0-alpha + pullPolicy: IfNotPresent headGroupSpec: resources: limits: @@ -1157,15 +1071,6 @@ database: port: username: password: -# -- The configuration of etcd -etcd: - persistence: - enabled: false - auth: - rbac: - create: false - autoCompactionMode: revision - autoCompactionRetention: 1 # -- The configuration of Redis redis: # -- If external Redis is used, set "enabled" to false diff --git a/docker-compose-build.yml b/docker-compose-build.yml index 697506e1..75af14f4 100644 --- a/docker-compose-build.yml +++ b/docker-compose-build.yml @@ -8,7 +8,6 @@ services: - exclude-console - exclude-pipeline - exclude-model - - exclude-controller-model - exclude-artifact image: ${API_GATEWAY_IMAGE}:${API_GATEWAY_VERSION} build: @@ -26,7 +25,6 @@ services: - exclude-console - exclude-pipeline - exclude-model - - exclude-controller-model - exclude-artifact image: ${MGMT_BACKEND_IMAGE}:${MGMT_BACKEND_VERSION} build: @@ -43,7 +41,6 @@ services: - exclude-mgmt - exclude-console - exclude-model - - exclude-controller-model - exclude-artifact image: ${PIPELINE_BACKEND_IMAGE}:${PIPELINE_BACKEND_VERSION} build: @@ -60,7 +57,6 @@ services: - exclude-mgmt - exclude-console - exclude-pipeline - - exclude-controller-model - exclude-artifact image: ${MODEL_BACKEND_IMAGE}:${MODEL_BACKEND_VERSION} build: @@ -72,23 +68,6 @@ services: UBUNTU_VERSION: ${UBUNTU_VERSION} ARTIVC_VERSION: ${ARTIVC_VERSION} - controller_model: - profiles: - - all - - exclude-api-gateway - - exclude-mgmt - - exclude-console - - exclude-pipeline - - exclude-model - - exclude-artifact - image: ${CONTROLLER_MODEL_IMAGE}:${CONTROLLER_MODEL_VERSION} - build: - context: ./${CONTROLLER_MODEL_HOST} - args: - SERVICE_NAME: ${CONTROLLER_MODEL_HOST} - GOLANG_VERSION: ${GOLANG_VERSION} - K6_VERSION: ${K6_VERSION} - console: profiles: - all @@ -96,7 +75,6 @@ services: - exclude-mgmt - exclude-pipeline - exclude-model - - exclude-controller-model - exclude-artifact image: ${CONSOLE_IMAGE}:${CONSOLE_VERSION} build: @@ -109,7 +87,6 @@ services: - exclude-mgmt - exclude-pipeline - exclude-model - - exclude-controller-model - exclude-artifact image: ${CONSOLE_IMAGE}-playwright:${CONSOLE_VERSION} build: @@ -125,7 +102,6 @@ services: - exclude-console - exclude-pipeline - exclude-model - - exclude-controller-model image: ${ARTIFACT_BACKEND_IMAGE}:${ARTIFACT_BACKEND_VERSION} build: context: ./${ARTIFACT_BACKEND_HOST} diff --git a/docker-compose-latest.yml b/docker-compose-latest.yml index 96d059ad..d1fcd979 100644 --- a/docker-compose-latest.yml +++ b/docker-compose-latest.yml @@ -8,7 +8,6 @@ services: - exclude-console - exclude-pipeline - exclude-model - - exclude-controller-model - exclude-artifact image: ${API_GATEWAY_IMAGE}:latest environment: @@ -21,7 +20,6 @@ services: - exclude-console - exclude-pipeline - exclude-model - - exclude-controller-model - exclude-artifact image: ${MGMT_BACKEND_IMAGE}:latest environment: @@ -38,7 +36,6 @@ services: - exclude-console - exclude-pipeline - exclude-model - - exclude-controller-model - exclude-artifact image: ${MGMT_BACKEND_IMAGE}:latest environment: @@ -52,7 +49,6 @@ services: - exclude-mgmt - exclude-console - exclude-model - - exclude-controller-model - exclude-artifact image: ${PIPELINE_BACKEND_IMAGE}:latest environment: @@ -69,7 +65,6 @@ services: - exclude-mgmt - exclude-console - exclude-model - - exclude-controller-model - exclude-artifact image: ${PIPELINE_BACKEND_IMAGE}:latest environment: @@ -83,7 +78,6 @@ services: - exclude-mgmt - exclude-console - exclude-pipeline - - exclude-controller-model - exclude-artifact image: ${MODEL_BACKEND_IMAGE}:latest environment: @@ -96,7 +90,6 @@ services: - exclude-mgmt - exclude-console - exclude-pipeline - - exclude-controller-model - exclude-artifact image: ${MODEL_BACKEND_IMAGE}:latest environment: @@ -113,7 +106,6 @@ services: - exclude-mgmt - exclude-console - exclude-pipeline - - exclude-controller-model - exclude-artifact image: ${MODEL_BACKEND_IMAGE}:latest environment: @@ -128,7 +120,6 @@ services: - exclude-console - exclude-pipeline - exclude-model - - exclude-controller-model image: ${ARTIFACT_BACKEND_IMAGE}:latest environment: CFG_SERVER_DEBUG: "true" @@ -137,22 +128,6 @@ services: - ${ARTIFACT_BACKEND_PRIVATEPORT}:${ARTIFACT_BACKEND_PRIVATEPORT} - ${ARTIFACT_BACKEND_PUBLICPORT}:${ARTIFACT_BACKEND_PUBLICPORT} - controller_model: - profiles: - - all - - exclude-api-gateway - - exclude-mgmt - - exclude-console - - exclude-pipeline - - exclude-model - - exclude-artifact - image: ${CONTROLLER_MODEL_IMAGE}:latest - environment: - CFG_SERVER_DEBUG: "true" - CFG_SERVER_EDITION: ${EDITION} - ports: - - ${CONTROLLER_MODEL_PRIVATEPORT}:${CONTROLLER_MODEL_PRIVATEPORT} - console: profiles: - all @@ -160,7 +135,6 @@ services: - exclude-mgmt - exclude-pipeline - exclude-model - - exclude-controller-model - exclude-artifact image: ${CONSOLE_IMAGE}:latest environment: @@ -191,10 +165,6 @@ services: ports: - ${REDIS_PORT}:6379 - etcd: - ports: - - ${ETCD_CLIENT_PORT}:${ETCD_CLIENT_PORT} - registry: ports: - ${REGISTRY_EXTERNAL_PORT}:5000 diff --git a/docker-compose.yml b/docker-compose.yml index 542aff77..093df427 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,12 +9,6 @@ volumes: name: vdp airbyte: name: airbyte - model_repository: - name: model-repository - model_cache: - name: model-cache - ray_conda: - name: ray-conda elasticsearch_data: name: elasticsearch-data @@ -250,7 +244,7 @@ services: CFG_SERVER_USAGE_ENABLED: ${USAGE_ENABLED} CFG_SERVER_EDITION: ${EDITION} CFG_RAYSERVER_GRPCURI: ${RAY_SERVER_HOST}:${RAY_SERVER_SERVE_GRPC_PORT} - CFG_RAYSERVER_MODELSTORE: /model-repository + CFG_RAYSERVER_MODELSTORE: /model-backend CFG_RAYSERVER_VRAM: ${RAY_SERVER_VRAM} CFG_DATABASE_HOST: ${POSTGRESQL_HOST} CFG_DATABASE_PORT: ${POSTGRESQL_PORT} @@ -262,10 +256,6 @@ services: CFG_CACHE_REDIS_REDISOPTIONS_ADDR: ${REDIS_HOST}:${REDIS_PORT} CFG_LOG_EXTERNAL: ${OBSERVE_ENABLED} CFG_LOG_OTELCOLLECTOR_PORT: ${OTEL_COLLECTOR_PORT} - volumes: - - model_repository:/model-repository - - model_cache:/.cache - - ray_conda:/ray-conda command: - /bin/sh - -c @@ -314,10 +304,6 @@ services: CFG_CACHE_REDIS_REDISOPTIONS_ADDR: ${REDIS_HOST}:${REDIS_PORT} CFG_LOG_EXTERNAL: ${OBSERVE_ENABLED} CFG_LOG_OTELCOLLECTOR_PORT: ${OTEL_COLLECTOR_PORT} - volumes: - - model_repository:/model-repository - - model_cache:/.cache - - ray_conda:/ray-conda entrypoint: ./model-backend-worker depends_on: temporal: @@ -336,25 +322,6 @@ services: model_backend: condition: service_healthy - controller_model: - container_name: ${CONTROLLER_MODEL_HOST} - image: ${CONTROLLER_MODEL_IMAGE}:${CONTROLLER_MODEL_VERSION} - restart: unless-stopped - environment: - CFG_SERVER_DEBUG: "false" - CFG_SERVER_EDITION: ${EDITION} - CFG_DATABASE_HOST: ${POSTGRESQL_HOST} - CFG_DATABASE_PORT: ${POSTGRESQL_PORT} - CFG_DATABASE_USERNAME: postgres - CFG_DATABASE_PASSWORD: password - CFG_ETCD_HOST: ${ETCD_HOST} - CFG_ETCD_PORT: ${ETCD_CLIENT_PORT} - CFG_LOG_EXTERNAL: ${OBSERVE_ENABLED} - CFG_LOG_OTELCOLLECTOR_PORT: ${OTEL_COLLECTOR_PORT} - entrypoint: ./controller-model - volumes: - - model_repository:/model-repository - artifact_backend: container_name: ${ARTIFACT_BACKEND_HOST} image: ${ARTIFACT_BACKEND_IMAGE}:${ARTIFACT_BACKEND_VERSION} @@ -478,8 +445,6 @@ services: serve start --http-host=0.0.0.0 --grpc-port ${RAY_SERVER_SERVE_GRPC_PORT} --grpc-servicer-functions ray_pb2_grpc.add_RayServiceServicer_to_server && tail -f /dev/null' volumes: - - model_repository:/model-repository - - ray_conda:/home/ray/anaconda3/ - /var/lib/containers:/var/lib/containers - ${CONFIG_DIR_PATH}/registry/registries.conf:/etc/containers/registries.conf healthcheck: @@ -582,23 +547,6 @@ services: ports: - ${REDOC_OPENAPI_PORT}:80 - etcd: - container_name: ${ETCD_HOST} - image: ${ETCD_IMAGE}:v${ETCD_VERSION} - restart: unless-stopped - environment: - ETCD_NAME: ${ETCD_HOST} - ETCD_ADVERTISE_CLIENT_URLS: http://${ETCD_HOST}:${ETCD_CLIENT_PORT} - ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:${ETCD_CLIENT_PORT} - ETCD_INITIAL_ADVERTISE_PEER_URLS: http://${ETCD_HOST}:${ETCD_PEER_PORT} - ETCD_LISTEN_PEER_URLS: http://0.0.0.0:${ETCD_PEER_PORT} - ETCD_INITIAL_CLUSTER_TOKEN: ${ETCD_CLUSTER_TOKEN} - ETCD_INITIAL_CLUSTER_STATE: ${ETCD_CLUSTER_STATE} - ETCD_INITIAL_CLUSTER: ${ETCD_HOST}=http://${ETCD_HOST}:${ETCD_PEER_PORT} - ETCDCTL_API: ${ETCDCTL_API} - ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE} - ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION} - openfga_migrate: image: ${OPENFGA_IMAGE}:${OPENFGA_VERSION} container_name: ${OPENFGA_HOST}_migrate