Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 10 additions & 30 deletions infra/charts/feast/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Feast Java Helm Charts (alpha)
# Feast Helm Charts

This repo contains Helm charts for Feast Java components that are being installed on Kubernetes:
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.
* [Feature Server](charts/feature-server): Python-based online feature serving service.
* [Transformation Service](charts/transformation-service): Transformation server for calculating on-demand features
* Redis: (Optional) One of possible options for an online store used by Feature Server

Expand All @@ -23,43 +23,23 @@ helm repo update

Install Feast
```
helm install feast-release feast-charts/feast
helm install feast-release feast-charts/feast \
--set feature-server.feature_store_yaml_base64=$(base64 < feature_store.yaml)
```

## Customize your installation

This Feast chart comes with a [values.yaml](values.yaml) that allows for configuration and customization of all sub-charts.

In order to modify the default configuration of Feature Server, please use the `application-override.yaml` key in the `values.yaml` file in this chart. A code snippet example
```
feature-server:
application-override.yaml:
enabled: true
feast:
active_store: online
stores:
- name: online
type: REDIS
config:
host: localhost
port: 6379
entityKeySerializationVersion: 3

global:
registry:
path: gs://[YOUR GCS BUCKET]/demo-repo/registry.db
cache_ttl_seconds: 60
project: feast_java_demo
The feature server requires a base64-encoded `feature_store.yaml` to be provided:

```yaml
feature-server:
feature_store_yaml_base64: <base64 encoded feature_store.yaml>
```

For the default configuration, please see the [Feature Server Configuration](https://github.com/feast-dev/feast/blob/master/java/serving/src/main/resources/application.yml).

For more details, please see: https://docs.feast.dev/how-to-guides/running-feast-in-production

## Example
See [here](https://github.com/feast-dev/feast/tree/master/examples/java-demo) for a sample tutorial on testing this helm chart with a demo feature repository and a local Redis instance.

## Requirements

| Repository | Name | Version |
Expand All @@ -79,4 +59,4 @@ See [here](https://github.com/feast-dev/feast/tree/master/examples/java-demo) fo
| global.registry.path | string | `"gs://path/to/registry.db"` | Path to the registry file managed by Feast Python SDK |
| redis.enabled | bool | `false` | Flag to install Redis |
| redis.usePassword | bool | `false` | Disable redis password |
| transformation-service.enabled | bool | `true` | |
| transformation-service.enabled | bool | `true` | |
47 changes: 10 additions & 37 deletions infra/charts/feast/charts/feature-server/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,58 +10,31 @@ Feast Feature Server: Online feature serving service for Feast

| 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 |
| feature_store_yaml_base64 | string | `""` | [required] a base64 encoded version of feature_store.yaml |
| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy |
| image.repository | string | `"quay.io/feastdev/feature-server-java"` | Docker image for Feature Server repository |
| image.repository | string | `"quay.io/feastdev/feature-server"` | Docker image for Feature Server repository |
| image.tag | string | `"0.64.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: <br> `-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.initialDelaySeconds | int | `30` | Delay before the probe is initiated |
| livenessProbe.periodSeconds | int | `30` | How often to perform the probe |
| 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 |
| podAnnotations | object | `{}` | Annotations to be added to Feast Feature Server pods |
| podLabels | object | `{}` | Labels to be added to Feast Feature Server 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/<secret name>. |
| 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.loadBalancerIP | string | `nil` | Specify a load balancer IP if service type is LoadBalancer |
| service.loadBalancerSourceRanges | list | `[]` | Optionally restrict load balancer traffic to specified IPs |
| service.nodePort | string | `nil` | Port number that each cluster node will listen to |
| service.port | int | `6566` | Service port |
| service.type | string | `"ClusterIP"` | Kubernetes service type |
| transformationService.host | string | `""` | |
| transformationService.port | int | `6566` | |

