feat: Production ready feast operator with v1 apiversion (#5771) · feast-dev/feast@49359c6

53 files changed

lines changed

Original file line numberDiff line numberDiff line change

@@ -227,7 +227,7 @@ kubectl apply -f https://raw.githubusercontent.com/feast-dev/feast/refs/tags/<ve

227227

3. Deploy a Feature Store

228228
229229

```sh

230-

kubectl apply -f https://raw.githubusercontent.com/feast-dev/feast/refs/heads/stable/infra/feast-operator/config/samples/v1alpha1_featurestore.yaml

230+

kubectl apply -f https://raw.githubusercontent.com/feast-dev/feast/refs/heads/stable/infra/feast-operator/config/samples/v1_featurestore.yaml

231231

```

232232

Verify the status

233233

```

@@ -238,7 +238,7 @@ sample Ready 2m21s

238238
239239

The above will install a simple [FeatureStore CR](../../infra/feast-operator/docs/api/markdown/ref.md) like the following. By default, it will run the [Online Store feature server](../reference/feature-servers/python-feature-server.md) -

240240

```yaml

241-

apiVersion: feast.dev/v1alpha1

241+

apiVersion: feast.dev/v1

242242

kind: FeatureStore

243243

metadata:

244244

name: sample

Original file line numberDiff line numberDiff line change

@@ -17,7 +17,7 @@ See [this](../../how-to-guides/running-feast-in-production.md#id-4.2.-deploy-fea

1717
1818

The Offline feature server can be deployed with a slight modification of the FeatureStore CR -

1919

```yaml

20-

apiVersion: feast.dev/v1alpha1

20+

apiVersion: feast.dev/v1

2121

kind: FeatureStore

2222

metadata:

2323

name: sample-offline-server

Original file line numberDiff line numberDiff line change

@@ -106,11 +106,7 @@

106106

"cell_type": "markdown",

107107

"metadata": {},

108108

"source": [

109-

"**Option 1: Directly Setting the CA Certificate Path** \n",

110-

"\n",

111-

"In this approach, we specify the CA certificate path directly in the Feast PostgreSQL URL using the `sslrootcert` parameter. \n",

112-

"\n",

113-

"You can refer to the `v1alpha1_featurestore_postgres_db_volumes_tls.yaml` file for the complete configuration details. "

109+

"**Option 1: Directly Setting the CA Certificate Path** \n\nIn this approach, we specify the CA certificate path directly in the Feast PostgreSQL URL using the `sslrootcert` parameter. \n\nYou can refer to the `v1_featurestore_postgres_db_volumes_tls.yaml` file for the complete configuration details. "

114110

]

115111

},

116112

{

@@ -131,19 +127,14 @@

131127

}

132128

],

133129

"source": [

134-

"!kubectl apply -f ../../infra/feast-operator/config/samples/v1alpha1_featurestore_postgres_db_volumes_tls.yaml --namespace=feast"

130+

"!kubectl apply -f ../../infra/feast-operator/config/samples/v1_featurestore_postgres_db_volumes_tls.yaml --namespace=feast"

135131

]

136132

},

137133

{

138134

"cell_type": "markdown",

139135

"metadata": {},

140136

"source": [

141-

"**Option 2: Using an Environment Variable for the CA Certificate** \n",

142-

"\n",

143-

"In this approach, you define the CA certificate path as an environment variable. You can refer to the `v1alpha1_featurestore_postgres_tls_volumes_ca_env.yaml` file for the complete configuration details. \n",

144-

"\n",

145-

"```bash\n",

146-

"FEAST_CA_CERT_FILE_PATH=<path-to-ca-cert>\n"

137+

"**Option 2: Using an Environment Variable for the CA Certificate** \n\nIn this approach, you define the CA certificate path as an environment variable. You can refer to the `v1_featurestore_postgres_tls_volumes_ca_env.yaml` file for the complete configuration details. \n\n```bash\nFEAST_CA_CERT_FILE_PATH=<path-to-ca-cert>\n"

147138

]

148139

},

149140

{

@@ -162,7 +153,7 @@

162153

}

163154

],

164155

"source": [

165-

"!kubectl apply -f ../../infra/feast-operator/config/samples/v1alpha1_featurestore_postgres_tls_volumes_ca_env.yaml --namespace=feast"

156+

"!kubectl apply -f ../../infra/feast-operator/config/samples/v1_featurestore_postgres_tls_volumes_ca_env.yaml --namespace=feast"

166157

]

167158

},

168159

{

@@ -455,4 +446,4 @@

455446

},

456447

"nbformat": 4,

457448

"nbformat_minor": 4

458-

}

449+

}

Original file line numberDiff line numberDiff line change

@@ -26,13 +26,7 @@

2626

}

2727

],

2828

