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

Reply via email to