----------------------------------------------
Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,8 @@ spec:
release: {{ .Release.Name }}
template:
metadata:
annotations:
checksum/configmap: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
{{- if .Values.podAnnotations }}
annotations:
{{ toYaml .Values.podAnnotations | nindent 8 }}
{{- end }}
labels:
Expand All @@ -37,46 +35,14 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}

volumes:
- name: {{ template "feature-server.fullname" . }}-config
configMap:
name: {{ template "feature-server.fullname" . }}
- name: {{ template "feature-server.fullname" . }}-secret
secret:
secretName: {{ template "feature-server.fullname" . }}
{{- range $secret := .Values.secrets }}
- name: {{ $secret }}
secret:
secretName: {{ $secret }}
{{- end }}

containers:
- name: {{ .Chart.Name }}
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: {{ .Values.image.pullPolicy }}

volumeMounts:
- name: {{ template "feature-server.fullname" . }}-config
mountPath: /etc/feast
- name: {{ template "feature-server.fullname" . }}-secret
mountPath: /etc/secrets/feast
readOnly: true
{{- range $secret := .Values.secrets }}
- name: {{ $secret }}
mountPath: "/etc/secrets/{{ $secret }}"
readOnly: true
{{- end }}

env:
- name: LOG_TYPE
value: {{ .Values.logType | quote }}
- name: LOG_LEVEL
value: {{ .Values.logLevel | quote }}

{{- if .Values.javaOpts }}
- name: JAVA_TOOL_OPTIONS
value: {{ .Values.javaOpts }}
{{- end }}
- name: FEATURE_STORE_YAML_BASE64
value: {{ .Values.feature_store_yaml_base64 }}

{{- range $key, $value := .Values.envOverrides }}
- name: {{ printf "%s" $key | replace "." "_" | upper | quote }}
Expand All @@ -89,52 +55,34 @@ spec:
{{- end }}

command:
- java
- -jar
- /opt/feast/feast-serving.jar
- {{ if index .Values "application.yaml" "enabled" -}}
classpath:/application.yml
{{- end }}
{{- if index .Values "application-generated.yaml" "enabled" -}}
,file:/etc/feast/application-generated.yaml
{{- end }}
{{- if index .Values "application-secret.yaml" "enabled" -}}
,file:/etc/secrets/feast/application-secret.yaml
{{- end }}
{{- if index .Values "application-override.yaml" "enabled" -}}
,file:/etc/feast/application-override.yaml
{{- end }}
- "feast"
- "serve"
- "-h"
- "0.0.0.0"
- "-p"
- "{{ .Values.service.port }}"

ports:
- name: grpc
containerPort: {{ .Values.service.grpc.targetPort }}
- name: http
containerPort: {{ .Values.service.port }}
protocol: TCP

{{- if .Values.livenessProbe.enabled }}
livenessProbe:
exec:
command:
- "grpc-health-probe"
- "-addr=:{{ .Values.service.grpc.targetPort }}"
- "-connect-timeout={{ .Values.livenessProbe.timeoutSeconds }}s"
- "-rpc-timeout={{ .Values.livenessProbe.timeoutSeconds }}s"
tcpSocket:
port: http
initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
successThreshold: {{ .Values.livenessProbe.successThreshold }}
timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
failureThreshold: {{ .Values.livenessProbe.failureThreshold }}
{{- end }}

{{- if .Values.readinessProbe.enabled }}
readinessProbe:
exec:
command:
- "grpc-health-probe"
- "-addr=:{{ .Values.service.grpc.targetPort }}"
- "-connect-timeout={{ .Values.readinessProbe.timeoutSeconds }}s"
- "-rpc-timeout={{ .Values.readinessProbe.timeoutSeconds }}s"
tcpSocket:
port: http
initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
successThreshold: {{ .Values.readinessProbe.successThreshold }}
timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
{{- end }}
Expand Down

This file was deleted.

Loading