"source": [

29-

"# If you have choosen the option 1 example earlier.\n",

30-

"!kubectl delete -f ../../infra/feast-operator/config/samples/v1alpha1_featurestore_postgres_db_volumes_tls.yaml\n",

31-

"\n",

32-

"# If you have choosen the option 2 example earlier.\n",

33-

"!kubectl delete -f ../../infra/feast-operator/config/samples/v1alpha1_featurestore_postgres_tls_volumes_ca_env.yaml\n",

34-

"\n",

35-

"#!kubectl delete -f ../../infra/feast-operator/dist/install.yaml"

29+

"# If you have choosen the option 1 example earlier.\n!kubectl delete -f ../../infra/feast-operator/config/samples/v1_featurestore_postgres_db_volumes_tls.yaml\n\n# If you have choosen the option 2 example earlier.\n!kubectl delete -f ../../infra/feast-operator/config/samples/v1_featurestore_postgres_tls_volumes_ca_env.yaml\n\n#!kubectl delete -f ../../infra/feast-operator/dist/install.yaml"

3630

]

3731

},

3832

{

@@ -131,4 +125,4 @@

131125

},

132126

"nbformat": 4,

133127

"nbformat_minor": 4

134-

}

128+

}

Original file line numberDiff line numberDiff line change

@@ -159,8 +159,7 @@

159159

"cell_type": "markdown",

160160

"metadata": {},

161161

"source": [

162-

"## Install the Feast services via FeatureStore CR\n",

163-

"Next, we'll use the running Feast Operator to install the feast services with Server components online, offline, registry with kubernetes Authorization set. Apply the included [reference deployment](../../infra/feast-operator/config/samples/v1alpha1_featurestore_kubernetes_auth.yaml) to install and configure Feast with kubernetes Authorization ."

162+

"## Install the Feast services via FeatureStore CR\nNext, we'll use the running Feast Operator to install the feast services with Server components online, offline, registry with kubernetes Authorization set. Apply the included [reference deployment](../../infra/feast-operator/config/samples/v1_featurestore_kubernetes_auth.yaml) to install and configure Feast with kubernetes Authorization ."

164163

]

165164

},

166165

{

@@ -202,8 +201,7 @@

202201

}

203202

],

204203

"source": [

205-

"!cat ../../infra/feast-operator/config/samples/v1alpha1_featurestore_kubernetes_auth.yaml\n",

206-

"!kubectl apply -f ../../infra/feast-operator/config/samples/v1alpha1_featurestore_kubernetes_auth.yaml -n feast"

204+

"!cat ../../infra/feast-operator/config/samples/v1_featurestore_kubernetes_auth.yaml\n!kubectl apply -f ../../infra/feast-operator/config/samples/v1_featurestore_kubernetes_auth.yaml -n feast"

207205

]

208206

},

209207

{

@@ -738,4 +736,4 @@

738736

},

739737

"nbformat": 4,

740738

"nbformat_minor": 4

741-

}

739+

}

Original file line numberDiff line numberDiff line change

@@ -52,8 +52,7 @@

5252

}

5353

],

5454

"source": [

55-

"!kubectl delete -f ../../infra/feast-operator/config/samples/v1alpha1_featurestore_kubernetes_auth.yaml\n",

56-

"!kubectl delete -f ../../infra/feast-operator/dist/install.yaml"

55+

"!kubectl delete -f ../../infra/feast-operator/config/samples/v1_featurestore_kubernetes_auth.yaml\n!kubectl delete -f ../../infra/feast-operator/dist/install.yaml"

5756

]

5857

},

5958

{

@@ -218,4 +217,4 @@

218217

},

219218

"nbformat": 4,

220219

"nbformat_minor": 5

221-

}

220+

}

Original file line numberDiff line numberDiff line change

@@ -52,8 +52,7 @@

5252

}

5353

],

5454

"source": [

55-

"!kubectl delete -f ../../infra/feast-operator/config/samples/v1alpha1_featurestore_kubernetes_auth.yaml\n",

56-

"!kubectl delete -f ../../infra/feast-operator/dist/install.yaml"

55+

"!kubectl delete -f ../../infra/feast-operator/config/samples/v1_featurestore_kubernetes_auth.yaml\n!kubectl delete -f ../../infra/feast-operator/dist/install.yaml"

5756

]

5857

},

5958

{

@@ -216,4 +215,4 @@

216215

},

217216

"nbformat": 4,

218217

"nbformat_minor": 5

219-

}

218+

}

Original file line numberDiff line numberDiff line change

@@ -176,8 +176,7 @@

176176

"cell_type": "markdown",

177177

"metadata": {},

178178

"source": [

179-

"## Install the Feast services via FeatureStore CR\n",

180-

"Next, we'll use the running Feast Operator to install the feast services with Server components online, offline, registry with kubernetes Authorization set. Apply the included [reference deployment](../../infra/feast-operator/config/samples/v1alpha1_featurestore_kubernetes_auth.yaml) to install and configure Feast with kubernetes Authorization ."

179+

"## Install the Feast services via FeatureStore CR\nNext, we'll use the running Feast Operator to install the feast services with Server components online, offline, registry with kubernetes Authorization set. Apply the included [reference deployment](../../infra/feast-operator/config/samples/v1_featurestore_kubernetes_auth.yaml) to install and configure Feast with kubernetes Authorization ."

181180

]

