This is an automated email from the ASF dual-hosted git repository.
wanghailin pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new a1c90015d8 [Feature][K8S deploy] add helm chart (#8291)
a1c90015d8 is described below
commit a1c90015d8725ca1170c74aa6c118002ed36de47
Author: Daniel Duan <[email protected]>
AuthorDate: Tue Dec 24 19:16:30 2024 +0800
[Feature][K8S deploy] add helm chart (#8291)
---
.github/workflows/publish-helm-chart.yaml | 54 +++++++
deploy/kubernetes/seatunnel/Chart.yaml | 42 ++++++
.../seatunnel/conf/hazelcast-client.yaml | 27 ++++
.../seatunnel/conf/hazelcast-master.yaml | 46 ++++++
.../seatunnel/conf/hazelcast-worker.yaml | 50 +++++++
deploy/kubernetes/seatunnel/conf/log4j2.properties | 103 +++++++++++++
deploy/kubernetes/seatunnel/conf/seatunnel.yaml | 45 ++++++
deploy/kubernetes/seatunnel/templates/NOTES.txt | 66 +++++++++
deploy/kubernetes/seatunnel/templates/_helpers.tpl | 65 +++++++++
.../kubernetes/seatunnel/templates/configmap.yaml | 35 +++++
.../templates/deployment-seatunnel-master.yaml | 94 ++++++++++++
.../templates/deployment-seatunnel-worker.yaml | 91 ++++++++++++
deploy/kubernetes/seatunnel/templates/ingress.yaml | 60 ++++++++
deploy/kubernetes/seatunnel/templates/rbac.yaml | 53 +++++++
.../seatunnel/templates/service-headless.yaml | 33 +++++
.../templates/service-master-headless.yaml | 35 +++++
deploy/kubernetes/seatunnel/values.yaml | 160 +++++++++++++++++++++
docs/en/start-v2/kubernetes/helm.md | 80 +++++++++++
docs/zh/start-v2/kubernetes/helm.md | 80 +++++++++++
19 files changed, 1219 insertions(+)
diff --git a/.github/workflows/publish-helm-chart.yaml
b/.github/workflows/publish-helm-chart.yaml
new file mode 100644
index 0000000000..7eb2b2aaa8
--- /dev/null
+++ b/.github/workflows/publish-helm-chart.yaml
@@ -0,0 +1,54 @@
+# 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.
+
+name: publish-helm-chart
+
+on:
+ push:
+ tags:
+ - '*'
+ paths-ignore:
+ - 'docs/**'
+ - '**/*.md'
+
+env:
+ DOCKER_USERNAME: ${{ secrets.DOCKERHUB_USER }}
+ DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
+ DOCKER_REGISTRY: docker.io
+ HUB: registry-1.docker.io/apache
+
+jobs:
+ build:
+ if: github.repository == 'apache/seatunnel'
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
+ timeout-minutes: 30
+ steps:
+ - uses: actions/checkout@v4
+ - name: Log in to the Container registry
+ uses: docker/login-action@v3
+ with:
+ registry: ${{ env.DOCKER_REGISTRY }}
+ username: ${{ env.DOCKER_USERNAME }}
+ password: ${{ env.DOCKER_PASSWORD }}
+ - name: Publish Helm Chart
+ working-directory: deploy/kubernetes
+ run: |
+ helm dep up seatunnel
+ helm package seatunnel
+ helm push seatunnel-helm-*.tgz oci://${{ env.HUB }}
diff --git a/deploy/kubernetes/seatunnel/Chart.yaml
b/deploy/kubernetes/seatunnel/Chart.yaml
new file mode 100644
index 0000000000..dc843bef76
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/Chart.yaml
@@ -0,0 +1,42 @@
+#
+# 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: seatunnel-helm
+description: SeaTunnel is a next-generation, high-performance, distributed
data integration tool, capable of synchronizing vast amounts of data daily.
It's trusted by numerous companies for its efficiency and stability.
+home: https://seatunnel.apache.org
+icon: https://seatunnel.apache.org/image/logo.png
+keywords:
+ - seatunnel
+ - integration
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into
versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart
developer. They're included as
+# a dependency of application charts to inject those utilities and functions
into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be
deployed.
+type: application
+# This is the chart version. This version number should be incremented each
time you make changes
+# to the chart and its templates, including the app version.
+version: 2.3.9
+
+# This is the version number of the application being deployed. This version
number should be
+# incremented each time you make changes to the application.
+appVersion: 2.3.9
\ No newline at end of file
diff --git a/deploy/kubernetes/seatunnel/conf/hazelcast-client.yaml
b/deploy/kubernetes/seatunnel/conf/hazelcast-client.yaml
new file mode 100644
index 0000000000..ebd18db6b9
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/conf/hazelcast-client.yaml
@@ -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.
+#
+
+hazelcast-client:
+ cluster-name: {{ include "seatunnel.fullname" . }}
+ properties:
+ hazelcast.logging.type: log4j2
+ connection-strategy:
+ connection-retry:
+ cluster-connect-timeout-millis: 3000
+ network:
+ cluster-members:
+ - {{ include "seatunnel.fullname" . }}.{{ .Release.Namespace
}}.svc.cluster.local:5801
\ No newline at end of file
diff --git a/deploy/kubernetes/seatunnel/conf/hazelcast-master.yaml
b/deploy/kubernetes/seatunnel/conf/hazelcast-master.yaml
new file mode 100644
index 0000000000..3f1686cef8
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/conf/hazelcast-master.yaml
@@ -0,0 +1,46 @@
+#
+# 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.
+#
+
+hazelcast:
+ cluster-name: {{ include "seatunnel.fullname" . }}
+ network:
+ rest-api:
+ enabled: true
+ endpoint-groups:
+ CLUSTER_WRITE:
+ enabled: true
+ DATA:
+ enabled: true
+ join:
+ kubernetes:
+ enabled: true
+ service-dns: {{ include "seatunnel.fullname" . }}.{{
.Release.Namespace }}.svc.cluster.local
+ service-port: 5801
+ port:
+ auto-increment: false
+ port: 5801
+ properties:
+ hazelcast.invocation.max.retry.count: 20
+ hazelcast.tcp.join.port.try.count: 30
+ hazelcast.logging.type: log4j2
+ hazelcast.operation.generic.thread.count: 50
+ hazelcast.heartbeat.failuredetector.type: phi-accrual
+ hazelcast.heartbeat.interval.seconds: 2
+ hazelcast.max.no.heartbeat.seconds: 180
+ hazelcast.heartbeat.phiaccrual.failuredetector.threshold: 10
+ hazelcast.heartbeat.phiaccrual.failuredetector.sample.size: 200
+ hazelcast.heartbeat.phiaccrual.failuredetector.min.std.dev.millis: 100
\ No newline at end of file
diff --git a/deploy/kubernetes/seatunnel/conf/hazelcast-worker.yaml
b/deploy/kubernetes/seatunnel/conf/hazelcast-worker.yaml
new file mode 100644
index 0000000000..6d34ac29f2
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/conf/hazelcast-worker.yaml
@@ -0,0 +1,50 @@
+#
+# 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.
+#
+
+hazelcast:
+ cluster-name: {{ include "seatunnel.fullname" . }}
+ network:
+ rest-api:
+ enabled: true
+ endpoint-groups:
+ CLUSTER_WRITE:
+ enabled: true
+ DATA:
+ enabled: true
+ join:
+ kubernetes:
+ enabled: true
+ service-dns: {{ include "seatunnel.fullname" . }}.{{
.Release.Namespace }}.svc.cluster.local
+ service-port: 5801
+ port:
+ auto-increment: false
+ port: 5801
+ properties:
+ hazelcast.invocation.max.retry.count: 20
+ hazelcast.tcp.join.port.try.count: 30
+ hazelcast.logging.type: log4j2
+ hazelcast.operation.generic.thread.count: 50
+ hazelcast.heartbeat.failuredetector.type: phi-accrual
+ hazelcast.heartbeat.interval.seconds: 2
+ hazelcast.max.no.heartbeat.seconds: 180
+ hazelcast.heartbeat.phiaccrual.failuredetector.threshold: 10
+ hazelcast.heartbeat.phiaccrual.failuredetector.sample.size: 200
+ hazelcast.heartbeat.phiaccrual.failuredetector.min.std.dev.millis: 100
+ member-attributes:
+ rule:
+ type: string
+ value: worker
\ No newline at end of file
diff --git a/deploy/kubernetes/seatunnel/conf/log4j2.properties
b/deploy/kubernetes/seatunnel/conf/log4j2.properties
new file mode 100644
index 0000000000..9dd95de9e7
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/conf/log4j2.properties
@@ -0,0 +1,103 @@
+################################################################################
+# 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 minimum amount of time, in seconds, that must elapse before the file
configuration is checked for changes.
+monitorInterval = 60
+
+property.file_path = ${sys:seatunnel.logs.path:-/tmp/seatunnel/logs}
+property.file_name = ${sys:seatunnel.logs.file_name:-seatunnel}
+property.file_split_size = 100MB
+property.file_count = 100
+property.file_ttl = 7d
+
+rootLogger.level = INFO
+
+logger.zeta.name=org.apache.seatunnel.engine
+logger.zeta.level=INFO
+
+logger.debezium.name=io.debezium.connector
+logger.debezium.level=WARN
+
+############################ log output to console
#############################
+rootLogger.appenderRef.consoleStdout.ref = consoleStdoutAppender
+rootLogger.appenderRef.consoleStderr.ref = consoleStderrAppender
+############################ log output to console
#############################
+############################ log output to file
#############################
+#rootLogger.appenderRef.file.ref = fileAppender
+############################ log output to file
#############################
+
+appender.consoleStdout.name = consoleStdoutAppender
+appender.consoleStdout.type = CONSOLE
+appender.consoleStdout.target = SYSTEM_OUT
+appender.consoleStdout.layout.type = PatternLayout
+appender.consoleStdout.layout.pattern = [%X{ST-JID}] %d{yyyy-MM-dd
HH:mm:ss,SSS} %-5p [%-30.30c{1.}] [%t] - %m%n
+appender.consoleStdout.filter.acceptLtWarn.type = ThresholdFilter
+appender.consoleStdout.filter.acceptLtWarn.level = WARN
+appender.consoleStdout.filter.acceptLtWarn.onMatch = DENY
+appender.consoleStdout.filter.acceptLtWarn.onMismatch = ACCEPT
+
+appender.consoleStderr.name = consoleStderrAppender
+appender.consoleStderr.type = CONSOLE
+appender.consoleStderr.target = SYSTEM_ERR
+appender.consoleStderr.layout.type = PatternLayout
+appender.consoleStderr.layout.pattern = [%X{ST-JID}] %d{yyyy-MM-dd
HH:mm:ss,SSS} %-5p [%-30.30c{1.}] [%t] - %m%n
+appender.consoleStderr.filter.acceptGteWarn.type = ThresholdFilter
+appender.consoleStderr.filter.acceptGteWarn.level = WARN
+appender.consoleStderr.filter.acceptGteWarn.onMatch = ACCEPT
+appender.consoleStderr.filter.acceptGteWarn.onMismatch = DENY
+
+appender.routing.name = routingAppender
+appender.routing.type = Routing
+appender.routing.purge.type = IdlePurgePolicy
+appender.routing.purge.timeToLive = 60
+appender.routing.route.type = Routes
+appender.routing.route.pattern = $${ctx:ST-JID}
+appender.routing.route.system.type = Route
+appender.routing.route.system.key = $${ctx:ST-JID}
+appender.routing.route.system.ref = fileAppender
+appender.routing.route.job.type = Route
+appender.routing.route.job.appender.type = File
+appender.routing.route.job.appender.name = job-${ctx:ST-JID}
+appender.routing.route.job.appender.fileName =
${file_path}/job-${ctx:ST-JID}.log
+appender.routing.route.job.appender.layout.type = PatternLayout
+appender.routing.route.job.appender.layout.pattern = %d{yyyy-MM-dd
HH:mm:ss,SSS} %-5p [%-30.30c{1.}] [%t] - %m%n
+
+appender.file.name = fileAppender
+appender.file.type = RollingFile
+appender.file.fileName = ${file_path}/${file_name}.log
+appender.file.filePattern = ${file_path}/${file_name}.log.%d{yyyy-MM-dd}-%i
+appender.file.append = true
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = [%X{ST-JID}] %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p
[%-30.30c{1.}] [%t] - %m%n
+appender.file.policies.type = Policies
+appender.file.policies.time.type = TimeBasedTriggeringPolicy
+appender.file.policies.time.modulate = true
+appender.file.policies.size.type = SizeBasedTriggeringPolicy
+appender.file.policies.size.size = ${file_split_size}
+appender.file.strategy.type = DefaultRolloverStrategy
+appender.file.strategy.fileIndex = nomax
+appender.file.strategy.action.type = Delete
+appender.file.strategy.action.basepath = ${file_path}
+appender.file.strategy.action.maxDepth = 1
+appender.file.strategy.action.condition.type = IfFileName
+appender.file.strategy.action.condition.glob = ${file_name}.log*
+appender.file.strategy.action.condition.nested_condition.type = IfAny
+appender.file.strategy.action.condition.nested_condition.lastModify.type =
IfLastModified
+appender.file.strategy.action.condition.nested_condition.lastModify.age =
${file_ttl}
+appender.file.strategy.action.condition.nested_condition.fileCount.type =
IfAccumulatedFileCount
+appender.file.strategy.action.condition.nested_condition.fileCount.exceeds =
${file_count}
\ No newline at end of file
diff --git a/deploy/kubernetes/seatunnel/conf/seatunnel.yaml
b/deploy/kubernetes/seatunnel/conf/seatunnel.yaml
new file mode 100644
index 0000000000..e91fd50933
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/conf/seatunnel.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.
+#
+
+seatunnel:
+ engine:
+ history-job-expire-minutes: 1440
+ backup-count: 1
+ queue-type: blockingqueue
+ print-execution-info-interval: 60
+ print-job-metrics-info-interval: 60
+ classloader-cache-mode: true
+ slot-service:
+ dynamic-slot: true
+ http:
+ enable-http: true
+ port: 8080
+ enable-dynamic-port: false
+ port-range: 100
+ checkpoint:
+ interval: 300000
+ timeout: 10000
+ storage:
+ type: hdfs
+ max-retained: 3
+ plugin-config:
+ namespace: /tmp/seatunnel/checkpoint_snapshot/
+ storage.type: hdfs
+ fs.defaultFS: file:///tmp/
+ telemetry:
+ metric:
+ enabled: true
diff --git a/deploy/kubernetes/seatunnel/templates/NOTES.txt
b/deploy/kubernetes/seatunnel/templates/NOTES.txt
new file mode 100644
index 0000000000..d06fe5d3ba
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/templates/NOTES.txt
@@ -0,0 +1,66 @@
+{{/*
+ 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.
+*/}}
+
+** Please be patient while the chart seatunnel {{ .Chart.AppVersion }} is
being deployed **
+
+Access seatunnel UI URL by:
+
+{{- if .Values.ingress.enabled }}
+
+ seatunnel restapi URL for running jobs: http{{ if
.Values.ingress.tls.enabled }}s{{ end }}://{{ .Values.ingress.host
}}/running-jobs
+ seatunnel restapi URL for system monitoring information: http{{ if
.Values.ingress.tls.enabled }}s{{ end }}://{{ .Values.ingress.host
}}/system-monitoring-information
+
+ For more restapi please refer to https://seatunnel.apache.org/docs/{{
.Chart.AppVersion }}/seatunnel-engine/rest-api-v2
+
+{{- else if eq .Values.master.service.type "ClusterIP" }}
+
+ kubectl port-forward -n {{ .Release.Namespace }} svc/{{ template
"seatunnel.fullname" . }}-master 8080:8080
+
+ seatunnel restapi URL for running jobs: http://127.0.0.1:8080/running-jobs
+ seatunnel restapi URL for system monitoring information:
http://127.0.0.1:8080/system-monitoring-information
+
+ For more restapi please refer to https://seatunnel.apache.org/docs/{{
.Chart.AppVersion }}/seatunnel-engine/rest-api-v2
+
+
+{{- else if eq .Values.master.service.type "NodePort" }}
+
+ NODE_IP=$(kubectl get no -n {{ .Release.Namespace }} -o
jsonpath="{.items[0].status.addresses[0].address}")
+ NODE_PORT=$(kubectl get svc {{ template "seatunnel.fullname" . }}-master -n
{{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}")
+ seatunnel restapi URL for running jobs:
http://$NODE_IP:$NODE_PORT/running-jobs
+ seatunnel restapi URL for system monitoring information:
http://$NODE_IP:$NODE_PORT/system-monitoring-information
+
+ For more restapi please refer to https://seatunnel.apache.org/docs/{{
.Chart.AppVersion }}/seatunnel-engine/rest-api-v2
+{{- else if eq .Values.master.service.type "LoadBalancer" }}
+
+ NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+ You can watch the status of by running 'kubectl get svc {{ template
"seatunnel.fullname" . }}-master -n {{ .Release.Namespace }} -w'
+
+ SERVICE_IP=$(kubectl get svc {{ template "seatunnel.fullname" . }}-master -n
{{ .Release.Namespace }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
+ echo http://$SERVICE_IP:8080/running-jobs
+
+ seatunnel resetapi URL for running jobs: http://$SERVICE_IP:8080/running-jobs
+ seatunnel resetapi URL for system monitoring information:
http://$SERVICE_IP:8080/system-monitoring-information
+
+ For more restapi please refer to https://seatunnel.apache.org/docs/{{
.Chart.AppVersion }}/seatunnel-engine/rest-api-v2
+{{- end }}
+
+Or you can just go into master pod, and use local curl command.
+
+MASTER_POD=$(kubectl get po -l 'app.kubernetes.io/name=seatunnel-master' |
sed '1d' | awk '{print $1}' | head -n1)
+kubectl -n {{ .Release.Namespace }} exec -it $MASTER_POD -- /bin/bash
+curl http://127.0.0.1:8080/running-jobs
+curl http://127.0.0.1:8080/system-monitoring-information
\ No newline at end of file
diff --git a/deploy/kubernetes/seatunnel/templates/_helpers.tpl
b/deploy/kubernetes/seatunnel/templates/_helpers.tpl
new file mode 100644
index 0000000000..9f7c0846b2
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/templates/_helpers.tpl
@@ -0,0 +1,65 @@
+#
+# 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.
+#
+
+{{/* vim: set filetype=mustache: */}}
+
+{{/*
+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 "seatunnel.fullname" -}}
+{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create default docker images' fullname.
+*/}}
+{{- define "seatunnel.image.fullname.master" -}}
+{{- .Values.image.registry }}:{{ .Values.image.tag | default .Chart.AppVersion
-}}
+{{- end -}}
+{{- define "seatunnel.image.fullname.worker" -}}
+{{- .Values.image.registry }}:{{ .Values.image.tag | default .Chart.AppVersion
-}}
+{{- end -}}
+
+{{/*
+Create a default common labels.
+*/}}
+{{- define "seatunnel.common.labels" -}}
+app.kubernetes.io/instance: {{ .Release.Name }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+app.kubernetes.io/version: {{ .Chart.AppVersion }}
+
+{{- end -}}
+
+{{/*
+Create a master labels.
+*/}}
+{{- define "seatunnel.master.labels" -}}
+app.kubernetes.io/name: {{ include "seatunnel.fullname" . }}-master
+app.kubernetes.io/component: master
+{{ include "seatunnel.common.labels" . }}
+{{- end -}}
+
+{{/*
+Create a worker labels.
+*/}}
+{{- define "seatunnel.worker.labels" -}}
+app.kubernetes.io/name: {{ include "seatunnel.fullname" . }}-worker
+app.kubernetes.io/component: worker
+{{ include "seatunnel.common.labels" . }}
+{{- end -}}
diff --git a/deploy/kubernetes/seatunnel/templates/configmap.yaml
b/deploy/kubernetes/seatunnel/templates/configmap.yaml
new file mode 100644
index 0000000000..5eface25f6
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/templates/configmap.yaml
@@ -0,0 +1,35 @@
+#
+# 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 "seatunnel.fullname" . }}-configs
+ labels:
+ app.kubernetes.io/name: {{ include "seatunnel.fullname" . }}-configs
+ {{- include "seatunnel.master.labels" . | nindent 4 }}
+data:
+ hazelcast-master.yaml: |-
+ {{ tpl (.Files.Get "conf/hazelcast-master.yaml") $ | nindent 4 }}
+ hazelcast-worker.yaml: |-
+ {{ tpl (.Files.Get "conf/hazelcast-worker.yaml") $ | nindent 4 }}
+ hazelcast-client.yaml: |-
+ {{ tpl (.Files.Get "conf/hazelcast-client.yaml") $ | nindent 4 }}
+ seatunnel.yaml: |-
+ {{ tpl (.Files.Get "conf/seatunnel.yaml") $ | nindent 4 }}
+ log4j2.properties: |-
+ {{ tpl (.Files.Get "conf/log4j2.properties") $ | nindent 4 }}
+
diff --git
a/deploy/kubernetes/seatunnel/templates/deployment-seatunnel-master.yaml
b/deploy/kubernetes/seatunnel/templates/deployment-seatunnel-master.yaml
new file mode 100644
index 0000000000..517fc3ac53
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/templates/deployment-seatunnel-master.yaml
@@ -0,0 +1,94 @@
+#
+# 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: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "seatunnel.fullname" . }}-master
+ labels:
+ {{- include "seatunnel.master.labels" . | nindent 4 }}
+spec:
+ {{- if .Values.master.strategy }}
+ strategy:
+ {{- toYaml .Values.master.strategy | nindent 4 }}
+ {{- end }}
+ replicas: {{ .Values.master.replicas }}
+ selector:
+ matchLabels:
+ {{- include "seatunnel.master.labels" . | nindent 6 }}
+ template:
+ metadata:
+ {{- if .Values.master.annotations }}
+ annotations:
+ {{- toYaml .Values.master.annotations | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "seatunnel.master.labels" . | nindent 8 }}
+ spec:
+ serviceAccountName: {{ template "seatunnel.fullname" . }}
+ {{- if .Values.master.affinity }}
+ affinity:
+ {{- toYaml .Values.master.affinity | nindent 8 }}
+ {{- end }}
+ {{- if .Values.master.nodeSelector }}
+ nodeSelector:
+ {{- toYaml .Values.master.nodeSelector | nindent 8 }}
+ {{- end }}
+ {{- if .Values.master.tolerations }}
+ tolerations:
+ {{- toYaml .Values.master.tolerations | nindent 8 }}
+ {{- end }}
+ {{- if .Values.image.pullSecret }}
+ imagePullSecrets:
+ - name: {{ .Values.image.pullSecret }}
+ {{- end }}
+ containers:
+ - name: {{ include "seatunnel.fullname" . }}-master
+ image: {{ include "seatunnel.image.fullname.master" . }}
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ ports:
+ - containerPort: 5801
+ name: "hazelcast-port"
+ - containerPort: 8080
+ name: "master-port"
+ command: ["/bin/sh","-c","/opt/seatunnel/bin/seatunnel-cluster.sh -r
master"]
+ {{- if .Values.master.resources }}
+ resources:
+ {{- toYaml .Values.master.resources | nindent 12 }}
+ {{- end }}
+ {{- if .Values.master.livenessProbe.enabled }}
+ livenessProbe:
+ {{- toYaml .Values.master.livenessProbe | nindent 12 }}
+ {{- end }}
+ volumeMounts:
+ - mountPath: "/opt/seatunnel/config/hazelcast-master.yaml"
+ name: seatunnel-configs
+ subPath: hazelcast-master.yaml
+ - mountPath: "/opt/seatunnel/config/hazelcast-client.yaml"
+ name: seatunnel-configs
+ subPath: hazelcast-client.yaml
+ - mountPath: "/opt/seatunnel/config/seatunnel.yaml"
+ name: seatunnel-configs
+ subPath: seatunnel.yaml
+ - mountPath: "/opt/seatunnel/config/log4j2.properties"
+ name: seatunnel-configs
+ subPath: log4j2.properties
+ volumes:
+ - name: seatunnel-configs
+ configMap:
+ name: {{ include "seatunnel.fullname" . }}-configs
+
diff --git
a/deploy/kubernetes/seatunnel/templates/deployment-seatunnel-worker.yaml
b/deploy/kubernetes/seatunnel/templates/deployment-seatunnel-worker.yaml
new file mode 100644
index 0000000000..d56263f908
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/templates/deployment-seatunnel-worker.yaml
@@ -0,0 +1,91 @@
+#
+# 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: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "seatunnel.fullname" . }}-worker
+ labels:
+ {{- include "seatunnel.worker.labels" . | nindent 4 }}
+spec:
+ {{- if .Values.worker.strategy }}
+ strategy:
+ {{- toYaml .Values.worker.strategy | nindent 4 }}
+ {{- end }}
+ replicas: {{ .Values.worker.replicas }}
+ selector:
+ matchLabels:
+ {{- include "seatunnel.worker.labels" . | nindent 6 }}
+ template:
+ metadata:
+ {{- if .Values.worker.annotations }}
+ annotations:
+ {{- toYaml .Values.worker.annotations | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "seatunnel.worker.labels" . | nindent 8 }}
+ spec:
+ serviceAccountName: {{ template "seatunnel.fullname" . }}
+ {{- if .Values.worker.affinity }}
+ affinity:
+ {{- toYaml .Values.worker.affinity | nindent 8 }}
+ {{- end }}
+ {{- if .Values.worker.nodeSelector }}
+ nodeSelector:
+ {{- toYaml .Values.worker.nodeSelector | nindent 8 }}
+ {{- end }}
+ {{- if .Values.worker.tolerations }}
+ tolerations:
+ {{- toYaml .Values.worker.tolerations | nindent 8 }}
+ {{- end }}
+ {{- if .Values.image.pullSecret }}
+ imagePullSecrets:
+ - name: {{ .Values.image.pullSecret }}
+ {{- end }}
+ containers:
+ - name: {{ include "seatunnel.fullname" . }}-worker
+ image: {{ include "seatunnel.image.fullname.worker" . }}
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ ports:
+ - containerPort: 5801
+ name: "hazelcast-port"
+ command: ["/bin/sh","-c","/opt/seatunnel/bin/seatunnel-cluster.sh -r
worker"]
+ {{- if .Values.worker.resources }}
+ resources:
+ {{- toYaml .Values.worker.resources | nindent 12 }}
+ {{- end }}
+ {{- if .Values.worker.livenessProbe.enabled }}
+ livenessProbe:
+ {{- toYaml .Values.worker.livenessProbe | nindent 12 }}
+ {{- end }}
+ volumeMounts:
+ - mountPath: "/opt/seatunnel/config/hazelcast-worker.yaml"
+ name: seatunnel-configs
+ subPath: hazelcast-worker.yaml
+ - mountPath: "/opt/seatunnel/config/hazelcast-client.yaml"
+ name: seatunnel-configs
+ subPath: hazelcast-client.yaml
+ - mountPath: "/opt/seatunnel/config/seatunnel.yaml"
+ name: seatunnel-configs
+ subPath: seatunnel.yaml
+ - mountPath: "/opt/seatunnel/config/log4j2.properties"
+ name: seatunnel-configs
+ subPath: log4j2.properties
+ volumes:
+ - name: seatunnel-configs
+ configMap:
+ name: {{ include "seatunnel.fullname" . }}-configs
diff --git a/deploy/kubernetes/seatunnel/templates/ingress.yaml
b/deploy/kubernetes/seatunnel/templates/ingress.yaml
new file mode 100644
index 0000000000..97319a956d
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/templates/ingress.yaml
@@ -0,0 +1,60 @@
+#
+# 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 and .Values.ingress.enabled }}
+{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1/Ingress" }}
+apiVersion: networking.k8s.io/v1
+{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1/Ingress"
}}
+apiVersion: networking.k8s.io/v1beta1
+{{- else }}
+apiVersion: extensions/v1beta1
+{{- end }}
+kind: Ingress
+metadata:
+ name: {{ include "seatunnel.fullname" . }}
+ labels:
+ app.kubernetes.io/name: {{ include "seatunnel.fullname" . }}
+ {{- include "seatunnel.common.labels" . | nindent 4 }}
+ {{- with .Values.ingress.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ rules:
+ - host: "{{ .Values.ingress.host }}"
+ http:
+ paths:
+ - path: {{ .Values.ingress.path }}
+ backend:
+ {{- if .Capabilities.APIVersions.Has
"networking.k8s.io/v1/Ingress" }}
+ service:
+ name: {{ include "seatunnel.fullname" . }}-master
+ port:
+ number: 8080
+ {{- else }}
+ serviceName: {{ include "seatunnel.fullname" . }}-master
+ servicePort: 8080
+ {{- end }}
+ {{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1/Ingress"
}}
+ pathType: Prefix
+ {{- end }}
+ {{- if .Values.ingress.tls.enabled }}
+ tls:
+ - hosts:
+ - {{ .Values.ingress.host }}
+ secretName: {{ .Values.ingress.tls.secretName }}
+ {{- end }}
+{{- end }}
diff --git a/deploy/kubernetes/seatunnel/templates/rbac.yaml
b/deploy/kubernetes/seatunnel/templates/rbac.yaml
new file mode 100644
index 0000000000..6095b80893
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/templates/rbac.yaml
@@ -0,0 +1,53 @@
+# 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: ServiceAccount
+metadata:
+ labels:
+ app: {{ template "seatunnel.fullname" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version }}
+ release: {{ .Release.Name }}
+ name: {{ template "seatunnel.fullname" . }}
+---
+kind: Role
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: {{ template "seatunnel.fullname" . }}
+ labels:
+ app: {{ template "seatunnel.fullname" . }}
+ chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
+ release: "{{ .Release.Name }}"
+rules:
+ - apiGroups: [""]
+ resources: ["configmaps"]
+ verbs: ["get", "watch", "list"]
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: {{ template "seatunnel.fullname" . }}
+ labels:
+ app: {{ template "seatunnel.fullname" . }}
+ chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
+ release: "{{ .Release.Name }}"
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: {{ template "seatunnel.fullname" . }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ template "seatunnel.fullname" . }}
+ namespace: {{ .Release.Namespace }}
diff --git a/deploy/kubernetes/seatunnel/templates/service-headless.yaml
b/deploy/kubernetes/seatunnel/templates/service-headless.yaml
new file mode 100644
index 0000000000..be31c5dee0
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/templates/service-headless.yaml
@@ -0,0 +1,33 @@
+#
+# 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.
+#
+
+# use for hazelcast cluster join
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "seatunnel.fullname" . }}
+ labels:
+ {{- include "seatunnel.common.labels" . | nindent 4 }}
+ namespace: {{ .Values.namespace }}
+spec:
+ type: ClusterIP
+ clusterIP: None
+ ports:
+ - name: "hazelcast-port"
+ port: 5801
+ selector:
+ {{- include "seatunnel.common.labels" . | nindent 4 }}
diff --git a/deploy/kubernetes/seatunnel/templates/service-master-headless.yaml
b/deploy/kubernetes/seatunnel/templates/service-master-headless.yaml
new file mode 100644
index 0000000000..63aff3ba75
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/templates/service-master-headless.yaml
@@ -0,0 +1,35 @@
+#
+# 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.
+#
+---
+# use for access seatunnel from outside system via rest api
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "seatunnel.fullname" . }}-master
+ labels:
+ {{- include "seatunnel.master.labels" . | nindent 4 }}
+ namespace: {{ .Values.namespace }}
+spec:
+ clusterIP: "None"
+ ports:
+ - name: "master-port"
+ port: 8080
+ targetPort: 8080
+ protocol: TCP
+ selector:
+ {{- include "seatunnel.master.labels" . | nindent 4 }}
+---
diff --git a/deploy/kubernetes/seatunnel/values.yaml
b/deploy/kubernetes/seatunnel/values.yaml
new file mode 100644
index 0000000000..b5fd60b750
--- /dev/null
+++ b/deploy/kubernetes/seatunnel/values.yaml
@@ -0,0 +1,160 @@
+#
+# 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.
+#
+
+# Default values for seatunnel-chart.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+
+timezone: "Asia/Shanghai"
+
+
+image:
+ registry: "apache/seatunnel"
+ tag: ""
+ pullPolicy: "IfNotPresent"
+ pullSecret: ""
+
+master:
+ ## The deployment strategy to use to replace existing pods with new ones.
+ strategy:
+ type: RollingUpdate
+ rollingUpdate:
+ maxUnavailable: 25%
+ maxSurge: 50%
+
+ ## Replicas is the desired number of replicas of the given Template.
+ replicas: "2"
+ ## You can use annotations to attach arbitrary non-identifying metadata to
objects.
+ ## Clients such as tools and libraries can retrieve this metadata.
+ annotations:
+ prometheus.io/path: /hazelcast/rest/instance/metrics
+ prometheus.io/port: "5801"
+ prometheus.io/scrape: "true"
+ prometheus.io/role: "seatunnel-master"
+ ## Affinity is a group of affinity scheduling rules. If specified, the pod's
scheduling constraints.
+ ## More info:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#affinity-v1-core
+ affinity: {}
+ ## NodeSelector is a selector which must be true for the pod to fit on a
node.
+ ## Selector which must match a node's labels for the pod to be scheduled on
that node.
+ ## More info:
https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
+ nodeSelector: {}
+ ## Tolerations are appended (excluding duplicates) to pods running with this
RuntimeClass during admission,
+ ## effectively unioning the set of nodes tolerated by the pod and the
RuntimeClass.
+ tolerations: []
+ ## Compute Resources required by this container. Cannot be updated.
+ ## More info:
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container
+ resources: {}
+ # resources:
+ # limits:
+ # memory: "4Gi"
+ # cpu: "4"
+ # requests:
+ # memory: "2Gi"
+ # cpu: "500m"
+ ## Periodic probe of container liveness. Container will be restarted if the
probe fails. Cannot be updated.
+ ## More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+
+ ## service config for restApi
+ service:
+ type: "ClusterIP"
+
+ livenessProbe:
+ tcpSocket:
+ port: hazelcast-port
+ initialDelaySeconds: 30
+ periodSeconds: 30
+ timeoutSeconds: 5
+ failureThreshold: 3
+ successThreshold: 1
+ ## Periodic probe of container service readiness. Container will be removed
from service endpoints if the probe fails. Cannot be updated.
+ ## More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ readinessProbe:
+ enabled: true
+ initialDelaySeconds: 30
+ periodSeconds: 30
+ timeoutSeconds: 5
+ failureThreshold: 3
+ successThreshold: 1
+
+worker:
+ ## The deployment strategy to use to replace existing pods with new ones.
+ strategy:
+ type: RollingUpdate
+ rollingUpdate:
+ maxUnavailable: 25%
+ maxSurge: 50%
+
+ ## Replicas is the desired number of replicas of the given Template.
+ replicas: "2"
+ ## You can use annotations to attach arbitrary non-identifying metadata to
objects.
+ ## Clients such as tools and libraries can retrieve this metadata.
+ ## Add enable prometheus scrape for metrics collection.
+ annotations:
+ prometheus.io/path: /hazelcast/rest/instance/metrics
+ prometheus.io/port: "5801"
+ prometheus.io/scrape: "true"
+ prometheus.io/role: "seatunnel-worker"
+ ## Affinity is a group of affinity scheduling rules. If specified, the pod's
scheduling constraints.
+ ## More info:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#affinity-v1-core
+ affinity: {}
+ ## NodeSelector is a selector which must be true for the pod to fit on a
node.
+ ## Selector which must match a node's labels for the pod to be scheduled on
that node.
+ ## More info:
https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
+ nodeSelector: {}
+ ## Tolerations are appended (excluding duplicates) to pods running with this
RuntimeClass during admission,
+ ## effectively unioning the set of nodes tolerated by the pod and the
RuntimeClass.
+ tolerations: []
+ ## Compute Resources required by this container. Cannot be updated.
+ ## More info:
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container
+ resources: {}
+ # resources:
+ # limits:
+ # memory: "4Gi"
+ # cpu: "4"
+ # requests:
+ # memory: "2Gi"
+ # cpu: "500m"
+ ## Periodic probe of container liveness. Container will be restarted if the
probe fails. Cannot be updated.
+ ## More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+
+
+ livenessProbe:
+ tcpSocket:
+ port: hazelcast-port
+ initialDelaySeconds: 30
+ periodSeconds: 30
+ timeoutSeconds: 5
+ failureThreshold: 3
+ successThreshold: 1
+ ## Periodic probe of container service readiness. Container will be removed
from service endpoints if the probe fails. Cannot be updated.
+ ## More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ readinessProbe:
+ enabled: true
+ initialDelaySeconds: "30"
+ periodSeconds: "30"
+ timeoutSeconds: "5"
+ failureThreshold: "3"
+ successThreshold: "1"
+
+ingress:
+ enabled: false
+ host: "seatunnel.org"
+ path: "/"
+ annotations: {}
+ tls:
+ enabled: false
+ secretName: "seatunnel-tls"
diff --git a/docs/en/start-v2/kubernetes/helm.md
b/docs/en/start-v2/kubernetes/helm.md
new file mode 100644
index 0000000000..eebfda3c97
--- /dev/null
+++ b/docs/en/start-v2/kubernetes/helm.md
@@ -0,0 +1,80 @@
+---
+sidebar_position: 4
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Set Up with Helm
+
+This section provides a quick guide to use SeaTunnel with Helm.
+
+## Prerequisites
+
+We assume that you have one local installation as follow:
+
+- [docker](https://docs.docker.com/)
+- [kubernetes](https://kubernetes.io/)
+- [helm](https://helm.sh/docs/intro/quickstart/)
+
+So that the `kubectl` and `helm` commands are available on your local system.
+
+Take kubernetes [minikube](https://minikube.sigs.k8s.io/docs/start/) as an
example, you can start a cluster with the following command:
+
+```bash
+minikube start --kubernetes-version=v1.23.3
+```
+
+## Install
+
+Install with default settings.
+```bash
+# Choose the corresponding version yourself
+export VERSION=2.3.9
+helm pull oci://registry-1.docker.io/apache/seatunnel-helm --version ${VERSION}
+tar -xvf seatunnel-helm-${VERSION}.tgz
+cd seatunnel-helm
+helm install seatunnel .
+```
+Install with another namespace.
+```bash
+helm install seatunnel . -n <your namespace>
+```
+
+## Submit Job
+
+The default config doesn't enable ingress, so you need forward the master
restapi.
+```bash
+kubectl port-forward -n default svc/seatunnel-master 5801:5801
+```
+Then you can access restapi with "http://127.0.0.1/5801/"
+
+If you want to use ingress, update `value.yaml`
+
+for example:
+```commandline
+ingress:
+ enabled: true
+ host: "<your domain>"
+```
+Then upgrade seatunnel.
+
+Then you can access restapi with `http://<your domain>`
+
+Or you can just go into master pod, and use local curl command.
+```commandline
+# get one of the master pods
+MASTER_POD=$(kubectl get po -l 'app.kubernetes.io/name=seatunnel-master' |
sed '1d' | awk '{print $1}' | head -n1)
+# go into master pod container.
+kubectl -n default exec -it $MASTER_POD -- /bin/bash
+
+curl http://127.0.0.1:5801/running-jobs
+curl http://127.0.0.1:5801/system-monitoring-information
+```
+
+After that you can submit your job by
[rest-api-v2](../../seatunnel-engine/rest-api-v2.md)
+
+## What's More
+
+For now, you have taken a quick look at SeaTunnel, and you can see
[connector](../../connector-v2) to find all sources and sinks SeaTunnel
supported.
+Or see [deployment](../../seatunnel-engine/deployment.md) if you want to
submit your application in another kind of your engine cluster.
diff --git a/docs/zh/start-v2/kubernetes/helm.md
b/docs/zh/start-v2/kubernetes/helm.md
new file mode 100644
index 0000000000..e0d6c60aca
--- /dev/null
+++ b/docs/zh/start-v2/kubernetes/helm.md
@@ -0,0 +1,80 @@
+---
+sidebar_position: 4
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# 使用Helm部署
+
+使用Helm快速部署Seatunnel集群。
+
+## 准备
+
+我们假设您的本地已经安装如下软件:
+
+- [docker](https://docs.docker.com/)
+- [kubernetes](https://kubernetes.io/)
+- [helm](https://helm.sh/docs/intro/quickstart/)
+
+在您的本地环境中能够正常执行`kubectl`和`helm`命令。
+
+以 [minikube](https://minikube.sigs.k8s.io/docs/start/) 为例, 您可以使用如下命令启动一个集群:
+
+```bash
+minikube start --kubernetes-version=v1.23.3
+```
+
+## 安装
+
+使用默认配置安装
+```bash
+# Choose the corresponding version yourself
+export VERSION=2.3.9
+helm pull oci://registry-1.docker.io/apache/seatunnel-helm --version ${VERSION}
+tar -xvf seatunnel-helm-${VERSION}.tgz
+cd seatunnel-helm
+helm install seatunnel .
+```
+
+如果您需要使用其他命名空间进行安装。
+```
+helm install seatunnel . -n <your namespace>
+```
+
+## 提交任务
+
+当前默认的配置没有启用ingress,所以需要使用转发命令将master的restapi端口转发出来。
+```bash
+kubectl port-forward -n default svc/seatunnel-master 5801:5801
+```
+然后可以通过地址 "http://127.0.0.1/5801/" 访问master的restapi。
+
+如果想要使用ingress, 需要更新 `value.yaml`
+
+例如:
+```commandline
+ingress:
+ enabled: true
+ host: "<your domain>"
+```
+然后更新seatunnel。
+
+就可以使用域名`http://<your domain>`进行访问了。
+
+或者您可以直接进入master的POD执行curl命令。.
+```commandline
+# 获取其中一个master pod
+MASTER_POD=$(kubectl get po -l 'app.kubernetes.io/name=seatunnel-master' |
sed '1d' | awk '{print $1}' | head -n1)
+# 进入master pod
+kubectl -n default exec -it $MASTER_POD -- /bin/bash
+# 执行 restapi
+curl http://127.0.0.1:5801/running-jobs
+curl http://127.0.0.1:5801/system-monitoring-information
+```
+
+后面就可以使用[rest-api-v2](../../seatunnel-engine/rest-api-v2.md)提交任务了。
+
+## 下一步
+到现在为止,您已经安装好Seatunnel集群了,你可以查看Seatunnel有哪些[连接器](../../connector-v2).
+或者选择其他方式 [部署](../../seatunnel-engine/deployment.md).