This is an automated email from the ASF dual-hosted git repository.
fanng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new 0be7e97713 [#7082] feat(deploy): Support chart deployment of Gravitino
IRC (#7174)
0be7e97713 is described below
commit 0be7e97713ea35bf92bedd75fff265fa9c3124e1
Author: Xiaojian Sun <[email protected]>
AuthorDate: Mon May 26 14:09:08 2025 +0800
[#7082] feat(deploy): Support chart deployment of Gravitino IRC (#7174)
### What changes were proposed in this pull request?
Support chart deployment of Gravitino IRC
### Why are the changes needed?
Fix: [#(7082)](https://github.com/apache/gravitino/issues/7082)
### Does this PR introduce _any_ user-facing change?
Support chart deployment of Gravitino IRC
### How was this patch tested?
N/A
---
.github/workflows/chart-test.yaml | 2 +-
.../gravitino-iceberg-rest-server/.helmignore | 40 +++
.../gravitino-iceberg-rest-server/Chart.yaml | 45 ++++
.../resources/core-site.xml | 27 ++
.../resources/gravitino-iceberg-rest-server.conf | 52 ++++
.../resources/hdfs-site.xml | 26 ++
.../resources/init.sh | 25 ++
.../resources/log4j2.properties | 80 ++++++
.../templates/NOTES.txt | 38 +++
.../templates/_helpers.tpl | 88 +++++++
.../templates/configmap.yaml | 32 +++
.../templates/deployment.yaml | 147 +++++++++++
.../templates/ingress.yaml | 80 ++++++
.../templates/service.yaml | 77 ++++++
.../templates/serviceaccount.yaml | 31 +++
.../templates/tests/test-connection.yaml | 62 +++++
.../gravitino-iceberg-rest-server/values.yaml | 272 +++++++++++++++++++++
docs/iceberg-rest-catalog-chart.md | 81 ++++++
18 files changed, 1204 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/chart-test.yaml
b/.github/workflows/chart-test.yaml
index 0679c72c19..4cf9333267 100644
--- a/.github/workflows/chart-test.yaml
+++ b/.github/workflows/chart-test.yaml
@@ -82,4 +82,4 @@ jobs:
- name: Run chart-testing (install mysql enable)
if: steps.list-changed.outputs.changed == 'true'
- run: ct install --chart-dirs=dev/charts --helm-extra-set-args
"--values dev/charts/gravitino/resources/scenarios/ci-values.yaml"
--target-branch ${{ github.event.pull_request.base.ref }}
\ No newline at end of file
+ run: ct install --charts=dev/charts/gravitino --helm-extra-set-args
"--values dev/charts/gravitino/resources/scenarios/ci-values.yaml"
--target-branch ${{ github.event.pull_request.base.ref }}
\ No newline at end of file
diff --git a/dev/charts/gravitino-iceberg-rest-server/.helmignore
b/dev/charts/gravitino-iceberg-rest-server/.helmignore
new file mode 100644
index 0000000000..504c781888
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/.helmignore
@@ -0,0 +1,40 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
\ No newline at end of file
diff --git a/dev/charts/gravitino-iceberg-rest-server/Chart.yaml
b/dev/charts/gravitino-iceberg-rest-server/Chart.yaml
new file mode 100644
index 0000000000..60aae7c538
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/Chart.yaml
@@ -0,0 +1,45 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+apiVersion: v2
+name: gravitino-iceberg-rest-server
+description: Apache Gravitino's REST catalog server delivers unified metadata
management via RESTful APIs, supporting HDFS/S3/OSS storage backends,
Spark/Flink/Trino engines, federated metadata, access control, and Iceberg REST
spec compatibility.
+
+home: https://gravitino.apache.org
+icon: https://gravitino.apache.org/img/apache-gravitino.svg
+keywords:
+ - gravitino
+ - iceberg
+ - metadata
+ - catalog
+
+annotations:
+ licenses: Apache-2.0
+kubeVersion: '>=1.29.0-0'
+maintainers:
+ - name: Gravitino
+ email: [email protected]
+ url: https://gravitino.apache.org
+
+sources:
+ - https://github.com/apache/gravitino
+ -
https://github.com/apache/gravitino/tree/main/dev/charts/gravitino-iceberg-rest-server
+
+appVersion: 0.10.0-SNAPSHOT
+version: 0.10.1
diff --git a/dev/charts/gravitino-iceberg-rest-server/resources/core-site.xml
b/dev/charts/gravitino-iceberg-rest-server/resources/core-site.xml
new file mode 100755
index 0000000000..7e35792811
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/resources/core-site.xml
@@ -0,0 +1,27 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ -->
+
+<configuration>
+ {{- range $key, $value := .Values.coreSiteProperties }}
+ <property>
+ <name>{{ $key }}</name>
+ <value>{{ $value }}</value>
+ </property>
+ {{- end }}
+</configuration>
diff --git
a/dev/charts/gravitino-iceberg-rest-server/resources/gravitino-iceberg-rest-server.conf
b/dev/charts/gravitino-iceberg-rest-server/resources/gravitino-iceberg-rest-server.conf
new file mode 100755
index 0000000000..90917e6fe6
--- /dev/null
+++
b/dev/charts/gravitino-iceberg-rest-server/resources/gravitino-iceberg-rest-server.conf
@@ -0,0 +1,52 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# THE CONFIGURATION FOR Iceberg REST SERVER
+gravitino.iceberg-rest.shutdown.timeout = {{
.Values.icebergRest.shutdownTimeout | default 3000 }}
+
+# THE CONFIGURATION FOR Iceberg REST WEB SERVER
+# The host name of the built-in web server
+gravitino.iceberg-rest.host = {{ .Values.icebergRest.host | default "0.0.0.0"
}}
+# The http port number of the built-in web server
+gravitino.iceberg-rest.httpPort = {{ .Values.icebergRest.httpPort | default
9001 }}
+# The min thread size of the built-in web server
+gravitino.iceberg-rest.minThreads = {{ .Values.icebergRest.minThreads |
default 24 }}
+# The max thread size of the built-in web server
+gravitino.iceberg-rest.maxThreads = {{ .Values.icebergRest.maxThreads |
default 200 }}
+# The stop timeout of the built-in web server
+gravitino.iceberg-rest.stopTimeout = {{ .Values.icebergRest.stopTimeout |
default 30000 }}
+# The timeout of idle connections
+gravitino.iceberg-rest.idleTimeout = {{ .Values.icebergRest.idleTimeout |
default 30000 }}
+# The executor thread pool work queue size of the built-in web server
+gravitino.iceberg-rest.threadPoolWorkQueueSize = {{
.Values.icebergRest.threadPoolWorkQueueSize | default 100 }}
+# The request header size of the built-in web server
+gravitino.iceberg-rest.requestHeaderSize = {{
.Values.icebergRest.requestHeaderSize | default 131072 }}
+# The response header size of the built-in web server
+gravitino.iceberg-rest.responseHeaderSize = {{
.Values.icebergRest.responseHeaderSize | default 131072 }}
+
+# THE CONFIGURATION FOR Iceberg catalog backend
+# The Iceberg catalog backend, it's recommended to change to hive or jdbc
+gravitino.iceberg-rest.catalog-backend = {{ .Values.icebergRest.catalogBackend
| default "memory" }}
+
+# The warehouse directory of Iceberg catalog
+gravitino.iceberg-rest.warehouse = {{ .Values.icebergRest.warehouse | default
"/tmp/" }}
+
+{{- range $key, $val := .Values.additionalConfigItems }}
+{{ $key }} = {{ tpl $val $ }}
+{{- end }}
\ No newline at end of file
diff --git a/dev/charts/gravitino-iceberg-rest-server/resources/hdfs-site.xml
b/dev/charts/gravitino-iceberg-rest-server/resources/hdfs-site.xml
new file mode 100755
index 0000000000..70444b730a
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/resources/hdfs-site.xml
@@ -0,0 +1,26 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ -->
+<configuration>
+ {{- range $key, $value := .Values.hdfsSiteProperties }}
+ <property>
+ <name>{{ $key }}</name>
+ <value>{{ $value }}</value>
+ </property>
+ {{- end }}
+</configuration>
diff --git a/dev/charts/gravitino-iceberg-rest-server/resources/init.sh
b/dev/charts/gravitino-iceberg-rest-server/resources/init.sh
new file mode 100644
index 0000000000..5034eef3e1
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/resources/init.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+echo "Override config."
+cp /tmp/conf/* ${GRAVITINO_HOME}/conf
+cp /tmp/conf/log4j2.properties ${GRAVITINO_HOME}/conf
+
+echo "Start the Gravitino Iceberg Rest Catalog Server"
+/bin/bash ${GRAVITINO_HOME}/bin/start-iceberg-rest-server.sh start
diff --git
a/dev/charts/gravitino-iceberg-rest-server/resources/log4j2.properties
b/dev/charts/gravitino-iceberg-rest-server/resources/log4j2.properties
new file mode 100755
index 0000000000..cd0ce0ee90
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/resources/log4j2.properties
@@ -0,0 +1,80 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+status = {{ .Values.log4j2Properties.status | default "warn" }}
+
+# Log files location
+property.basePath = {{ .Values.log4j2Properties.basePath | default
"${sys:gravitino.log.path}" }}
+property.serverName = {{ .Values.log4j2Properties.serverName | default
"${sys:gravitino.server.name}" }}
+
+# RollingFileAppender name, pattern, path and rollover policy
+appender.rolling.type = {{ .Values.log4j2Properties.rollingAppenderType |
default "RollingFile" }}
+appender.rolling.name = {{ .Values.log4j2Properties.rollingAppenderName |
default "fileLogger" }}
+appender.rolling.fileName = {{
.Values.log4j2Properties.rollingAppenderFileName | default
"${basePath}/${serverName}.log" }}
+appender.rolling.filePattern = {{
.Values.log4j2Properties.rollingAppenderFilePattern | default
"${basePath}/${serverName}_%d{yyyyMMdd}.log.gz" }}
+appender.rolling.layout.type = {{
.Values.log4j2Properties.rollingAppenderLayoutType | default "PatternLayout" }}
+appender.rolling.layout.pattern = {{
.Values.log4j2Properties.rollingAppenderLayoutPattern | default "%d{yyyy-MM-dd
HH:mm:ss.SSS} %level [%t] [%l] - %msg%n" }}
+appender.rolling.policies.type = {{
.Values.log4j2Properties.rollingAppenderPoliciesType | default "Policies" }}
+
+# RollingFileAppender rotation policy
+appender.rolling.policies.size.type = {{
.Values.log4j2Properties.rollingAppenderPoliciesSizeType | default
"SizeBasedTriggeringPolicy" }}
+appender.rolling.policies.size.size = {{
.Values.log4j2Properties.rollingAppenderPoliciesSizeSize | default "10MB" }}
+appender.rolling.policies.time.type = {{
.Values.log4j2Properties.rollingAppenderPoliciesTimeType | default
"TimeBasedTriggeringPolicy" }}
+appender.rolling.policies.time.interval = {{
.Values.log4j2Properties.rollingAppenderPoliciesTimeInterval | default 1 }}
+appender.rolling.policies.time.modulate = {{
.Values.log4j2Properties.rollingAppenderPoliciesTimeModulate | default true }}
+appender.rolling.strategy.type = {{
.Values.log4j2Properties.rollingAppenderStrategyType | default
"DefaultRolloverStrategy" }}
+appender.rolling.strategy.delete.type = {{
.Values.log4j2Properties.rollingAppenderStrategyDeleteType | default "Delete" }}
+appender.rolling.strategy.delete.basePath = {{
.Values.log4j2Properties.rollingAppenderStrategyDeleteBasePath | default
"${basePath}" }}
+appender.rolling.strategy.delete.maxDepth = {{
.Values.log4j2Properties.rollingAppenderStrategyDeleteMaxDepth | default 10 }}
+appender.rolling.strategy.delete.ifLastModified.type = {{
.Values.log4j2Properties.rollingAppenderStrategyDeleteIfLastModifiedType |
default "IfLastModified" }}
+
+# Delete all files older than 30 days
+appender.rolling.strategy.delete.ifLastModified.age = {{
.Values.log4j2Properties.rollingAppenderStrategyDeleteIfLastModifiedAge |
default "30d" }}
+
+## use seperate file for lineage log
+appender.lineage_file.type = {{ .Values.log4j2Properties.lineageFileType |
default "RollingFile" }}
+appender.lineage_file.name = {{ .Values.log4j2Properties.lineageFileName |
default "lineage_file" }}
+appender.lineage_file.fileName = {{
.Values.log4j2Properties.lineageFileFileName | default
"${basePath}/gravitino_lineage.log" }}
+appender.lineage_file.filePattern = {{
.Values.log4j2Properties.lineageFilePattern | default
"${basePath}/gravitino_lineage_%d{yyyyMMdd}.log.gz" }}
+appender.lineage_file.layout.type = {{
.Values.log4j2Properties.lineageFileLayoutType | default "PatternLayout" }}
+appender.lineage_file.layout.pattern = {{
.Values.log4j2Properties.lineageFileLayoutPattern | default "[%d{yyyy-MM-dd
HH:mm:ss}] %m%n" }}
+
+appender.lineage_file.policies.type = {{
.Values.log4j2Properties.lineageFilePoliciesType | default "Policies" }}
+appender.lineage_file.policies.time.type = {{
.Values.log4j2Properties.lineageFilePoliciesTimeType | default
"TimeBasedTriggeringPolicy" }}
+appender.lineage_file.policies.time.interval = {{
.Values.log4j2Properties.lineageFilePoliciesTimeInterval | default 1 }}
+appender.lineage_file.policies.time.modulate = {{
.Values.log4j2Properties.lineageFilePoliciesTimeModulate | default true }}
+appender.lineage_file.strategy.type = {{
.Values.log4j2Properties.lineageFileStrategyType | default
"DefaultRolloverStrategy" }}
+appender.lineage_file.strategy.delete.type = {{
.Values.log4j2Properties.lineageFileStrategyDeleteType | default "Delete" }}
+appender.lineage_file.strategy.delete.basePath = {{
.Values.log4j2Properties.lineageFileStrategyDeleteBasePath | default
"${basePath}" }}
+appender.lineage_file.strategy.delete.maxDepth = {{
.Values.log4j2Properties.lineageFileStrategyDeleteMaxDepth | default 10 }}
+appender.lineage_file.strategy.delete.ifLastModified.type = {{
.Values.log4j2Properties.lineageFileStrategyDeleteIfLastModifiedType | default
"IfLastModified" }}
+appender.lineage_file.strategy.delete.ifLastModified.age = {{
.Values.log4j2Properties.lineageFileStrategyDeleteIfLastModifiedAge | default
"30d" }}
+
+logger.lineage.name = {{ .Values.log4j2Properties.lineageName | default
"org.apache.gravitino.lineage.sink.LineageLogSink$LineageLogger" }}
+logger.lineage.level = {{ .Values.log4j2Properties.lineageLevel | default
"info" }}
+logger.lineage.appenderRef.lineage_file.ref = {{
.Values.log4j2Properties.lineageAppenderRefLineageFileRef | default
"lineage_file" }}
+logger.lineage.additivity = {{ .Values.log4j2Properties.lineageAdditivity |
default false }}
+
+# Configure root logger
+rootLogger.level = {{ .Values.log4j2Properties.rootLoggerLevel | default
"info" }}
+rootLogger.appenderRef.rolling.ref = {{
.Values.log4j2Properties.rootLoggerAppenderRefRollingRef | default "fileLogger"
}}
+
+{{- range $key, $val := .Values.additionalLog4j2Properties }}
+{{ $key }} = {{ tpl $val $ }}
+{{- end }}
diff --git a/dev/charts/gravitino-iceberg-rest-server/templates/NOTES.txt
b/dev/charts/gravitino-iceberg-rest-server/templates/NOTES.txt
new file mode 100644
index 0000000000..2a6653c604
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/templates/NOTES.txt
@@ -0,0 +1,38 @@
+{{- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */}}
+
+🚀 Gravitino Iceberg REST Server has been successfully deployed!
+
+1. Check Pod status:
+ kubectl get pods -n {{ include "gravitino-iceberg-rest-server.namespace" .
}} \
+ -l app={{ include "gravitino-iceberg-rest-server.name" . }}
+
+2. View service:
+ kubectl get svc -n {{ include "gravitino-iceberg-rest-server.namespace" .
}} \
+ -l app={{ include "gravitino-iceberg-rest-server.name" . }}
+
+3. View config:
+ kubectl get cm {{ include "gravitino-iceberg-rest-server.fullname" . }} -n \
+ {{ include "gravitino-iceberg-rest-server.namespace" . }} -o json | jq -r
'.data["gravitino-iceberg-rest-server.conf"]'
+
+4. Access service:
+ kubectl port-forward -n {{ include
"gravitino-iceberg-rest-server.namespace" . }} \
+ svc/{{ include "gravitino-iceberg-rest-server.name" . }} \
+ {{ .Values.service.port }}:{{ .Values.service.port }}
+ Then visit: http://localhost:{{ .Values.service.port }}{{
.Values.livenessProbe.httpGet.path }}
\ No newline at end of file
diff --git a/dev/charts/gravitino-iceberg-rest-server/templates/_helpers.tpl
b/dev/charts/gravitino-iceberg-rest-server/templates/_helpers.tpl
new file mode 100644
index 0000000000..c58f53a574
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/templates/_helpers.tpl
@@ -0,0 +1,88 @@
+{{- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */}}
+
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "gravitino-iceberg-rest-server.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to
this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "gravitino-iceberg-rest-server.fullname" -}}
+{{- if .Values.fullnameOverride }}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "gravitino-iceberg-rest-server.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 |
trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "gravitino-iceberg-rest-server.labels" -}}
+helm.sh/chart: {{ include "gravitino-iceberg-rest-server.chart" . }}
+{{ include "gravitino-iceberg-rest-server.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
+{{/*
+Selector labels
+*/}}
+{{- define "gravitino-iceberg-rest-server.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "gravitino-iceberg-rest-server.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "gravitino-iceberg-rest-server.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "gravitino-iceberg-rest-server.fullname" .)
.Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
+
+{{/*
+Define the gravitino.namespace
+*/}}
+{{- define "gravitino-iceberg-rest-server.namespace" -}}
+ {{- .Release.Namespace -}}
+{{- end -}}
\ No newline at end of file
diff --git a/dev/charts/gravitino-iceberg-rest-server/templates/configmap.yaml
b/dev/charts/gravitino-iceberg-rest-server/templates/configmap.yaml
new file mode 100644
index 0000000000..77231b2244
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/templates/configmap.yaml
@@ -0,0 +1,32 @@
+{{- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */}}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "gravitino-iceberg-rest-server.fullname" . }}
+ namespace: {{ include "gravitino-iceberg-rest-server.namespace" . }}
+ labels:
+ {{- include "gravitino-iceberg-rest-server.labels" . | nindent 4 }}
+data:
+{{ $root := . }}
+{{ range $path, $bytes := .Files.Glob "resources/*" }}
+{{ base $path | indent 2 }}: |-
+{{ tpl ( $root.Files.Get $path ) $ | indent 4 }}
+{{ end }}
\ No newline at end of file
diff --git a/dev/charts/gravitino-iceberg-rest-server/templates/deployment.yaml
b/dev/charts/gravitino-iceberg-rest-server/templates/deployment.yaml
new file mode 100644
index 0000000000..2bb2c14a1d
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/templates/deployment.yaml
@@ -0,0 +1,147 @@
+{{- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */}}
+
+# Kubernetes Deployment Manifest for Gravitino Iceberg REST Server
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "gravitino-iceberg-rest-server.fullname" . }}
+ namespace: {{ include "gravitino-iceberg-rest-server.namespace" . }}
+ labels:
+ {{- include "gravitino-iceberg-rest-server.labels" . | nindent 4 }}
+ annotations:
+ {{- toYaml .Values.annotations | nindent 4 }}
+
+spec:
+ replicas: {{ .Values.replicas }}
+
+ # Selector for managing Pods
+ selector:
+ matchLabels:
+ app: {{ include "gravitino-iceberg-rest-server.name" . }}
+ release: {{ .Release.Name }}
+
+ template:
+ metadata:
+ # Pod annotations (if configured)
+ {{- with .Values.podAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+
+ labels:
+ app: {{ include "gravitino-iceberg-rest-server.name" . }}
+ name: {{ include "gravitino-iceberg-rest-server.fullname" . }}
+ release: {{ .Release.Name }}
+ # Additional pod labels
+ {{- with .Values.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+
+ spec:
+ # Image pull secrets configuration
+ {{- with .Values.image.pullSecrets }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+
+ serviceAccountName: {{ include
"gravitino-iceberg-rest-server.serviceAccountName" . }}
+
+ # Pod-level security context
+ securityContext:
+ {{- toYaml .Values.podSecurityContext | nindent 8 }}
+
+ containers:
+ - name: {{ include "gravitino-iceberg-rest-server.name" . }}
+ # Image configuration
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ command:
+ - "/bin/bash"
+ - "/tmp/conf/init.sh"
+
+ # Container security context
+ securityContext:
+ {{- toYaml .Values.securityContext | nindent 12 }}
+
+ # Environment variables
+ {{- if .Values.env }}
+ env:
+ {{- toYaml .Values.env | nindent 12 }}
+ {{- end }}
+
+ # Environment from ConfigMaps/Secrets
+ {{- if .Values.envFrom }}
+ envFrom:
+ {{- toYaml .Values.envFrom | nindent 12 }}
+ {{- end }}
+
+ # Container ports
+ ports:
+ - name: {{ .Values.service.portName }}
+ containerPort: {{ .Values.service.port }}
+ protocol: TCP
+
+ # Probes configuration
+ livenessProbe:
+ {{- toYaml .Values.livenessProbe | nindent 12 }}
+
+ readinessProbe:
+ {{- toYaml .Values.readinessProbe | nindent 12 }}
+
+ # Resource limits/requests
+ resources:
+ {{- toYaml .Values.resources | nindent 12 }}
+
+ # Volume mounts
+ volumeMounts:
+ - name: iceberg-rest-server-config
+ mountPath: /tmp/conf/
+
+ {{- if .Values.extraVolumeMounts }}
+ # Additional volume mounts
+ {{- toYaml .Values.extraVolumeMounts | nindent 12 }}
+ {{- end }}
+
+ # Node scheduling constraints
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+
+ {{- with .Values.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+
+ {{- with .Values.tolerations }}
+ tolerations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+
+ volumes:
+ # Configuration volume
+ - name: iceberg-rest-server-config
+ configMap:
+ name: {{ include "gravitino-iceberg-rest-server.fullname" . }}
+
+ # Additional volumes
+ {{- if .Values.extraVolumes }}
+ {{- toYaml .Values.extraVolumes | nindent 8 }}
+ {{- end }}
\ No newline at end of file
diff --git a/dev/charts/gravitino-iceberg-rest-server/templates/ingress.yaml
b/dev/charts/gravitino-iceberg-rest-server/templates/ingress.yaml
new file mode 100644
index 0000000000..67cd365fba
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/templates/ingress.yaml
@@ -0,0 +1,80 @@
+{{- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */}}
+
+{{- if .Values.ingress.enabled -}}
+{{- $fullName := include "gravitino-iceberg-rest-server.fullname" . -}}
+{{- $svcPort := .Values.service.port -}}
+{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0"
.Capabilities.KubeVersion.GitVersion)) }}
+ {{- if not (hasKey .Values.ingress.annotations
"kubernetes.io/ingress.class") }}
+ {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class"
.Values.ingress.className}}
+ {{- end }}
+{{- end }}
+{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
+apiVersion: networking.k8s.io/v1
+{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
+apiVersion: networking.k8s.io/v1beta1
+{{- else -}}
+apiVersion: extensions/v1beta1
+{{- end }}
+kind: Ingress
+metadata:
+ name: {{ $fullName }}
+ labels:
+ {{- include "gravitino-iceberg-rest-server.labels" . | nindent 4 }}
+ {{- with .Values.ingress.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ {{- if and .Values.ingress.className (semverCompare ">=1.18-0"
.Capabilities.KubeVersion.GitVersion) }}
+ ingressClassName: {{ .Values.ingress.className }}
+ {{- end }}
+ {{- if .Values.ingress.tls }}
+ tls:
+ {{- range .Values.ingress.tls }}
+ - hosts:
+ {{- range .hosts }}
+ - {{ . | quote }}
+ {{- end }}
+ secretName: {{ .secretName }}
+ {{- end }}
+ {{- end }}
+ rules:
+ {{- range .Values.ingress.hosts }}
+ - host: {{ .host | quote }}
+ http:
+ paths:
+ {{- range .paths }}
+ - path: {{ .path }}
+ {{- if and .pathType (semverCompare ">=1.18-0"
$.Capabilities.KubeVersion.GitVersion) }}
+ pathType: {{ .pathType }}
+ {{- end }}
+ backend:
+ {{- if semverCompare ">=1.19-0"
$.Capabilities.KubeVersion.GitVersion }}
+ service:
+ name: {{ $fullName }}
+ port:
+ number: {{ $svcPort }}
+ {{- else }}
+ serviceName: {{ $fullName }}
+ servicePort: {{ $svcPort }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+{{- end }}
diff --git a/dev/charts/gravitino-iceberg-rest-server/templates/service.yaml
b/dev/charts/gravitino-iceberg-rest-server/templates/service.yaml
new file mode 100644
index 0000000000..e9e0be751a
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/templates/service.yaml
@@ -0,0 +1,77 @@
+{{- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */}}
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ .Values.service.name }}
+ namespace: {{ include "gravitino-iceberg-rest-server.namespace" . }}
+ labels:
+ {{- include "gravitino-iceberg-rest-server.labels" . | nindent 4 }}
+ {{- with .Values.service.labels }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+ annotations:
+ {{- toYaml .Values.service.annotations | nindent 4 }}
+
+spec:
+ type: {{ .Values.service.type | default "ClusterIP" }}
+
+ # LoadBalancer specific configuration
+ {{- if eq .Values.service.type "LoadBalancer" }}
+ loadBalancerClass: {{ .Values.service.loadBalancerClass | default "" }}
+ {{- with .Values.service.loadBalancerIP }}
+ loadBalancerIP: {{ . }}
+ {{- end }}
+ {{- with .Values.service.loadBalancerSourceRanges }}
+ loadBalancerSourceRanges:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+ {{- end }}
+
+ # ClusterIP specific configuration
+ {{- with .Values.service.clusterIP }}
+ clusterIP: {{ . }}
+ {{- end }}
+
+ # External IP configuration
+ {{- with .Values.service.externalIPs }}
+ externalIPs:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+
+ # Port configuration
+ ports:
+ - name: {{ .Values.service.portName }}
+ port: {{ .Values.service.port }}
+ protocol: TCP
+ targetPort: {{ .Values.service.targetPort }}
+ {{- if and (eq .Values.service.type "NodePort")
(.Values.service.nodePort) }}
+ nodePort: {{ .Values.service.nodePort }}
+ {{- end }}
+
+ # Extra exposed ports
+ {{- if .Values.extraExposePorts }}
+ - {{ tpl (toYaml .Values.extraExposePorts) . | trim }}
+ {{- end }}
+
+ # Selector for pods
+ selector:
+ app: {{ include "gravitino-iceberg-rest-server.name" . }}
+ release: {{ .Release.Name }}
\ No newline at end of file
diff --git
a/dev/charts/gravitino-iceberg-rest-server/templates/serviceaccount.yaml
b/dev/charts/gravitino-iceberg-rest-server/templates/serviceaccount.yaml
new file mode 100644
index 0000000000..dda22f406d
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/templates/serviceaccount.yaml
@@ -0,0 +1,31 @@
+{{- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */}}
+
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "gravitino-iceberg-rest-server.serviceAccountName" . }}
+ labels:
+ {{- include "gravitino-iceberg-rest-server.labels" . | nindent 4 }}
+ {{- with .Values.serviceAccount.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end }}
diff --git
a/dev/charts/gravitino-iceberg-rest-server/templates/tests/test-connection.yaml
b/dev/charts/gravitino-iceberg-rest-server/templates/tests/test-connection.yaml
new file mode 100644
index 0000000000..5f60976746
--- /dev/null
+++
b/dev/charts/gravitino-iceberg-rest-server/templates/tests/test-connection.yaml
@@ -0,0 +1,62 @@
+{{- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */}}
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: {{ include "gravitino-iceberg-rest-server.fullname" .
}}-test-connection
+ namespace: {{ include "gravitino-iceberg-rest-server.namespace" . }}
+ annotations:
+ helm.sh/hook: test
+ helm.sh/hook-delete-policy: hook-succeeded
+spec:
+ containers:
+ - name: test-connection
+ image: curlimages/curl:latest
+ command:
+ - /bin/sh
+ - -c
+ - |
+ max_attempts=30
+ attempt=0
+ success=false
+
+ while [ $attempt -lt $max_attempts ]; do
+ response=$(curl -X GET -H "Content-Type: application/json"
http://${SERVICE_NAME}:${SERVICE_PORT}/iceberg/v1/config)
+ if echo "$response" | grep -q
"{\"defaults\":{},\"overrides\":{}}"; then
+ success=true
+ break
+ else
+ echo "Attempt $((attempt + 1)) failed..."
+ sleep 1
+ fi
+ attempt=$((attempt + 1))
+ done
+
+ if [ "$success" = true ]; then
+ exit 0
+ else
+ exit 1
+ fi
+ env:
+ - name: SERVICE_NAME
+ value: "{{ .Values.service.name }}"
+ - name: SERVICE_PORT
+ value: "{{ .Values.service.port }}"
+ restartPolicy: Never
diff --git a/dev/charts/gravitino-iceberg-rest-server/values.yaml
b/dev/charts/gravitino-iceberg-rest-server/values.yaml
new file mode 100644
index 0000000000..93c57a6951
--- /dev/null
+++ b/dev/charts/gravitino-iceberg-rest-server/values.yaml
@@ -0,0 +1,272 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+replicas: 1
+
+image:
+ repository: apache/gravitino-iceberg-rest
+ tag: latest
+ pullPolicy: IfNotPresent
+ ## Optionally specify an array of pullSecrets (secrets must be manually
created in the namespace)
+ ## ref:
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+ ## Example:
+ ## pullSecrets:
+ ## - myRegistryKeySecretName
+ ##
+ pullSecrets: []
+
+nameOverride: ""
+fullnameOverride: ""
+
+icebergRest:
+ # THE CONFIGURATION FOR Iceberg REST SERVER
+ shutdownTimeout: 3000
+ # THE CONFIGURATION FOR Iceberg REST WEB SERVER
+ # The host name of the built-in web server
+ host: 0.0.0.0
+ # The http port number of the built-in web server
+ httpPort: 9001
+ # The min thread size of the built-in web server
+ minThreads: 24
+ # The max thread size of the built-in web server
+ maxThreads: 200
+ # The stop timeout of the built-in web server
+ stopTimeout: 30000
+ # The timeout of idle connections
+ idleTimeout: 30000
+ # The executor thread pool work queue size of the built-in web server
+ threadPoolWorkQueueSize: 100
+ # The request header size of the built-in web server
+ requestHeaderSize: 131072
+ # The response header size of the built-in web server
+ responseHeaderSize: 131072
+ ## The backend Iceberg catalog for Iceberg REST service, it's recommended to
change to hive or jdbc
+ catalogBackend: memory
+ ## The warehouse directory of Iceberg catalog for Iceberg REST service
+ warehouse: /tmp/
+
+# Rest backend configs.
+additionalConfigItems: {}
+ ## THE CONFIGURATION EXAMPLE FOR JDBC CATALOG BACKEND WITH S3 SUPPORT
+ # gravitino.iceberg-rest.jdbc-driver: org.postgresql.Driver
+ # gravitino.iceberg-rest.uri: jdbc:postgresql://127.0.0.1:5432/postgres
+ # gravitino.iceberg-rest.jdbc-user: postgres
+ # gravitino.iceberg-rest.jdbc-password: abc123
+ # gravitino.iceberg-rest.jdbc-initialize: true
+ # change to s3a://test/my/key/prefix for Hive catalog backend
+ # gravitino.iceberg-rest.warehouse: s3://test/my/key/prefix
+ # gravitino.iceberg-rest.io-impl: org.apache.iceberg.aws.s3.S3FileIO
+ # gravitino.iceberg-rest.s3-access-key-id: xxx
+ # gravitino.iceberg-rest.s3-secret-access-key: xxx
+ # gravitino.iceberg-rest.s3-endpoint: http://192.168.215.4:9010
+ # gravitino.iceberg-rest.s3-region: xxx
+
+## Gravitino iceberg catalog server log4j2 configuration items in
log4j2.properties can be customized
+##
+log4j2Properties: {}
+ # status: warn
+
+ ## Log files location
+ # basePath: "${sys:gravitino.log.path}"
+ # serverName: "${sys:gravitino.server.name}"
+
+ ## RollingFileAppender name, pattern, path and rollover policy
+ # rollingAppenderType: RollingFile
+ # rollingAppenderName: fileLogger
+ # rollingAppenderFileName: "${basePath}/${serverName}.log"
+ # rollingAppenderFilePattern: "${basePath}/${serverName}_%d{yyyyMMdd}.log.gz"
+ # rollingAppenderLayoutType: PatternLayout
+ # rollingAppenderLayoutPattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%t]
[%l] - %msg%n"
+ # rollingAppenderPoliciesType: Policies
+
+ ## RollingFileAppender rotation policy
+ # rollingAppenderPoliciesSizeType: SizeBasedTriggeringPolicy
+ # rollingAppenderPoliciesSizeSize: 10MB
+ # rollingAppenderPoliciesTimeType: TimeBasedTriggeringPolicy
+ # rollingAppenderPoliciesTimeInterval: 1
+ # rollingAppenderPoliciesTimeModulate: true
+ # rollingAppenderStrategyType: DefaultRolloverStrategy
+ # rollingAppenderStrategyDeleteType: Delete
+ # rollingAppenderStrategyDeleteBasePath: "${basePath}"
+ # rollingAppenderStrategyDeleteMaxDepth: 10
+ # rollingAppenderStrategyDeleteIfLastModifiedType: IfLastModified
+
+ ## Delete all files older than 30 days
+ # rollingAppenderStrategyDeleteIfLastModifiedAge: 30d
+
+ ## Lineage log appender configurations
+ # lineageFileType: RollingFile
+ # lineageFileName: lineage_file
+ # lineageFileFileName: "${basePath}/gravitino_lineage.log"
+ # lineageFilePattern: "${basePath}/gravitino_lineage_%d{yyyyMMdd}.log.gz"
+ # lineageFileLayoutType: PatternLayout
+ # lineageFileLayoutPattern: "[%d{yyyy-MM-dd HH:mm:ss}] %m%n"
+
+ ## Rollover strategy configurations
+ # lineageFilePoliciesType: Policies
+ # lineageFilePoliciesTimeType: TimeBasedTriggeringPolicy
+ # lineageFilePoliciesTimeInterval: 1
+ # lineageFilePoliciesTimeModulate: true
+ # lineageFileStrategyType: DefaultRolloverStrategy
+ # lineageFileStrategyDeleteType: Delete
+ # lineageFileStrategyDeleteBasePath: "${basePath}"
+ # lineageFileStrategyDeleteMaxDepth: 10 # Consider reducing to 1 for
security (per previous optimization)
+ # lineageFileStrategyDeleteIfLastModifiedType: IfLastModified
+ # lineageFileStrategyDeleteIfLastModifiedAge: 30d
+
+ ## Lineage logger configurations
+ # lineageName: org.apache.gravitino.lineage.sink.LineageLogSink$LineageLogger
+ # lineageLevel: info
+ # lineageAppenderRefLineageFileRef: lineage_file
+ # lineageAdditivity: false
+
+ ## Configure root logger
+ # rootLoggerLevel: info
+ # rootLoggerAppenderRefRollingRef: fileLogger
+
+## Additional log4j2 configuration items in log4j2.properties can be added
+##
+additionalLog4j2Properties: {}
+ # appender.console.type: Console
+ # appender.console.name: console
+ # appender.console.layout.type: PatternLayout
+ # appender.console.layout.pattern: "%d{HH:mm:ss.SSS} %level %msg%n"
+ # rootLogger.appenderRef.console.ref: console
+
+## Hadoop configuration items in hdfs-site.xml and core-site.xml can be
customized
+coreSiteProperties: {}
+hdfsSiteProperties: {}
+
+serviceAccount:
+ # Specifies whether a service account should be created
+ create: false
+ # Annotations to add to the service account
+ annotations: {}
+ # The name of the service account to use.
+ # If not set and create is true, a name is generated using the fullname
template
+ name: ""
+
+annotations: {}
+
+podAnnotations: {}
+
+podSecurityContext: {}
+ # fsGroup: 2000
+
+## Container-specific security context configuration
+## ref:
https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
+##
+securityContext:
+ runAsNonRoot: false
+ runAsUser: 0
+ # capabilities:
+ # drop:
+ # - ALL
+ # readOnlyRootFilesystem: true
+ # runAsNonRoot: true
+ # runAsUser: 1000
+
+## Container Environment
+##
+env:
+ - name: GRAVITINO_HOME
+ value: /root/gravitino-iceberg-rest-server
+ - name: GRAVITINO_MEM
+ value: "-Xms1024m -Xmx1024m -XX:MaxMetaspaceSize=512m"
+
+# foo2: bar2
+envFrom: []
+
+service:
+ name: gravitino-iceberg-rest-server
+ type: ClusterIP
+ port: 9001
+ targetPort: 9001
+ annotations: {}
+ labels: {}
+ portName: http
+ nodePort: ""
+
+## Readiness probe for the Gravitino deployment
+##
+readinessProbe:
+ httpGet:
+ path: /iceberg/v1/config
+ port: http
+ initialDelaySeconds: 20
+ timeoutSeconds: 5
+
+## Liveness probe for the Gravitino deployment
+##
+livenessProbe:
+ httpGet:
+ path: /iceberg/v1/config
+ port: http
+ initialDelaySeconds: 20
+ timeoutSeconds: 5
+
+resources: {}
+ # We usually recommend not to specify default resources and to leave this as
a conscious
+ # choice for the user. This also increases chances charts run on
environments with little
+ # resources, such as Minikube. If you do want to specify resources,
uncomment the following
+ # lines, adjust them as necessary, and remove the curly braces after
'resources:'.
+ # limits:
+ # cpu: 100m
+ # memory: 128Mi
+ # requests:
+ # cpu: 100m
+ # memory: 128Mi
+
+## Additional volumes
+##
+extraVolumes:
+ - name: gravitino-rest-catalog-server-log
+ emptyDir: {}
+
+## Additional volume mounts
+##
+extraVolumeMounts:
+ - name: gravitino-rest-catalog-server-log
+ mountPath: /root/gravitino-iceberg-rest-server/logs
+
+ingress:
+ enabled: false
+ className: "nginx"
+ annotations: {}
+ # kubernetes.io/ingress.class: nginx
+ # kubernetes.io/tls-acme: "true"
+ # nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
+ # nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
+ # nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
+ hosts:
+ - host: gravitino-rest-catalog-server.local
+ paths:
+ - path: /
+ pathType: ImplementationSpecific
+ tls: []
+ # - secretName: chart-gravitino-tls
+ # hosts:
+ # - chart-gravitino.local
+
+
+nodeSelector: {}
+
+tolerations: []
+
+affinity: {}
diff --git a/docs/iceberg-rest-catalog-chart.md
b/docs/iceberg-rest-catalog-chart.md
new file mode 100644
index 0000000000..80aa97ddb4
--- /dev/null
+++ b/docs/iceberg-rest-catalog-chart.md
@@ -0,0 +1,81 @@
+---
+title: "Helm Chart"
+slug: /chart
+keyword: chart
+license: "This software is licensed under the Apache License version 2."
+---
+
+# Gravitino Iceberg Rest Catalog Server Helm Chart
+
+This Helm chart deploys Apache Gravitino Iceberg REST Catalog Server on
Kubernetes with customizable configurations.
+
+## Prerequisites
+
+- Kubernetes 1.29+
+- Helm 3+
+
+## Update Chart Dependency
+
+The Gravitino Iceberg REST Catalog Server Helm chart has not yet been
officially released.
+To proceed, please clone the repository, navigate to the chart directory
[charts](../dev/charts), and execute the Helm dependency update command.
+
+```console
+helm dependency update [CHART]
+```
+
+## View Chart values
+
+You can customize values.yaml parameters to override chart default settings.
Additionally, Gravitino Iceberg REST Catalog Server configurations in
[gravitino-iceberg-rest-server.conf](../dev/charts/gravitino-iceberg-rest-server/resources/gravitino-iceberg-rest-server.conf)
can be modified through Helm values.yaml.
+
+To display the default values of the Gravitino chart, run:
+
+```console
+helm show values [CHART]
+```
+
+## Install Helm Chart
+
+```console
+helm install [RELEASE_NAME] [CHART] [flags]
+```
+
+### Deploy with Default Configuration
+
+Run the following command to deploy Gravitino Iceberg REST Catalog Server
using the default settings, specify container image versions using --set
image.tag=x.y.z-incubating (replace x, y, z with the expected version numbers):
+
+```console
+helm upgrade --install gravitino ./gravitino-iceberg-rest-server \
+ -n gravitino \
+ --create-namespace \
+ --set image.tag=<x.y.z-incubating> \
+ --set replicas=2 \
+ --set resources.requests.memory="4Gi" \
+ --set resources.requests.cpu="2"
+```
+
+### Deploy with Custom Configuration
+
+To customize the deployment, use the --set flag to override specific values:
+
+```console
+helm upgrade --install gravitino ./gravitino-iceberg-rest-server
+ -n gravitino \
+ --create-namespace \
+ --set key1=val1,key2=val2,...
+```
+Alternatively, you can provide a custom values.yaml file:
+
+```console
+helm upgrade --install gravitino ./gravitino-iceberg-rest-server
+ -n gravitino \
+ --create-namespace \
+ -f /path/to/values.yaml
+```
+_Note: \
+The path '/path/to/values.yaml' refers to the actual path to the values.yaml
file._
+
+## Uninstall Helm Chart
+
+```console
+helm uninstall [RELEASE_NAME] -n [NAMESPACE]
+```
\ No newline at end of file