182181

},

183182

{

@@ -219,8 +218,7 @@

219218

}

220219

],

221220

"source": [

222-

"!cat ../../infra/feast-operator/config/samples/v1alpha1_featurestore_kubernetes_auth.yaml\n",

223-

"!kubectl apply -f ../../infra/feast-operator/config/samples/v1alpha1_featurestore_kubernetes_auth.yaml -n feast"

221+

"!cat ../../infra/feast-operator/config/samples/v1_featurestore_kubernetes_auth.yaml\n!kubectl apply -f ../../infra/feast-operator/config/samples/v1_featurestore_kubernetes_auth.yaml -n feast"

224222

]

225223

},

226224

{

@@ -761,4 +759,4 @@

761759

},

762760

"nbformat": 4,

763761

"nbformat_minor": 4

764-

}

762+

}

Original file line numberDiff line numberDiff line change

@@ -206,7 +206,7 @@ endif

206206
207207

.PHONY: install

208208

install: manifests kustomize ## Install CRDs into the K8s cluster specified in ~/.kube/config.

209-

$(KUSTOMIZE) build config/crd | $(KUBECTL) apply -f -

209+

$(KUSTOMIZE) build config/crd | $(KUBECTL) apply --server-side --force-conflicts -f -

210210
211211

.PHONY: uninstall

212212

uninstall: manifests kustomize ## Uninstall CRDs from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion.

@@ -215,7 +215,7 @@ uninstall: manifests kustomize ## Uninstall CRDs from the K8s cluster specified

215215

.PHONY: deploy

216216

deploy: manifests kustomize related-image-fs ## Deploy controller to the K8s cluster specified in ~/.kube/config.

217217

cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}

218-

$(KUSTOMIZE) build config/default | $(KUBECTL) apply -f -

218+

$(KUSTOMIZE) build config/default | $(KUBECTL) apply --server-side --force-conflicts -f -

219219
220220

.PHONY: undeploy

221221

undeploy: kustomize ## Undeploy controller from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion.

@@ -312,7 +312,7 @@ $(CRD_REF_DOCS): $(LOCALBIN)

312312
313313

.PHONY: generate-ref

314314

generate-ref: generate fmt crd-ref-docs

315-

$(CRD_REF_DOCS) --log-level=WARN --max-depth=30 --config=$(LOCALDIR)/docs/crd-ref-templates/config.yaml --source-path=$(LOCALDIR)/api/v1alpha1 --renderer=markdown --templates-dir=$(LOCALDIR)/docs/crd-ref-templates/markdown --output-path=$(LOCALDIR)/docs/api/markdown/ref.md

315+

$(CRD_REF_DOCS) --log-level=WARN --max-depth=30 --config=$(LOCALDIR)/docs/crd-ref-templates/config.yaml --source-path=$(LOCALDIR)/api/v1 --renderer=markdown --templates-dir=$(LOCALDIR)/docs/crd-ref-templates/markdown --output-path=$(LOCALDIR)/docs/api/markdown/ref.md

316316
317317

.PHONY: bundle

318318

bundle: manifests kustomize related-image-fs operator-sdk ## Generate bundle manifests and metadata, then validate generated files.

Original file line numberDiff line numberDiff line change

@@ -13,15 +13,17 @@ This is a K8s Operator that can be used to deploy and manage **Feast**, an open

1313
1414

## To deploy an Operator release on a cluster

1515
16-

Users can just run `kubectl apply -f <URL for YAML BUNDLE>` to install the project, i.e.:

16+

Users can deploy the operator using Server-Side Apply to avoid CRD annotation size limits:

1717
1818

```sh

1919

## Install the latest release -

20-

kubectl apply -f https://raw.githubusercontent.com/feast-dev/feast/refs/heads/stable/infra/feast-operator/dist/install.yaml

20+

kubectl apply --server-side --force-conflicts -f https://raw.githubusercontent.com/feast-dev/feast/refs/heads/stable/infra/feast-operator/dist/install.yaml

2121
2222

## OR, install a specific version -

23-

# kubectl apply -f https://raw.githubusercontent.com/feast-dev/feast/refs/tags/<version>/infra/feast-operator/dist/install.yaml

23+

# kubectl apply --server-side --force-conflicts -f https://raw.githubusercontent.com/feast-dev/feast/refs/tags/<version>/infra/feast-operator/dist/install.yaml

2424

```

25+
26+

> **NOTE**: Server-Side Apply (`--server-side`) is required because the CRD includes both v1alpha1 and v1 API versions, making it too large for the standard `kubectl apply` annotation limit. If you encounter annotation size errors, use `--server-side --force-conflicts` flags.

2527

##### Feast Operator Demo Videos

2628

[![](https://img.youtube.com/vi/48cb4AHxPR4/0.jpg)](https://www.youtube.com/playlist?list=PLPzVNzik7rsAN-amQLZckd0so3cIr7blX)

2729