From 4ec88a928cc73098da55a1a184c3c5b24adf310f Mon Sep 17 00:00:00 2001 From: Danny Chiao Date: Thu, 18 Aug 2022 17:01:18 -0400 Subject: [PATCH 1/9] fix: Fix Java helm charts to work with refactored logic. Also include gcp/aws in FTS image Signed-off-by: Danny Chiao --- Makefile | 9 ++ examples/java-demo/README.md | 17 ++- .../feature_repo/application-override.yaml | 13 +- .../java-demo/feature_repo/feature_store.yaml | 4 +- infra/charts/feast-feature-server/README.md | 87 ++++---------- infra/charts/feast-python-server/README.md | 26 +--- infra/charts/feast/README.md | 8 +- .../feast/charts/feature-server/README.md | 111 +++++++++--------- .../feature-server/templates/configmap.yaml | 3 - .../feature-server/templates/deployment.yaml | 2 - .../feature-server/templates/service.yaml | 6 - .../feast/charts/feature-server/values.yaml | 7 -- .../charts/transformation-service/README.md | 29 ++--- .../docker/feature-server/Dockerfile.dev | 2 +- java/serving/README.md | 6 +- .../src/main/resources/application.yml | 7 -- .../infra/transformation_servers/Dockerfile | 2 +- 17 files changed, 139 insertions(+), 200 deletions(-) diff --git a/Makefile b/Makefile index c9c78a775f..a2d8bca5e4 100644 --- a/Makefile +++ b/Makefile @@ -363,6 +363,15 @@ build-feature-server-java-docker: -t $(REGISTRY)/feature-server-java:$(VERSION) \ -f java/infra/docker/feature-server/Dockerfile --load . +build-java-docker-dev: + make build-java-no-tests REVISION=dev + docker buildx build --build-arg VERSION=dev \ + -t feastdev/feature-transformation-server:dev \ + -f sdk/python/feast/infra/transformation_servers/Dockerfile --load . + docker buildx build --build-arg VERSION=dev \ + -t feastdev/feature-server-java:dev \ + -f java/infra/docker/feature-server/Dockerfile.dev --load . + # Documentation install-dependencies-proto-docs: diff --git a/examples/java-demo/README.md b/examples/java-demo/README.md index 2b1d7f75a5..693303cc93 100644 --- a/examples/java-demo/README.md +++ b/examples/java-demo/README.md @@ -52,12 +52,12 @@ For this tutorial, we setup Feast with Redis, using the Feast CLI to register an ```bash minikube addons enable gcp-auth ``` -3. Add Feast's Java feature server chart repo +2. Add Feast's Java feature server chart repo ```bash helm repo add feast-charts https://feast-helm-charts.storage.googleapis.com helm repo update ``` -4. Modify the application-override.yaml file to have your credentials + bucket location: +3. Modify the application-override.yaml file to have your credentials + bucket location: ```yaml feature-server: application-override.yaml: @@ -77,16 +77,21 @@ For this tutorial, we setup Feast with Redis, using the Feast CLI to register an cache_ttl_seconds: 60 project: feast_java_demo ``` -5. Install the Feast helm chart: `helm install feast-release feast-charts/feast --values application-override.yaml` -6. (Optional): check logs of the server to make sure it’s working +4. Install the Feast helm chart: `helm install feast-release feast-charts/feast --values application-override.yaml` + > **Dev instructions**: if you're changing the java logic or chart, you can do + >1. `eval $(minikube docker-env)` + >2. `make build-java-docker-dev` + >3. In the `application-override.yaml`, uncomment the two `image: tag: dev` blocks + >3. `helm install feast-release ../../../infra/charts/feast --values application-override.yaml` +5. (Optional): check logs of the server to make sure it’s working ```bash kubectl logs svc/feast-release-feature-server ``` -7. Port forward to expose the grpc endpoint: +6. Port forward to expose the grpc endpoint: ```bash kubectl port-forward svc/feast-release-feature-server 6566:6566 ``` -8. Make a gRPC call: +7. Make a gRPC call: - Python example ```bash python test.py diff --git a/examples/java-demo/feature_repo/application-override.yaml b/examples/java-demo/feature_repo/application-override.yaml index 5a43d886dc..3cbe8eef0a 100644 --- a/examples/java-demo/feature_repo/application-override.yaml +++ b/examples/java-demo/feature_repo/application-override.yaml @@ -9,10 +9,19 @@ feature-server: config: host: my-redis-master port: 6379 - password: [YOUR PASSWORD] + password: YTVWvjrQcK entityKeySerializationVersion: 2 + # Uncomment below for dev + image: + tag: dev + +# Uncomment below for dev +transformation-service: + image: + tag: dev + global: registry: - path: gs://[YOUR BUCKET]/demo-repo/registry.db + path: gs://danny-test-feast-bucket/demo-repo/registry.db cache_ttl_seconds: 60 project: feast_java_demo diff --git a/examples/java-demo/feature_repo/feature_store.yaml b/examples/java-demo/feature_repo/feature_store.yaml index cfb0a89e8d..2b927f65bb 100644 --- a/examples/java-demo/feature_repo/feature_store.yaml +++ b/examples/java-demo/feature_repo/feature_store.yaml @@ -1,9 +1,9 @@ -registry: gs://[YOUR BUCKET]/demo-repo/registry.db +registry: gs://danny-test-feast-bucket/demo-repo/registry.db project: feast_java_demo provider: gcp online_store: type: redis - connection_string: localhost:6379,password=[YOUR PASSWORD] + connection_string: localhost:6379,password=YTVWvjrQcK offline_store: type: file entity_key_serialization_version: 2 \ No newline at end of file diff --git a/infra/charts/feast-feature-server/README.md b/infra/charts/feast-feature-server/README.md index 6a811a9c11..322e2fa3ba 100644 --- a/infra/charts/feast-feature-server/README.md +++ b/infra/charts/feast-feature-server/README.md @@ -12,71 +12,28 @@ Feast Feature Server in Go or Python ## Values -| Key | Type | Default | Description | -| ---------------------------------- | ------ | ---------------- | ----------- | -| affinity | object | `{}` | | -| fullnameOverride | string | `""` | | -| image.pullPolicy | string | `"IfNotPresent"` | | -| image.repository | string | `""` | | -| image.tag | string | `""` | | -| imagePullSecrets | list | `[]` | | -| livenessProbe.initialDelaySeconds | int | `30` | | -| livenessProbe.periodSeconds | int | `30` | | -| nameOverride | string | `""` | | -| nodeSelector | object | `{}` | | -| podAnnotations | object | `{}` | | -| podSecurityContext | object | `{}` | | -| readinessProbe.initialDelaySeconds | int | `20` | | -| readinessProbe.periodSeconds | int | `10` | | -| replicaCount | int | `1` | | -| resources | object | `{}` | | -| securityContext | object | `{}` | | -| service.port | int | `80` | | -| service.type | string | `"ClusterIP"` | | -| tolerations | list | `[]` | | +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | | +| fullnameOverride | string | `""` | | +| image.pullPolicy | string | `"IfNotPresent"` | | +| image.repository | string | `""` | | +| image.tag | string | `""` | | +| imagePullSecrets | list | `[]` | | +| livenessProbe.initialDelaySeconds | int | `30` | | +| livenessProbe.periodSeconds | int | `30` | | +| nameOverride | string | `""` | | +| nodeSelector | object | `{}` | | +| podAnnotations | object | `{}` | | +| podSecurityContext | object | `{}` | | +| readinessProbe.initialDelaySeconds | int | `20` | | +| readinessProbe.periodSeconds | int | `10` | | +| replicaCount | int | `1` | | +| resources | object | `{}` | | +| securityContext | object | `{}` | | +| service.port | int | `80` | | +| service.type | string | `"ClusterIP"` | | +| tolerations | list | `[]` | | ---------------------------------------------- Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) - - -Docker repository and tag are required. Helm install example: -``` -helm install feast-feature-server . --set image.repository=REPO --set image.tag=TAG -``` - -Deployment assumes that `feature_store.yaml` exists on docker image. Example docker image: -``` -FROM python:3.8 - -RUN apt update && \ - apt install -y jq - -RUN pip install pip --upgrade - -RUN pip install feast - -COPY feature_store.yaml /feature_store.yaml -``` - -Furthermore, if you wish to use the Go feature server, then you must install the Apache Arrow C++ libraries, and your `feature_store.yaml` should include `go_feature_server: True`. -For more details, see the [docs](https://docs.feast.dev/reference/feature-servers/go-feature-server). -The docker image might look like: -``` -FROM python:3.8 - -RUN apt update && \ - apt install -y jq - -RUN pip install pip --upgrade - -RUN pip install feast - -RUN apt update -RUN apt install -y -V ca-certificates lsb-release wget -RUN wget https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb -RUN apt install -y -V ./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb -RUN apt update -RUN apt -y install libarrow-dev - -COPY feature_store.yaml /feature_store.yaml -``` \ No newline at end of file diff --git a/infra/charts/feast-python-server/README.md b/infra/charts/feast-python-server/README.md index e3da9b1d29..40257ed3c0 100644 --- a/infra/charts/feast-python-server/README.md +++ b/infra/charts/feast-python-server/README.md @@ -17,8 +17,8 @@ Feast Feature Server in Python | affinity | object | `{}` | | | fullnameOverride | string | `""` | | | image.pullPolicy | string | `"IfNotPresent"` | | -| image.repository | string | `""` | [required] The repository for the Docker image | -| image.tag | string | `""` | [required] The Docker image tag | +| image.repository | string | `""` | | +| image.tag | string | `""` | | | imagePullSecrets | list | `[]` | | | livenessProbe.initialDelaySeconds | int | `30` | | | livenessProbe.periodSeconds | int | `30` | | @@ -36,24 +36,4 @@ Feast Feature Server in Python | tolerations | list | `[]` | | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.5.0](https://github.com/norwoodj/helm-docs/releases/v1.5.0) - - -Docker repository and tag are required. Helm install example: -``` -helm install feast-python-server . --set image.repository=REPO --set image.tag=TAG -``` - -Deployment assumes that `feature_store.yaml` exists on docker image. Example docker image: -``` -FROM python:3.8 - -RUN apt update && \ - apt install -y jq - -RUN pip install pip --upgrade - -RUN pip install feast - -COPY feature_store.yaml /feature_store.yaml -``` \ No newline at end of file +Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) diff --git a/infra/charts/feast/README.md b/infra/charts/feast/README.md index f71dcf6124..fcd8607158 100644 --- a/infra/charts/feast/README.md +++ b/infra/charts/feast/README.md @@ -1,5 +1,7 @@ # Feast Helm Charts +> :warning: **Disclaimer**: Since Feast 0.10 our vision is to manage all infrastructure for feature store from one place - Feast SDK. But while this new paradigm is still in development, we are planning to support the installation of some Feast components (like Java feature server) through Helm chart presented in this repository. However, we do not expect helm chart to become a long-term solution for deploying Feast components to production, and some frictions still might exist. For example, you will need to manually sync some configurations from [feature_store.yaml](https://docs.feast.dev/reference/feature-repository/feature-store-yaml) into the chart context (like path to the registry file or project name). + This repo contains Helm charts for Feast components that are being installed on Kubernetes: * Feast (root chart): The complete Helm chart containing all Feast components and dependencies. Most users will use this chart, but can selectively enable/disable subcharts using the values.yaml file. * [Feature Server](charts/feature-server): High performant JVM-based implementation of feature server. @@ -54,9 +56,9 @@ For more details, please see: https://docs.feast.dev/how-to-guides/running-feast | Repository | Name | Version | |------------|------|---------| -| https://charts.helm.sh/stable | redis | 10.5.6 | -| https://feast-helm-charts.storage.googleapis.com | feature-server(feature-server) | 0.23.0 | -| https://feast-helm-charts.storage.googleapis.com | transformation-service(transformation-service) | 0.23.0 | +| https://charts.helm.sh/stable | redis | 10.5.6 | +| https://feast-helm-charts.storage.googleapis.com | feature-server(feature-server) | 0.23.0 | +| https://feast-helm-charts.storage.googleapis.com | transformation-service(transformation-service) | 0.23.0 | ## Values diff --git a/infra/charts/feast/charts/feature-server/README.md b/infra/charts/feast/charts/feature-server/README.md index 4717cfff3a..92ee102a07 100644 --- a/infra/charts/feast/charts/feature-server/README.md +++ b/infra/charts/feast/charts/feature-server/README.md @@ -8,63 +8,60 @@ Feast Feature Server: Online feature serving service for Feast ## Values -| Key | Type | Default | Description | -|-----|------|-------------------------------------------------------|-------------| -| "application-generated.yaml".enabled | bool | `true` | Flag to include Helm generated configuration. Please set `application-override.yaml` to override this configuration. | -| "application-override.yaml" | object | `{"enabled":true}` | Configuration to override the default [application.yaml](https://github.com/feast-dev/feast/blob/master/java/serving/src/main/resources/application.yml). Will be created as a ConfigMap. `application-override.yaml` has a higher precedence than `application-secret.yaml` | -| "application-secret.yaml" | object | `{"enabled":true}` | Configuration to override the default [application.yaml](https://github.com/feast-dev/feast/blob/master/java/serving/src/main/resources/application.yml). Will be created as a Secret. `application-override.yaml` has a higher precedence than `application-secret.yaml`. It is recommended to either set `application-override.yaml` or `application-secret.yaml` only to simplify config management. | -| "application.yaml".enabled | bool | `true` | Flag to include the default [configuration](https://github.com/feast-dev/feast/blob/master/java/serving/src/main/resources/application.yml). Please set `application-override.yaml` to override this configuration. | -| envOverrides | object | `{}` | Extra environment variables to set | -| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | -| image.repository | string | `"feastdev/feature-server-java"` | Docker image for Feature Server repository | -| image.tag | string | `"0.23.0"` | Image tag | -| ingress.grpc.annotations | object | `{}` | Extra annotations for the ingress | -| ingress.grpc.auth.enabled | bool | `false` | Flag to enable auth | -| ingress.grpc.class | string | `"nginx"` | Which ingress controller to use | -| ingress.grpc.enabled | bool | `false` | Flag to create an ingress resource for the service | -| ingress.grpc.hosts | list | `[]` | List of hostnames to match when routing requests | -| ingress.grpc.https.enabled | bool | `true` | Flag to enable HTTPS | -| ingress.grpc.https.secretNames | object | `{}` | Map of hostname to TLS secret name | -| ingress.grpc.whitelist | string | `""` | Allowed client IP source ranges | -| ingress.http.annotations | object | `{}` | Extra annotations for the ingress | +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| "application-generated.yaml".enabled | bool | `true` | Flag to include Helm generated configuration. Please set `application-override.yaml` to override this configuration. | +| "application-override.yaml" | object | `{"enabled":true}` | Configuration to override the default [application.yaml](https://github.com/feast-dev/feast/blob/master/java/serving/src/main/resources/application.yml). Will be created as a ConfigMap. `application-override.yaml` has a higher precedence than `application-secret.yaml` | +| "application-secret.yaml" | object | `{"enabled":false}` | Configuration to override the default [application.yaml](https://github.com/feast-dev/feast/blob/master/java/serving/src/main/resources/application.yml). Will be created as a Secret. `application-override.yaml` has a higher precedence than `application-secret.yaml`. It is recommended to either set `application-override.yaml` or `application-secret.yaml` only to simplify config management. | +| "application.yaml".enabled | bool | `true` | Flag to include the default [configuration](https://github.com/feast-dev/feast/blob/master/java/serving/src/main/resources/application.yml). Please set `application-override.yaml` to override this configuration. | +| envOverrides | object | `{}` | Extra environment variables to set | +| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | +| image.repository | string | `"feastdev/feature-server-java"` | Docker image for Feature Server repository | +| image.tag | string | `"0.23.0"` | Image tag | +| ingress.grpc.annotations | object | `{}` | Extra annotations for the ingress | +| ingress.grpc.auth.enabled | bool | `false` | Flag to enable auth | +| ingress.grpc.class | string | `"nginx"` | Which ingress controller to use | +| ingress.grpc.enabled | bool | `false` | Flag to create an ingress resource for the service | +| ingress.grpc.hosts | list | `[]` | List of hostnames to match when routing requests | +| ingress.grpc.https.enabled | bool | `true` | Flag to enable HTTPS | +| ingress.grpc.https.secretNames | object | `{}` | Map of hostname to TLS secret name | +| ingress.grpc.whitelist | string | `""` | Allowed client IP source ranges | +| ingress.http.annotations | object | `{}` | Extra annotations for the ingress | | ingress.http.auth.authUrl | string | `"http://auth-server.auth-ns.svc.cluster.local/auth"` | URL to an existing authentication service | -| ingress.http.auth.enabled | bool | `false` | Flag to enable auth | -| ingress.http.class | string | `"nginx"` | Which ingress controller to use | -| ingress.http.enabled | bool | `false` | Flag to create an ingress resource for the service | -| ingress.http.hosts | list | `[]` | List of hostnames to match when routing requests | -| ingress.http.https.enabled | bool | `true` | Flag to enable HTTPS | -| ingress.http.https.secretNames | object | `{}` | Map of hostname to TLS secret name | -| ingress.http.whitelist | string | `""` | Allowed client IP source ranges | -| javaOpts | string | `nil` | [JVM options](https://docs.oracle.com/cd/E22289_01/html/821-1274/configuring-the-default-jvm-and-java-arguments.html). For better performance, it is advised to set the min and max heap:
`-Xms2048m -Xmx2048m` | -| livenessProbe.enabled | bool | `true` | Flag to enabled the probe | -| livenessProbe.failureThreshold | int | `5` | Min consecutive failures for the probe to be considered failed | -| livenessProbe.initialDelaySeconds | int | `60` | Delay before the probe is initiated | -| livenessProbe.periodSeconds | int | `10` | How often to perform the probe | -| livenessProbe.successThreshold | int | `1` | Min consecutive success for the probe to be considered successful | -| livenessProbe.timeoutSeconds | int | `5` | When the probe times out | -| logLevel | string | `"WARN"` | Default log level, use either one of `DEBUG`, `INFO`, `WARN` or `ERROR` | -| logType | string | `"Console"` | Log format, either `JSON` or `Console` | -| nodeSelector | object | `{}` | Node labels for pod assignment | -| podAnnotations | object | `{}` | Annotations to be added to Feast Serving pods | -| podLabels | object | `{}` | Labels to be added to Feast Serving pods | -| readinessProbe.enabled | bool | `true` | Flag to enabled the probe | -| readinessProbe.failureThreshold | int | `5` | Min consecutive failures for the probe to be considered failed | -| readinessProbe.initialDelaySeconds | int | `15` | Delay before the probe is initiated | -| readinessProbe.periodSeconds | int | `10` | How often to perform the probe | -| readinessProbe.successThreshold | int | `1` | Min consecutive success for the probe to be considered successful | -| readinessProbe.timeoutSeconds | int | `10` | When the probe times out | -| replicaCount | int | `1` | Number of pods that will be created | -| resources | object | `{}` | CPU/memory [resource requests/limit](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container) | -| secrets | list | `[]` | List of Kubernetes secrets to be mounted. These secrets will be mounted on /etc/secrets/. | -| service.grpc.nodePort | string | `nil` | Port number that each cluster node will listen to | -| service.grpc.port | int | `6566` | Service port for GRPC requests | -| service.grpc.targetPort | int | `6566` | Container port serving GRPC requests | -| service.http.nodePort | string | `nil` | Port number that each cluster node will listen to | -| service.http.port | int | `80` | Service port for HTTP requests | -| service.http.targetPort | int | `8080` | Container port serving HTTP requests and Prometheus metrics | -| service.type | string | `"ClusterIP"` | Kubernetes service type | -| transformationService.host | string | `""` | | -| transformationService.port | int | `6566` | | +| ingress.http.auth.enabled | bool | `false` | Flag to enable auth | +| ingress.http.class | string | `"nginx"` | Which ingress controller to use | +| ingress.http.enabled | bool | `false` | Flag to create an ingress resource for the service | +| ingress.http.hosts | list | `[]` | List of hostnames to match when routing requests | +| ingress.http.https.enabled | bool | `true` | Flag to enable HTTPS | +| ingress.http.https.secretNames | object | `{}` | Map of hostname to TLS secret name | +| ingress.http.whitelist | string | `""` | Allowed client IP source ranges | +| javaOpts | string | `nil` | [JVM options](https://docs.oracle.com/cd/E22289_01/html/821-1274/configuring-the-default-jvm-and-java-arguments.html). For better performance, it is advised to set the min and max heap:
`-Xms2048m -Xmx2048m` | +| livenessProbe.enabled | bool | `true` | Flag to enabled the probe | +| livenessProbe.failureThreshold | int | `5` | Min consecutive failures for the probe to be considered failed | +| livenessProbe.initialDelaySeconds | int | `60` | Delay before the probe is initiated | +| livenessProbe.periodSeconds | int | `10` | How often to perform the probe | +| livenessProbe.successThreshold | int | `1` | Min consecutive success for the probe to be considered successful | +| livenessProbe.timeoutSeconds | int | `5` | When the probe times out | +| logLevel | string | `"WARN"` | Default log level, use either one of `DEBUG`, `INFO`, `WARN` or `ERROR` | +| logType | string | `"Console"` | Log format, either `JSON` or `Console` | +| nodeSelector | object | `{}` | Node labels for pod assignment | +| podAnnotations | object | `{}` | Annotations to be added to Feast Serving pods | +| podLabels | object | `{}` | Labels to be added to Feast Serving pods | +| readinessProbe.enabled | bool | `true` | Flag to enabled the probe | +| readinessProbe.failureThreshold | int | `5` | Min consecutive failures for the probe to be considered failed | +| readinessProbe.initialDelaySeconds | int | `15` | Delay before the probe is initiated | +| readinessProbe.periodSeconds | int | `10` | How often to perform the probe | +| readinessProbe.successThreshold | int | `1` | Min consecutive success for the probe to be considered successful | +| readinessProbe.timeoutSeconds | int | `10` | When the probe times out | +| replicaCount | int | `1` | Number of pods that will be created | +| resources | object | `{}` | CPU/memory [resource requests/limit](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container) | +| secrets | list | `[]` | List of Kubernetes secrets to be mounted. These secrets will be mounted on /etc/secrets/. | +| service.grpc.nodePort | string | `nil` | Port number that each cluster node will listen to | +| service.grpc.port | int | `6566` | Service port for GRPC requests | +| service.grpc.targetPort | int | `6566` | Container port serving GRPC requests | +| service.type | string | `"ClusterIP"` | Kubernetes service type | +| transformationService.host | string | `""` | | +| transformationService.port | int | `6566` | | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.5.0](https://github.com/norwoodj/helm-docs/releases/v1.5.0) +Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) diff --git a/infra/charts/feast/charts/feature-server/templates/configmap.yaml b/infra/charts/feast/charts/feature-server/templates/configmap.yaml index fbf2633e8e..c172e9e288 100644 --- a/infra/charts/feast/charts/feature-server/templates/configmap.yaml +++ b/infra/charts/feast/charts/feature-server/templates/configmap.yaml @@ -28,9 +28,6 @@ data: config: host: {{ .Release.Name }}-redis-master port: 6379 - rest: - server: - port: {{ .Values.service.http.targetPort }} grpc: server: port: {{ .Values.service.grpc.targetPort }} diff --git a/infra/charts/feast/charts/feature-server/templates/deployment.yaml b/infra/charts/feast/charts/feature-server/templates/deployment.yaml index 1d1bc40029..ad0a12b3fc 100644 --- a/infra/charts/feast/charts/feature-server/templates/deployment.yaml +++ b/infra/charts/feast/charts/feature-server/templates/deployment.yaml @@ -106,8 +106,6 @@ spec: {{- end }} ports: - - name: http - containerPort: {{ .Values.service.http.targetPort }} - name: grpc containerPort: {{ .Values.service.grpc.targetPort }} diff --git a/infra/charts/feast/charts/feature-server/templates/service.yaml b/infra/charts/feast/charts/feature-server/templates/service.yaml index 037fe03870..c2455bd9f7 100644 --- a/infra/charts/feast/charts/feature-server/templates/service.yaml +++ b/infra/charts/feast/charts/feature-server/templates/service.yaml @@ -22,12 +22,6 @@ spec: {{ toYaml .Values.service.loadBalancerSourceRanges | indent 2 }} {{- end }} ports: - - name: http - port: {{ .Values.service.http.port }} - targetPort: {{ .Values.service.http.targetPort }} - {{- if .Values.service.http.nodePort }} - nodePort: {{ .Values.service.http.nodePort }} - {{- end }} - name: grpc port: {{ .Values.service.grpc.port }} targetPort: {{ .Values.service.grpc.targetPort }} diff --git a/infra/charts/feast/charts/feature-server/values.yaml b/infra/charts/feast/charts/feature-server/values.yaml index 011ce9dc33..eddec54cbe 100644 --- a/infra/charts/feast/charts/feature-server/values.yaml +++ b/infra/charts/feast/charts/feature-server/values.yaml @@ -71,13 +71,6 @@ readinessProbe: service: # service.type -- Kubernetes service type type: ClusterIP - http: - # service.http.port -- Service port for HTTP requests - port: 80 - # service.http.targetPort -- Container port serving HTTP requests and Prometheus metrics - targetPort: 8080 - # service.http.nodePort -- Port number that each cluster node will listen to - nodePort: grpc: # service.grpc.port -- Service port for GRPC requests port: 6566 diff --git a/infra/charts/feast/charts/transformation-service/README.md b/infra/charts/feast/charts/transformation-service/README.md index 9bc7a1e5d6..c7322dbef2 100644 --- a/infra/charts/feast/charts/transformation-service/README.md +++ b/infra/charts/feast/charts/transformation-service/README.md @@ -8,20 +8,21 @@ Transformation service: to compute on-demand features ## Values -| Key | Type | Default | Description | -|-----|------|--------------------------------------------|-------------| -| envOverrides | object | `{}` | Extra environment variables to set | -| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| envOverrides | object | `{}` | Extra environment variables to set | +| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | | image.repository | string | `"feastdev/feature-transformation-server"` | Docker image for Transformation Server repository | -| image.tag | string | `"0.23.0"` | Image tag | -| nodeSelector | object | `{}` | Node labels for pod assignment | -| podLabels | object | `{}` | Labels to be added to Feast Serving pods | -| replicaCount | int | `1` | Number of pods that will be created | -| resources | object | `{}` | CPU/memory [resource requests/limit](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container) | -| service.grpc.nodePort | string | `nil` | Port number that each cluster node will listen to | -| service.grpc.port | int | `6566` | Service port for GRPC requests | -| service.grpc.targetPort | int | `6566` | Container port serving GRPC requests | -| service.type | string | `"ClusterIP"` | Kubernetes service type | +| image.tag | string | `"0.23.0"` | Image tag | +| nodeSelector | object | `{}` | Node labels for pod assignment | +| podLabels | object | `{}` | Labels to be added to Feast Serving pods | +| replicaCount | int | `1` | Number of pods that will be created | +| resources | object | `{}` | CPU/memory [resource requests/limit](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container) | +| secrets | list | `[]` | List of Kubernetes secrets to be mounted. These secrets will be mounted on /etc/secrets/. | +| service.grpc.nodePort | string | `nil` | Port number that each cluster node will listen to | +| service.grpc.port | int | `6566` | Service port for GRPC requests | +| service.grpc.targetPort | int | `6566` | Container port serving GRPC requests | +| service.type | string | `"ClusterIP"` | Kubernetes service type | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.5.0](https://github.com/norwoodj/helm-docs/releases/v1.5.0) +Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) diff --git a/java/infra/docker/feature-server/Dockerfile.dev b/java/infra/docker/feature-server/Dockerfile.dev index 93bbbbb718..4eaec41ae3 100644 --- a/java/infra/docker/feature-server/Dockerfile.dev +++ b/java/infra/docker/feature-server/Dockerfile.dev @@ -7,7 +7,7 @@ ARG REVISION=dev RUN wget -q https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/v0.3.1/grpc_health_probe-linux-amd64 \ -O /usr/bin/grpc-health-probe && \ chmod +x /usr/bin/grpc-health-probe -ADD $PWD/serving/target/feast-serving-$REVISION-exec.jar /opt/feast/feast-serving.jar +ADD $PWD/java/serving/target/feast-serving-$REVISION-jar-with-dependencies.jar /opt/feast/feast-serving.jar CMD ["java",\ "-Xms1024m",\ "-Xmx1024m",\ diff --git a/java/serving/README.md b/java/serving/README.md index 0a153ceab8..ff0f8fb30f 100644 --- a/java/serving/README.md +++ b/java/serving/README.md @@ -138,4 +138,8 @@ mvn test -pl serving --also-make mvn verify -pl serving --also-make # run integration tests with debugger mvn -Dmaven.failsafe.debug verify -pl serving --also-make -``` \ No newline at end of file +``` + +### Developing against Feast helm charts +Look at [java-demo](../../examples/java-demo) for steps on how to update the helm chart or java logic and test their +interactions. \ No newline at end of file diff --git a/java/serving/src/main/resources/application.yml b/java/serving/src/main/resources/application.yml index b0c3bf7636..62ace5018e 100644 --- a/java/serving/src/main/resources/application.yml +++ b/java/serving/src/main/resources/application.yml @@ -40,10 +40,3 @@ grpc: # It is set default to 6566 so it does not conflict with the GRPC server on Feast Core # which defaults to port 6565 port: 6566 - -rest: - server: - # The port number on which the Tomcat webserver that serves REST API endpoints should listen - # It is set by default to 8081 so it does not conflict with Tomcat webserver on Feast Core - # if both Feast Core and Serving are running on the same machine - port: 8081 diff --git a/sdk/python/feast/infra/transformation_servers/Dockerfile b/sdk/python/feast/infra/transformation_servers/Dockerfile index 5e77144757..c072ed0160 100644 --- a/sdk/python/feast/infra/transformation_servers/Dockerfile +++ b/sdk/python/feast/infra/transformation_servers/Dockerfile @@ -15,7 +15,7 @@ COPY README.md README.md # Install dependencies -RUN --mount=source=.git,target=.git,type=bind pip3 install --no-cache-dir -e '.' +RUN --mount=source=.git,target=.git,type=bind pip3 install --no-cache-dir -e '.[gcp,aws]' # Start feature transformation server CMD [ "python", "app.py" ] From 47a7a966567ae6e7b1578c34613290af4f3a3189 Mon Sep 17 00:00:00 2001 From: Danny Chiao Date: Thu, 18 Aug 2022 18:29:52 -0400 Subject: [PATCH 2/9] fix helm docs and accidental issues Signed-off-by: Danny Chiao --- .../feature_repo/application-override.yaml | 14 ++--- .../java-demo/feature_repo/feature_store.yaml | 4 +- infra/charts/feast-feature-server/README.md | 53 ++++++++++++++----- .../feast-feature-server/README.md.gotmpl | 47 ++++++++++++++++ infra/charts/feast-feature-server/values.yaml | 2 + infra/charts/feast-python-server/README.md | 35 +++++++----- .../feast-python-server/README.md.gotmpl | 29 ++++++++++ infra/charts/feast-python-server/values.yaml | 2 + 8 files changed, 153 insertions(+), 33 deletions(-) create mode 100644 infra/charts/feast-feature-server/README.md.gotmpl create mode 100644 infra/charts/feast-python-server/README.md.gotmpl diff --git a/examples/java-demo/feature_repo/application-override.yaml b/examples/java-demo/feature_repo/application-override.yaml index 3cbe8eef0a..caaa5411e2 100644 --- a/examples/java-demo/feature_repo/application-override.yaml +++ b/examples/java-demo/feature_repo/application-override.yaml @@ -9,19 +9,19 @@ feature-server: config: host: my-redis-master port: 6379 - password: YTVWvjrQcK + password: [YOUR PASSWORD] entityKeySerializationVersion: 2 # Uncomment below for dev - image: - tag: dev +# image: +# tag: dev # Uncomment below for dev -transformation-service: - image: - tag: dev +#transformation-service: +# image: +# tag: dev global: registry: - path: gs://danny-test-feast-bucket/demo-repo/registry.db + path: gs://[YOUR GCS BUCKET]/demo-repo/registry.db cache_ttl_seconds: 60 project: feast_java_demo diff --git a/examples/java-demo/feature_repo/feature_store.yaml b/examples/java-demo/feature_repo/feature_store.yaml index 2b927f65bb..29fe3c97ce 100644 --- a/examples/java-demo/feature_repo/feature_store.yaml +++ b/examples/java-demo/feature_repo/feature_store.yaml @@ -1,9 +1,9 @@ -registry: gs://danny-test-feast-bucket/demo-repo/registry.db +registry: gs://[YOUR GCS BUCKET]/demo-repo/registry.db project: feast_java_demo provider: gcp online_store: type: redis - connection_string: localhost:6379,password=YTVWvjrQcK + connection_string: localhost:6379,password=[YOUR PASSWORD] offline_store: type: file entity_key_serialization_version: 2 \ No newline at end of file diff --git a/infra/charts/feast-feature-server/README.md b/infra/charts/feast-feature-server/README.md index 322e2fa3ba..f9bc6f6230 100644 --- a/infra/charts/feast-feature-server/README.md +++ b/infra/charts/feast-feature-server/README.md @@ -1,14 +1,46 @@ -# feast-feature-server +# Feast Python / Go Feature Server Helm Charts -![Version: 0.23.0](https://img.shields.io/badge/Version-0.23.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) +## Chart: Feast Feature Server in Go or Python -Feast Feature Server in Go or Python +Feast Feature Server in Go or Python Current chart version is `0.23.0` -**Homepage:** +## Installation +Docker repository and tag are required. Helm install example: +``` +helm install feast-python-server . --set image.repository=REPO --set image.tag=TAG +``` -## Source Code +Deployment assumes that `feature_store.yaml` exists on docker image. Example docker image: +``` +FROM python:3.8 -* +RUN apt update && \ + apt install -y jq + +RUN pip install pip --upgrade + +RUN pip install feast + +COPY feature_store.yaml /feature_store.yaml +``` + +Furthermore, if you wish to use the Go feature server, then you must install the Apache Arrow C++ libraries, and your `feature_store.yaml` should include `go_feature_server: True`. + For more details, see the [docs](https://docs.feast.dev/reference/feature-servers/go-feature-server). + The docker image might look like: + ``` + FROM python:3.8 + RUN apt update && \ + apt install -y jq + RUN pip install pip --upgrade + RUN pip install feast + RUN apt update + RUN apt install -y -V ca-certificates lsb-release wget + RUN wget https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb + RUN apt install -y -V ./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb + RUN apt update + RUN apt -y install libarrow-dev + COPY feature_store.yaml /feature_store.yaml + ``` ## Values @@ -17,8 +49,8 @@ Feast Feature Server in Go or Python | affinity | object | `{}` | | | fullnameOverride | string | `""` | | | image.pullPolicy | string | `"IfNotPresent"` | | -| image.repository | string | `""` | | -| image.tag | string | `""` | | +| image.repository | string | `""` | [required] The repository for the Docker image | +| image.tag | string | `""` | [required] The Docker image tag | | imagePullSecrets | list | `[]` | | | livenessProbe.initialDelaySeconds | int | `30` | | | livenessProbe.periodSeconds | int | `30` | | @@ -33,7 +65,4 @@ Feast Feature Server in Go or Python | securityContext | object | `{}` | | | service.port | int | `80` | | | service.type | string | `"ClusterIP"` | | -| tolerations | list | `[]` | | - ----------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) +| tolerations | list | `[]` | | \ No newline at end of file diff --git a/infra/charts/feast-feature-server/README.md.gotmpl b/infra/charts/feast-feature-server/README.md.gotmpl new file mode 100644 index 0000000000..9baccf0219 --- /dev/null +++ b/infra/charts/feast-feature-server/README.md.gotmpl @@ -0,0 +1,47 @@ +# Feast Python / Go Feature Server Helm Charts + +## Chart: Feast Feature Server in Go or Python + +{{ template "chart.description" . }} Current chart version is `{{ template "chart.version" . }}` + +## Installation +Docker repository and tag are required. Helm install example: +``` +helm install feast-python-server . --set image.repository=REPO --set image.tag=TAG +``` + +Deployment assumes that `feature_store.yaml` exists on docker image. Example docker image: +``` +FROM python:3.8 + +RUN apt update && \ + apt install -y jq + +RUN pip install pip --upgrade + +RUN pip install feast + +COPY feature_store.yaml /feature_store.yaml +``` + +Furthermore, if you wish to use the Go feature server, then you must install the Apache Arrow C++ libraries, and your `feature_store.yaml` should include `go_feature_server: True`. + For more details, see the [docs](https://docs.feast.dev/reference/feature-servers/go-feature-server). + The docker image might look like: + ``` + FROM python:3.8 + RUN apt update && \ + apt install -y jq + RUN pip install pip --upgrade + RUN pip install feast + RUN apt update + RUN apt install -y -V ca-certificates lsb-release wget + RUN wget https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb + RUN apt install -y -V ./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb + RUN apt update + RUN apt -y install libarrow-dev + COPY feature_store.yaml /feature_store.yaml + ``` + +{{ template "chart.requirementsSection" . }} + +{{ template "chart.valuesSection" . }} \ No newline at end of file diff --git a/infra/charts/feast-feature-server/values.yaml b/infra/charts/feast-feature-server/values.yaml index f62f95a757..6d0ab9c0ae 100644 --- a/infra/charts/feast-feature-server/values.yaml +++ b/infra/charts/feast-feature-server/values.yaml @@ -5,8 +5,10 @@ replicaCount: 1 image: + # image.repository -- [required] The repository for the Docker image repository: "" pullPolicy: IfNotPresent + # image.tag -- [required] The Docker image tag tag: "" imagePullSecrets: [] diff --git a/infra/charts/feast-python-server/README.md b/infra/charts/feast-python-server/README.md index 40257ed3c0..74527d866d 100644 --- a/infra/charts/feast-python-server/README.md +++ b/infra/charts/feast-python-server/README.md @@ -1,14 +1,28 @@ -# feast-python-server +# Feast Python Feature Server Helm Charts + +## Chart: Feast -![Version: 0.23.0](https://img.shields.io/badge/Version-0.23.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) +Feast Feature Server in Python Current chart version is `0.23.0` -Feast Feature Server in Python +## Installation +Docker repository and tag are required. Helm install example: +``` +helm install feast-python-server . --set image.repository=REPO --set image.tag=TAG +``` -**Homepage:** +Deployment assumes that `feature_store.yaml` exists on docker image. Example docker image: +``` +FROM python:3.8 -## Source Code +RUN apt update && \ + apt install -y jq -* +RUN pip install pip --upgrade + +RUN pip install feast + +COPY feature_store.yaml /feature_store.yaml +``` ## Values @@ -17,8 +31,8 @@ Feast Feature Server in Python | affinity | object | `{}` | | | fullnameOverride | string | `""` | | | image.pullPolicy | string | `"IfNotPresent"` | | -| image.repository | string | `""` | | -| image.tag | string | `""` | | +| image.repository | string | `""` | [required] The repository for the Docker image | +| image.tag | string | `""` | [required] The Docker image tag | | imagePullSecrets | list | `[]` | | | livenessProbe.initialDelaySeconds | int | `30` | | | livenessProbe.periodSeconds | int | `30` | | @@ -33,7 +47,4 @@ Feast Feature Server in Python | securityContext | object | `{}` | | | service.port | int | `80` | | | service.type | string | `"ClusterIP"` | | -| tolerations | list | `[]` | | - ----------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) +| tolerations | list | `[]` | | \ No newline at end of file diff --git a/infra/charts/feast-python-server/README.md.gotmpl b/infra/charts/feast-python-server/README.md.gotmpl new file mode 100644 index 0000000000..7198057d14 --- /dev/null +++ b/infra/charts/feast-python-server/README.md.gotmpl @@ -0,0 +1,29 @@ +# Feast Python Feature Server Helm Charts + +## Chart: Feast + +{{ template "chart.description" . }} Current chart version is `{{ template "chart.version" . }}` + +## Installation +Docker repository and tag are required. Helm install example: +``` +helm install feast-python-server . --set image.repository=REPO --set image.tag=TAG +``` + +Deployment assumes that `feature_store.yaml` exists on docker image. Example docker image: +``` +FROM python:3.8 + +RUN apt update && \ + apt install -y jq + +RUN pip install pip --upgrade + +RUN pip install feast + +COPY feature_store.yaml /feature_store.yaml +``` + +{{ template "chart.requirementsSection" . }} + +{{ template "chart.valuesSection" . }} \ No newline at end of file diff --git a/infra/charts/feast-python-server/values.yaml b/infra/charts/feast-python-server/values.yaml index f62f95a757..6d0ab9c0ae 100644 --- a/infra/charts/feast-python-server/values.yaml +++ b/infra/charts/feast-python-server/values.yaml @@ -5,8 +5,10 @@ replicaCount: 1 image: + # image.repository -- [required] The repository for the Docker image repository: "" pullPolicy: IfNotPresent + # image.tag -- [required] The Docker image tag tag: "" imagePullSecrets: [] From 7c17d37d3f5a7ee7f683338bed7468591aed6c24 Mon Sep 17 00:00:00 2001 From: Danny Chiao Date: Thu, 18 Aug 2022 18:30:46 -0400 Subject: [PATCH 3/9] fix Signed-off-by: Danny Chiao --- examples/java-demo/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/java-demo/README.md b/examples/java-demo/README.md index 693303cc93..ef4960fb4d 100644 --- a/examples/java-demo/README.md +++ b/examples/java-demo/README.md @@ -82,7 +82,7 @@ For this tutorial, we setup Feast with Redis, using the Feast CLI to register an >1. `eval $(minikube docker-env)` >2. `make build-java-docker-dev` >3. In the `application-override.yaml`, uncomment the two `image: tag: dev` blocks - >3. `helm install feast-release ../../../infra/charts/feast --values application-override.yaml` + >4. `helm install feast-release ../../../infra/charts/feast --values application-override.yaml` 5. (Optional): check logs of the server to make sure it’s working ```bash kubectl logs svc/feast-release-feature-server From 9f0eedbf9c4ef952633e03f3e9ce360aee28aa26 Mon Sep 17 00:00:00 2001 From: Danny Chiao Date: Thu, 18 Aug 2022 18:31:46 -0400 Subject: [PATCH 4/9] fix Signed-off-by: Danny Chiao --- infra/charts/feast-feature-server/README.md.gotmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infra/charts/feast-feature-server/README.md.gotmpl b/infra/charts/feast-feature-server/README.md.gotmpl index 9baccf0219..13060b1f09 100644 --- a/infra/charts/feast-feature-server/README.md.gotmpl +++ b/infra/charts/feast-feature-server/README.md.gotmpl @@ -7,7 +7,7 @@ ## Installation Docker repository and tag are required. Helm install example: ``` -helm install feast-python-server . --set image.repository=REPO --set image.tag=TAG +helm install feast-feature-server . --set image.repository=REPO --set image.tag=TAG ``` Deployment assumes that `feature_store.yaml` exists on docker image. Example docker image: From 50eb0e762195c789888a5350d4bfe075dcf5b728 Mon Sep 17 00:00:00 2001 From: Danny Chiao Date: Thu, 18 Aug 2022 18:33:15 -0400 Subject: [PATCH 5/9] fix Signed-off-by: Danny Chiao --- infra/charts/feast-feature-server/README.md | 7 +++---- infra/charts/feast-feature-server/README.md.gotmpl | 5 ++--- infra/charts/feast-python-server/README.md | 6 +++--- infra/charts/feast-python-server/README.md.gotmpl | 4 ++-- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/infra/charts/feast-feature-server/README.md b/infra/charts/feast-feature-server/README.md index f9bc6f6230..c08b40c1fc 100644 --- a/infra/charts/feast-feature-server/README.md +++ b/infra/charts/feast-feature-server/README.md @@ -1,13 +1,12 @@ # Feast Python / Go Feature Server Helm Charts -## Chart: Feast Feature Server in Go or Python - -Feast Feature Server in Go or Python Current chart version is `0.23.0` +Feast Feature Server in Go or Python +Current chart version is `0.23.0` ## Installation Docker repository and tag are required. Helm install example: ``` -helm install feast-python-server . --set image.repository=REPO --set image.tag=TAG +helm install feast-feature-server . --set image.repository=REPO --set image.tag=TAG ``` Deployment assumes that `feature_store.yaml` exists on docker image. Example docker image: diff --git a/infra/charts/feast-feature-server/README.md.gotmpl b/infra/charts/feast-feature-server/README.md.gotmpl index 13060b1f09..776a6fb0aa 100644 --- a/infra/charts/feast-feature-server/README.md.gotmpl +++ b/infra/charts/feast-feature-server/README.md.gotmpl @@ -1,8 +1,7 @@ # Feast Python / Go Feature Server Helm Charts -## Chart: Feast Feature Server in Go or Python - -{{ template "chart.description" . }} Current chart version is `{{ template "chart.version" . }}` +{{ template "chart.description" . }} +Current chart version is `{{ template "chart.version" . }}` ## Installation Docker repository and tag are required. Helm install example: diff --git a/infra/charts/feast-python-server/README.md b/infra/charts/feast-python-server/README.md index 74527d866d..7771bf7e4e 100644 --- a/infra/charts/feast-python-server/README.md +++ b/infra/charts/feast-python-server/README.md @@ -1,8 +1,8 @@ # Feast Python Feature Server Helm Charts - -## Chart: Feast -Feast Feature Server in Python Current chart version is `0.23.0` +Feast Feature Server in Python + +Current chart version is `0.23.0` ## Installation Docker repository and tag are required. Helm install example: diff --git a/infra/charts/feast-python-server/README.md.gotmpl b/infra/charts/feast-python-server/README.md.gotmpl index 7198057d14..c0722a8c16 100644 --- a/infra/charts/feast-python-server/README.md.gotmpl +++ b/infra/charts/feast-python-server/README.md.gotmpl @@ -1,8 +1,8 @@ # Feast Python Feature Server Helm Charts -## Chart: Feast +{{ template "chart.description" . }} -{{ template "chart.description" . }} Current chart version is `{{ template "chart.version" . }}` +Current chart version is `{{ template "chart.version" . }}` ## Installation Docker repository and tag are required. Helm install example: From 59135fb50ea653f4037141e56efd13867d9e545e Mon Sep 17 00:00:00 2001 From: Danny Chiao Date: Thu, 18 Aug 2022 18:36:25 -0400 Subject: [PATCH 6/9] fix issues with templates Signed-off-by: Danny Chiao --- infra/charts/feast-feature-server/README.md | 4 +++- infra/charts/feast-feature-server/README.md.gotmpl | 4 +++- infra/charts/feast/README.md | 2 -- infra/charts/feast/README.md.gotmpl | 2 -- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/infra/charts/feast-feature-server/README.md b/infra/charts/feast-feature-server/README.md index c08b40c1fc..33f475cfa5 100644 --- a/infra/charts/feast-feature-server/README.md +++ b/infra/charts/feast-feature-server/README.md @@ -26,8 +26,9 @@ COPY feature_store.yaml /feature_store.yaml Furthermore, if you wish to use the Go feature server, then you must install the Apache Arrow C++ libraries, and your `feature_store.yaml` should include `go_feature_server: True`. For more details, see the [docs](https://docs.feast.dev/reference/feature-servers/go-feature-server). The docker image might look like: - ``` +``` FROM python:3.8 + RUN apt update && \ apt install -y jq RUN pip install pip --upgrade @@ -38,6 +39,7 @@ Furthermore, if you wish to use the Go feature server, then you must install the RUN apt install -y -V ./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb RUN apt update RUN apt -y install libarrow-dev + COPY feature_store.yaml /feature_store.yaml ``` diff --git a/infra/charts/feast-feature-server/README.md.gotmpl b/infra/charts/feast-feature-server/README.md.gotmpl index 776a6fb0aa..56b3735d9f 100644 --- a/infra/charts/feast-feature-server/README.md.gotmpl +++ b/infra/charts/feast-feature-server/README.md.gotmpl @@ -26,8 +26,9 @@ COPY feature_store.yaml /feature_store.yaml Furthermore, if you wish to use the Go feature server, then you must install the Apache Arrow C++ libraries, and your `feature_store.yaml` should include `go_feature_server: True`. For more details, see the [docs](https://docs.feast.dev/reference/feature-servers/go-feature-server). The docker image might look like: - ``` +``` FROM python:3.8 + RUN apt update && \ apt install -y jq RUN pip install pip --upgrade @@ -38,6 +39,7 @@ Furthermore, if you wish to use the Go feature server, then you must install the RUN apt install -y -V ./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb RUN apt update RUN apt -y install libarrow-dev + COPY feature_store.yaml /feature_store.yaml ``` diff --git a/infra/charts/feast/README.md b/infra/charts/feast/README.md index fcd8607158..905fb4b072 100644 --- a/infra/charts/feast/README.md +++ b/infra/charts/feast/README.md @@ -1,7 +1,5 @@ # Feast Helm Charts -> :warning: **Disclaimer**: Since Feast 0.10 our vision is to manage all infrastructure for feature store from one place - Feast SDK. But while this new paradigm is still in development, we are planning to support the installation of some Feast components (like Java feature server) through Helm chart presented in this repository. However, we do not expect helm chart to become a long-term solution for deploying Feast components to production, and some frictions still might exist. For example, you will need to manually sync some configurations from [feature_store.yaml](https://docs.feast.dev/reference/feature-repository/feature-store-yaml) into the chart context (like path to the registry file or project name). - This repo contains Helm charts for Feast components that are being installed on Kubernetes: * Feast (root chart): The complete Helm chart containing all Feast components and dependencies. Most users will use this chart, but can selectively enable/disable subcharts using the values.yaml file. * [Feature Server](charts/feature-server): High performant JVM-based implementation of feature server. diff --git a/infra/charts/feast/README.md.gotmpl b/infra/charts/feast/README.md.gotmpl index acb4e830e7..e215858fe0 100644 --- a/infra/charts/feast/README.md.gotmpl +++ b/infra/charts/feast/README.md.gotmpl @@ -1,7 +1,5 @@ # Feast Helm Charts -> :warning: **Disclaimer**: Since Feast 0.10 our vision is to manage all infrastructure for feature store from one place - Feast SDK. But while this new paradigm is still in development, we are planning to support the installation of some Feast components (like Java feature server) through Helm chart presented in this repository. However, we do not expect helm chart to become a long-term solution for deploying Feast components to production, and some frictions still might exist. For example, you will need to manually sync some configurations from [feature_store.yaml](https://docs.feast.dev/reference/feature-repository/feature-store-yaml) into the chart context (like path to the registry file or project name). - This repo contains Helm charts for Feast components that are being installed on Kubernetes: * Feast (root chart): The complete Helm chart containing all Feast components and dependencies. Most users will use this chart, but can selectively enable/disable subcharts using the values.yaml file. * [Feature Server](charts/feature-server): High performant JVM-based implementation of feature server. From 3be612722eaac88e5b4025d40dd625351b81d2ee Mon Sep 17 00:00:00 2001 From: Danny Chiao Date: Thu, 18 Aug 2022 18:39:54 -0400 Subject: [PATCH 7/9] fix issues with templates Signed-off-by: Danny Chiao --- infra/charts/feast-feature-server/README.md | 1 - infra/charts/feast-feature-server/README.md.gotmpl | 1 - infra/charts/feast-python-server/README.md | 2 -- infra/charts/feast-python-server/README.md.gotmpl | 2 -- 4 files changed, 6 deletions(-) diff --git a/infra/charts/feast-feature-server/README.md b/infra/charts/feast-feature-server/README.md index 33f475cfa5..9e921da5d9 100644 --- a/infra/charts/feast-feature-server/README.md +++ b/infra/charts/feast-feature-server/README.md @@ -1,6 +1,5 @@ # Feast Python / Go Feature Server Helm Charts -Feast Feature Server in Go or Python Current chart version is `0.23.0` ## Installation diff --git a/infra/charts/feast-feature-server/README.md.gotmpl b/infra/charts/feast-feature-server/README.md.gotmpl index 56b3735d9f..cd2cde74a7 100644 --- a/infra/charts/feast-feature-server/README.md.gotmpl +++ b/infra/charts/feast-feature-server/README.md.gotmpl @@ -1,6 +1,5 @@ # Feast Python / Go Feature Server Helm Charts -{{ template "chart.description" . }} Current chart version is `{{ template "chart.version" . }}` ## Installation diff --git a/infra/charts/feast-python-server/README.md b/infra/charts/feast-python-server/README.md index 7771bf7e4e..2c8264c35c 100644 --- a/infra/charts/feast-python-server/README.md +++ b/infra/charts/feast-python-server/README.md @@ -1,7 +1,5 @@ # Feast Python Feature Server Helm Charts -Feast Feature Server in Python - Current chart version is `0.23.0` ## Installation diff --git a/infra/charts/feast-python-server/README.md.gotmpl b/infra/charts/feast-python-server/README.md.gotmpl index c0722a8c16..b9c88d11b4 100644 --- a/infra/charts/feast-python-server/README.md.gotmpl +++ b/infra/charts/feast-python-server/README.md.gotmpl @@ -1,7 +1,5 @@ # Feast Python Feature Server Helm Charts -{{ template "chart.description" . }} - Current chart version is `{{ template "chart.version" . }}` ## Installation From 845ca0a2e510c49bada20dffad934750b51e4642 Mon Sep 17 00:00:00 2001 From: Danny Chiao Date: Thu, 18 Aug 2022 18:45:04 -0400 Subject: [PATCH 8/9] fix serving README Signed-off-by: Danny Chiao --- java/serving/README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/java/serving/README.md b/java/serving/README.md index ff0f8fb30f..dc23702d0f 100644 --- a/java/serving/README.md +++ b/java/serving/README.md @@ -3,14 +3,18 @@ ### Overview This guide is targeted at developers looking to contribute to Feast Serving: - [Building and running Feast Serving locally](#building-and-running-feast-serving-locally) +- [Unit / Integration Tests](#unit-/-integration-tests) +- [Developing against Feast Helm charts](#developing-against-feast-helm-charts) -### Pre-requisites: +### Building and running Feast Serving locally: + +#### Pre-requisites - [Maven](https://maven.apache.org/install.html) build tool version 3.6.x - A Feast feature repo (e.g. https://github.com/feast-dev/feast-demo) - A running Store instance e.g. local Redis instance with `redis-server` -### Building and running Feast Serving locally: +#### Steps From the Feast GitHub root, run: 1. `mvn -f java/pom.xml install -Dmaven.test.skip=true` @@ -46,7 +50,7 @@ From the Feast GitHub root, run: ``` 5. Now you have a Feast Serving gRPC service running on port 6566 locally! -### Running test queries +#### Running test queries If you have [grpc_cli](https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md) installed, you can check that Feast Serving is running ``` grpc_cli ls localhost:6566 @@ -116,7 +120,7 @@ results { Rpc succeeded with OK status ``` -### Debugging Feast Serving +#### Debugging Feast Serving You can debug this like any other Java executable. Swap the java command above with: ``` java \ @@ -140,6 +144,6 @@ mvn verify -pl serving --also-make mvn -Dmaven.failsafe.debug verify -pl serving --also-make ``` -### Developing against Feast helm charts +### Developing against Feast Helm charts Look at [java-demo](../../examples/java-demo) for steps on how to update the helm chart or java logic and test their interactions. \ No newline at end of file From 9224b069d3c22d1ff07bc5d09276d4217566d219 Mon Sep 17 00:00:00 2001 From: Danny Chiao Date: Thu, 18 Aug 2022 18:50:14 -0400 Subject: [PATCH 9/9] fix go Signed-off-by: Danny Chiao --- infra/charts/feast-feature-server/README.md | 9 +++++++-- infra/charts/feast-feature-server/README.md.gotmpl | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/infra/charts/feast-feature-server/README.md b/infra/charts/feast-feature-server/README.md index 9e921da5d9..c5c2b9d654 100644 --- a/infra/charts/feast-feature-server/README.md +++ b/infra/charts/feast-feature-server/README.md @@ -3,6 +3,7 @@ Current chart version is `0.23.0` ## Installation +### Python feature server Docker repository and tag are required. Helm install example: ``` helm install feast-feature-server . --set image.repository=REPO --set image.tag=TAG @@ -22,9 +23,13 @@ RUN pip install feast COPY feature_store.yaml /feature_store.yaml ``` +### Go feature server +> Warning: this is experimental, and only supports a local file registry + Redis + Furthermore, if you wish to use the Go feature server, then you must install the Apache Arrow C++ libraries, and your `feature_store.yaml` should include `go_feature_server: True`. - For more details, see the [docs](https://docs.feast.dev/reference/feature-servers/go-feature-server). - The docker image might look like: +For more details, see the [docs](https://docs.feast.dev/reference/feature-servers/go-feature-server). + +The docker image might look like: ``` FROM python:3.8 diff --git a/infra/charts/feast-feature-server/README.md.gotmpl b/infra/charts/feast-feature-server/README.md.gotmpl index cd2cde74a7..79a681b3fc 100644 --- a/infra/charts/feast-feature-server/README.md.gotmpl +++ b/infra/charts/feast-feature-server/README.md.gotmpl @@ -3,6 +3,7 @@ Current chart version is `{{ template "chart.version" . }}` ## Installation +### Python feature server Docker repository and tag are required. Helm install example: ``` helm install feast-feature-server . --set image.repository=REPO --set image.tag=TAG @@ -22,9 +23,13 @@ RUN pip install feast COPY feature_store.yaml /feature_store.yaml ``` +### Go feature server +> Warning: this is experimental, and only supports a local file registry + Redis + Furthermore, if you wish to use the Go feature server, then you must install the Apache Arrow C++ libraries, and your `feature_store.yaml` should include `go_feature_server: True`. - For more details, see the [docs](https://docs.feast.dev/reference/feature-servers/go-feature-server). - The docker image might look like: +For more details, see the [docs](https://docs.feast.dev/reference/feature-servers/go-feature-server). + +The docker image might look like: ``` FROM python:3.8