This is an automated email from the ASF dual-hosted git repository.
hanahmily pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb-helm.git
The following commit(s) were added to refs/heads/master by this push:
new a0d7ca4 Add the FODC Agent and Proxy components to the Helm chart
(#45)
a0d7ca4 is described below
commit a0d7ca4fc2e431368c70d2418ae477548afd270b
Author: Fine0830 <[email protected]>
AuthorDate: Wed Jan 14 13:31:38 2026 +0800
Add the FODC Agent and Proxy components to the Helm chart (#45)
* add FODC Proxy component to the Helm char
---
.github/workflows/e2e.ci.yaml | 2 +
CHANGES.md | 4 +
chart/templates/NOTES.txt | 16 ++
chart/templates/cluster_data_statefulset.yaml | 80 ++++++
chart/templates/cluster_fodc_proxy_deployment.yaml | 172 +++++++++++++
chart/templates/cluster_fodc_proxy_service.yaml | 85 ++++++
chart/templates/cluster_liaison_statefulset.yaml | 93 ++++++-
chart/templates/ingress.yaml | 48 ++++
chart/templates/pdb.yaml | 27 ++
chart/templates/standalone_statefulset.yaml | 103 ++++++++
chart/values-lifecycle.yaml | 196 ++++++++++++++
chart/values.yaml | 197 ++++++++++++++
doc/parameters.md | 99 ++++++-
test/e2e/e2e-banyandb-fodc-proxy-service.yaml | 121 +++++++++
test/e2e/env | 2 +-
test/e2e/values.cluster.yaml | 3 +
test/e2e/values.dns.registry.yaml | 2 +
.../{values.lifecycle.yaml => values.fodc.yaml} | 285 ++++++++++-----------
test/e2e/values.lifecycle.yaml | 3 +
19 files changed, 1380 insertions(+), 158 deletions(-)
diff --git a/.github/workflows/e2e.ci.yaml b/.github/workflows/e2e.ci.yaml
index 2157249..208b2c7 100644
--- a/.github/workflows/e2e.ci.yaml
+++ b/.github/workflows/e2e.ci.yaml
@@ -41,6 +41,8 @@ jobs:
config: test/e2e/e2e-banyandb-cluster.yaml
- name: Run Skywalking E2E Test (BanyanDB lifecycle as database)
config: test/e2e/e2e-banyandb-lifecycle.yaml
+ - name: Run Skywalking E2E Test (FODC Proxy Service)
+ config: test/e2e/e2e-banyandb-fodc-proxy-service.yaml
- name: Run Skywalking E2E Test (BanyanDB DNS node registry)
config: test/e2e/e2e-banyandb-node-registry-dns.yaml
name: ${{ matrix.test.name }}
diff --git a/CHANGES.md b/CHANGES.md
index 2fbcfbb..9759da3 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -12,6 +12,10 @@ Release Notes.
0.5.3
-----------------
+#### Features
+
+- Add the FODC Agent and Proxy components to the Helm chart.
+
#### Bugs
- Fix missing port in data node list for liaison.
diff --git a/chart/templates/NOTES.txt b/chart/templates/NOTES.txt
index dc20101..725f9e5 100644
--- a/chart/templates/NOTES.txt
+++ b/chart/templates/NOTES.txt
@@ -13,6 +13,22 @@
Note: adjust the key if you changed `auth.credentialsFileKey`.
{{- end }}
+
+{{- if and .Values.cluster.enabled .Values.cluster.fodc.enabled }}
+FODC (First Occurrence Data Collection) Proxy is enabled.
+
+The FODC Proxy provides:
+- Agent registry
+- Aggregated metrics endpoints (/metrics, /metrics-windows)
+
+Services:
+- gRPC (Agent connections): {{ template "banyandb.fullname" .
}}-fodc-proxy-grpc:{{ .Values.cluster.fodc.proxy.grpcSvc.port }}
+- HTTP (Metrics & APIs): {{ template "banyandb.fullname" .
}}-fodc-proxy-http:{{ .Values.cluster.fodc.proxy.httpSvc.port }}
+
+To access the FODC Proxy metrics:
+ kubectl port-forward svc/{{ template "banyandb.fullname" .
}}-fodc-proxy-http -n {{ .Release.Namespace }} {{
.Values.cluster.fodc.proxy.httpSvc.port }}:{{
.Values.cluster.fodc.proxy.httpSvc.port }}
+ curl http://localhost:{{ .Values.cluster.fodc.proxy.httpSvc.port }}/metrics
+{{- end }}
{{/*
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
diff --git a/chart/templates/cluster_data_statefulset.yaml
b/chart/templates/cluster_data_statefulset.yaml
index 6bc33de..18af49b 100644
--- a/chart/templates/cluster_data_statefulset.yaml
+++ b/chart/templates/cluster_data_statefulset.yaml
@@ -298,6 +298,86 @@ spec:
readOnly: true
{{- end }}
{{- end }}
+ {{- if and $.Values.cluster.enabled $.Values.cluster.fodc.enabled }}
+ - name: fodc-agent
+ image: {{ $.Values.cluster.fodc.agent.image.repository }}:{{ default
$.Values.image.tag $.Values.cluster.fodc.agent.image.tag }}
+ imagePullPolicy: {{ $.Values.cluster.fodc.agent.image.pullPolicy }}
+ {{- with $.Values.cluster.fodc.agent.containerSecurityContext }}
+ securityContext:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ args:
+ - --proxy-addr={{ template "banyandb.fullname" $
}}-fodc-proxy-grpc:{{ $.Values.cluster.fodc.proxy.grpcSvc.port }}
+ - --node-ip=127.0.0.1
+ - --node-port={{ $.Values.cluster.data.nodeTemplate.grpcSvc.port }}
+ - --node-role=datanode-{{ $roleName }}
+ - --metrics-endpoint=http://127.0.0.1:2121/metrics
+ - --poll-metrics-interval={{
$.Values.cluster.fodc.agent.config.scrapeInterval }}
+ - --prometheus-listen-addr=:{{
$.Values.cluster.fodc.agent.httpPort }}
+ - --max-metrics-memory-usage-percentage={{
$.Values.cluster.fodc.agent.config.ktmEnabled | ternary 10 5 }}
+ - --heartbeat-interval={{
$.Values.cluster.fodc.agent.config.heartbeatInterval }}
+ - --reconnect-interval={{
$.Values.cluster.fodc.agent.config.reconnectInterval }}
+ env:
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ {{- range $env := $.Values.cluster.fodc.agent.env }}
+ - name: {{ $env.name }}
+ value: {{ $env.value }}
+ {{- end }}
+ ports:
+ - name: fodc-agent-grpc
+ containerPort: {{ $.Values.cluster.fodc.agent.grpcPort }}
+ - name: fodc-agent-http
+ containerPort: {{ $.Values.cluster.fodc.agent.httpPort }}
+ startupProbe:
+ httpGet:
+ path: /metrics
+ port: {{ $.Values.cluster.fodc.agent.httpPort }}
+ initialDelaySeconds: {{
$.Values.cluster.fodc.agent.startupProbe.initialDelaySeconds }}
+ periodSeconds: {{
$.Values.cluster.fodc.agent.startupProbe.periodSeconds }}
+ timeoutSeconds: {{
$.Values.cluster.fodc.agent.startupProbe.timeoutSeconds }}
+ successThreshold: {{
$.Values.cluster.fodc.agent.startupProbe.successThreshold }}
+ failureThreshold: {{
$.Values.cluster.fodc.agent.startupProbe.failureThreshold }}
+ readinessProbe:
+ httpGet:
+ path: /metrics
+ port: {{ $.Values.cluster.fodc.agent.httpPort }}
+ initialDelaySeconds: {{
$.Values.cluster.fodc.agent.readinessProbe.initialDelaySeconds }}
+ periodSeconds: {{
$.Values.cluster.fodc.agent.readinessProbe.periodSeconds }}
+ timeoutSeconds: {{
$.Values.cluster.fodc.agent.readinessProbe.timeoutSeconds }}
+ successThreshold: {{
$.Values.cluster.fodc.agent.readinessProbe.successThreshold }}
+ failureThreshold: {{
$.Values.cluster.fodc.agent.readinessProbe.failureThreshold }}
+ livenessProbe:
+ httpGet:
+ path: /metrics
+ port: {{ $.Values.cluster.fodc.agent.httpPort }}
+ initialDelaySeconds: {{
$.Values.cluster.fodc.agent.livenessProbe.initialDelaySeconds }}
+ periodSeconds: {{
$.Values.cluster.fodc.agent.livenessProbe.periodSeconds }}
+ timeoutSeconds: {{
$.Values.cluster.fodc.agent.livenessProbe.timeoutSeconds }}
+ successThreshold: {{
$.Values.cluster.fodc.agent.livenessProbe.successThreshold }}
+ failureThreshold: {{
$.Values.cluster.fodc.agent.livenessProbe.failureThreshold }}
+ {{- with $.Values.cluster.fodc.agent.resources }}
+ resources:
+ {{- if .requests }}
+ requests:
+ {{- range $request := .requests }}
+ {{ $request.key }}: {{ $request.value }}
+ {{- end }}
+ {{- end }}
+ {{- if .limits }}
+ limits:
+ {{- range $limit := .limits }}
+ {{ $limit.key }}: {{ $limit.value }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
{{- if $roleConfig.backupSidecar.enabled }}
- name: backup
image: {{ $.Values.image.repository }}:{{ required
"banyandb.image.tag is required" $.Values.image.tag }}-slim
diff --git a/chart/templates/cluster_fodc_proxy_deployment.yaml
b/chart/templates/cluster_fodc_proxy_deployment.yaml
new file mode 100644
index 0000000..bf423f7
--- /dev/null
+++ b/chart/templates/cluster_fodc_proxy_deployment.yaml
@@ -0,0 +1,172 @@
+{{/*
+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.cluster.enabled .Values.cluster.fodc.enabled }}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ template "banyandb.fullname" . }}-fodc-proxy
+ labels:
+{{ include "banyandb.labels" . | nindent 4 }}
+ app.kubernetes.io/component: fodc-proxy
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+{{ include "banyandb.selectorLabels" . | nindent 6 }}
+ app.kubernetes.io/component: fodc-proxy
+ strategy:
+ type: RollingUpdate
+ rollingUpdate:
+ maxUnavailable: 1
+ maxSurge: 1
+ template:
+ metadata:
+ labels:
+{{ include "banyandb.labels" . | nindent 8 }}
+ app.kubernetes.io/component: fodc-proxy
+{{- if .Values.cluster.fodc.proxy.podAnnotations }}
+ annotations:
+{{ toYaml .Values.cluster.fodc.proxy.podAnnotations | indent 6 }}
+{{- end }}
+ spec:
+ serviceAccountName: {{ template "banyandb.serviceAccountName" . }}
+{{- with .Values.cluster.fodc.proxy.securityContext }}
+ securityContext:
+{{ toYaml . | nindent 6 }}
+{{- end }}
+ priorityClassName: {{ .Values.cluster.fodc.proxy.priorityClassName }}
+ containers:
+ - name: fodc-proxy
+ image: {{ .Values.cluster.fodc.proxy.image.repository }}:{{ default
.Values.image.tag .Values.cluster.fodc.proxy.image.tag }}
+ imagePullPolicy: {{ .Values.cluster.fodc.proxy.image.pullPolicy }}
+{{- with .Values.cluster.fodc.proxy.containerSecurityContext }}
+ securityContext:
+{{ toYaml . | nindent 12 }}
+{{- end }}
+ env:
+{{- range $env := .Values.cluster.fodc.proxy.env }}
+ - name: {{ $env.name }}
+ value: {{ $env.value | quote }}
+{{- end }}
+ args:
+ - --grpc-listen-addr=:{{ .Values.cluster.fodc.proxy.grpcSvc.port }}
+ - --http-listen-addr=:{{ .Values.cluster.fodc.proxy.httpSvc.port }}
+ - --agent-heartbeat-timeout={{
.Values.cluster.fodc.proxy.config.agentHeartbeatTimeout }}
+ - --agent-cleanup-timeout={{
.Values.cluster.fodc.proxy.config.agentCleanupTimeout }}
+ - --max-agents={{ .Values.cluster.fodc.proxy.config.maxAgents }}
+ - --http-read-timeout={{
.Values.cluster.fodc.proxy.config.httpReadTimeout }}
+ - --http-write-timeout={{
.Values.cluster.fodc.proxy.config.httpWriteTimeout }}
+ - --heartbeat-interval={{
.Values.cluster.fodc.proxy.config.heartbeatInterval }}
+ ports:
+ - name: grpc
+ containerPort: {{ .Values.cluster.fodc.proxy.grpcSvc.port }}
+ - name: http
+ containerPort: {{ .Values.cluster.fodc.proxy.httpSvc.port }}
+ readinessProbe:
+ httpGet:
+ path: /metrics
+ port: {{ .Values.cluster.fodc.proxy.httpSvc.port }}
+ initialDelaySeconds: {{
.Values.cluster.fodc.proxy.readinessProbe.initialDelaySeconds }}
+ periodSeconds: {{
.Values.cluster.fodc.proxy.readinessProbe.periodSeconds }}
+ timeoutSeconds: {{
.Values.cluster.fodc.proxy.readinessProbe.timeoutSeconds }}
+ successThreshold: {{
.Values.cluster.fodc.proxy.readinessProbe.successThreshold }}
+ failureThreshold: {{
.Values.cluster.fodc.proxy.readinessProbe.failureThreshold }}
+ livenessProbe:
+ httpGet:
+ path: /metrics
+ port: {{ .Values.cluster.fodc.proxy.httpSvc.port }}
+ initialDelaySeconds: {{
.Values.cluster.fodc.proxy.livenessProbe.initialDelaySeconds }}
+ periodSeconds: {{
.Values.cluster.fodc.proxy.livenessProbe.periodSeconds }}
+ timeoutSeconds: {{
.Values.cluster.fodc.proxy.livenessProbe.timeoutSeconds }}
+ successThreshold: {{
.Values.cluster.fodc.proxy.livenessProbe.successThreshold }}
+ failureThreshold: {{
.Values.cluster.fodc.proxy.livenessProbe.failureThreshold }}
+ startupProbe:
+ httpGet:
+ path: /metrics
+ port: {{ .Values.cluster.fodc.proxy.httpSvc.port }}
+ initialDelaySeconds: {{
.Values.cluster.fodc.proxy.startupProbe.initialDelaySeconds }}
+ periodSeconds: {{
.Values.cluster.fodc.proxy.startupProbe.periodSeconds }}
+ timeoutSeconds: {{
.Values.cluster.fodc.proxy.startupProbe.timeoutSeconds }}
+ successThreshold: {{
.Values.cluster.fodc.proxy.startupProbe.successThreshold }}
+ failureThreshold: {{
.Values.cluster.fodc.proxy.startupProbe.failureThreshold }}
+
+ {{- if and .Values.cluster.fodc.proxy.resources (or
.Values.cluster.fodc.proxy.resources.requests
.Values.cluster.fodc.proxy.resources.limits) }}
+ resources:
+{{ toYaml .Values.cluster.fodc.proxy.resources | indent 8 }}
+ {{- end }}
+
+ {{- if .Values.cluster.fodc.proxy.tolerations }}
+ tolerations:
+ {{- range $toleration := .Values.cluster.fodc.proxy.tolerations }}
+ - key: {{ $toleration.key }}
+ operator: {{ $toleration.operator }}
+ value: {{ $toleration.value }}
+ effect: {{ $toleration.effect }}
+ {{- end }}
+ {{- end }}
+
+ {{- if .Values.cluster.fodc.proxy.nodeSelector }}
+ nodeSelector:
+ {{- range $selector := .Values.cluster.fodc.proxy.nodeSelector }}
+ {{ $selector.key }}: {{ $selector.value }}
+ {{- end }}
+ {{- end }}
+
+ {{- if .Values.cluster.fodc.proxy.affinity }}
+ affinity:
+{{ toYaml .Values.cluster.fodc.proxy.affinity | nindent 6 }}
+ {{- else if or .Values.cluster.fodc.proxy.podAffinityPreset
.Values.cluster.fodc.proxy.podAntiAffinityPreset }}
+ affinity:
+ {{- if and .Values.cluster.fodc.proxy.podAffinityPreset (not (empty
.Values.cluster.fodc.proxy.podAffinityPreset)) }}
+ podAffinity:
+ {{- if eq .Values.cluster.fodc.proxy.podAffinityPreset "soft" }}
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - weight: 100
+ podAffinityTerm:
+ labelSelector:
+ matchLabels:
+{{ include "banyandb.selectorLabels" . | nindent 20 }}
+ topologyKey: kubernetes.io/hostname
+ {{- else if eq .Values.cluster.fodc.proxy.podAffinityPreset "hard" }}
+ requiredDuringSchedulingIgnoredDuringExecution:
+ - labelSelector:
+ matchLabels:
+{{ include "banyandb.selectorLabels" . | nindent 18 }}
+ topologyKey: kubernetes.io/hostname
+ {{- end }}
+ {{- end }}
+ {{- if and .Values.cluster.fodc.proxy.podAntiAffinityPreset (not
(empty .Values.cluster.fodc.proxy.podAntiAffinityPreset)) }}
+ podAntiAffinity:
+ {{- if eq .Values.cluster.fodc.proxy.podAntiAffinityPreset "soft" }}
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - weight: 100
+ podAffinityTerm:
+ labelSelector:
+ matchLabels:
+{{ include "banyandb.selectorLabels" . | nindent 20 }}
+ topologyKey: kubernetes.io/hostname
+ {{- else if eq .Values.cluster.fodc.proxy.podAntiAffinityPreset
"hard" }}
+ requiredDuringSchedulingIgnoredDuringExecution:
+ - labelSelector:
+ matchLabels:
+{{ include "banyandb.selectorLabels" . | nindent 18 }}
+ topologyKey: kubernetes.io/hostname
+ {{- end }}
+ {{- end }}
+ {{- end }}
+{{- end }}
diff --git a/chart/templates/cluster_fodc_proxy_service.yaml
b/chart/templates/cluster_fodc_proxy_service.yaml
new file mode 100644
index 0000000..bca235c
--- /dev/null
+++ b/chart/templates/cluster_fodc_proxy_service.yaml
@@ -0,0 +1,85 @@
+{{/*
+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.cluster.enabled .Values.cluster.fodc.enabled }}
+{{- if .Values.cluster.fodc.proxy.grpcSvc }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "banyandb.fullname" . }}-fodc-proxy-grpc
+ labels:
+{{ include "banyandb.labels" . | nindent 4 }}
+ app.kubernetes.io/component: fodc-proxy
+ {{- range $key, $value := .Values.cluster.fodc.proxy.grpcSvc.labels }}
+ {{ $key }}: {{ $value | quote }}
+ {{- end }}
+ annotations:
+ {{- range $key, $value := .Values.cluster.fodc.proxy.grpcSvc.annotations }}
+ {{ $key }}: {{ $value | quote }}
+ {{- end }}
+spec:
+ type: ClusterIP
+ ports:
+ - port: {{ .Values.cluster.fodc.proxy.grpcSvc.port }}
+ name: grpc
+ targetPort: grpc
+ selector:
+{{ include "banyandb.selectorLabels" . | nindent 4 }}
+ app.kubernetes.io/component: fodc-proxy
+{{- end }}
+{{- if .Values.cluster.fodc.proxy.httpSvc }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "banyandb.fullname" . }}-fodc-proxy-http
+ labels:
+{{ include "banyandb.labels" . | nindent 4 }}
+ app.kubernetes.io/component: fodc-proxy
+ {{- range $key, $value := .Values.cluster.fodc.proxy.httpSvc.labels }}
+ {{ $key }}: {{ $value | quote }}
+ {{- end }}
+ annotations:
+ {{- range $key, $value := .Values.cluster.fodc.proxy.httpSvc.annotations }}
+ {{ $key }}: {{ $value | quote }}
+ {{- end }}
+spec:
+ type: {{ .Values.cluster.fodc.proxy.httpSvc.type }}
+ ports:
+ - port: {{ .Values.cluster.fodc.proxy.httpSvc.port }}
+ name: http
+ targetPort: http
+ selector:
+{{ include "banyandb.selectorLabels" . | nindent 4 }}
+ app.kubernetes.io/component: fodc-proxy
+ {{- if .Values.cluster.fodc.proxy.httpSvc.externalIPs }}
+ externalIPs:
+ {{- range $v := .Values.cluster.fodc.proxy.httpSvc.externalIPs }}
+ - {{ $v }}
+ {{- end }}
+ {{- end }}
+ {{- if .Values.cluster.fodc.proxy.httpSvc.loadBalancerIP }}
+ loadBalancerIP: {{ .Values.cluster.fodc.proxy.httpSvc.loadBalancerIP }}
+ {{- end }}
+ {{- if .Values.cluster.fodc.proxy.httpSvc.loadBalancerSourceRanges }}
+ loadBalancerSourceRanges:
+ {{- range $v :=
.Values.cluster.fodc.proxy.httpSvc.loadBalancerSourceRanges }}
+ - {{ $v }}
+ {{- end }}
+ {{- end }}
+{{- end }}
+{{- end }}
diff --git a/chart/templates/cluster_liaison_statefulset.yaml
b/chart/templates/cluster_liaison_statefulset.yaml
index a7e56d9..1f373db 100644
--- a/chart/templates/cluster_liaison_statefulset.yaml
+++ b/chart/templates/cluster_liaison_statefulset.yaml
@@ -48,8 +48,9 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}
priorityClassName: {{ .Values.cluster.liaison.priorityClassName }}
- {{- if or (and .Values.storage.liaison.enabled
.Values.cluster.liaison.volumePermissions.enabled) .Values.auth.enabled }}
+ {{- if or (and .Values.storage.liaison.enabled
.Values.cluster.liaison.volumePermissions.enabled) .Values.auth.enabled (and
.Values.cluster.enabled .Values.cluster.fodc.enabled) }}
initContainers:
+ {{- if and .Values.storage.liaison.enabled
.Values.cluster.liaison.volumePermissions.enabled }}
- name: volume-permissions
image: {{ default "busybox:1.36"
.Values.cluster.liaison.volumePermissions.image }}
imagePullPolicy: IfNotPresent
@@ -74,8 +75,8 @@ spec:
- mountPath: /mnt/{{ $claim.claimName }}
name: {{ $claim.claimName }}
{{- end }}
- {{- end }}
- {{- if .Values.auth.enabled }}
+ {{- end }}
+ {{- if .Values.auth.enabled }}
- name: auth-config-prepare
image: busybox:1.36
imagePullPolicy: IfNotPresent
@@ -97,6 +98,7 @@ spec:
readOnly: true
- mountPath: /etc/banyandb
name: banyandb-auth-writable
+ {{- end }}
{{- end }}
containers:
- name: liaison
@@ -286,6 +288,91 @@ spec:
{{- end }}
{{- end }}
+ {{- if and .Values.cluster.enabled .Values.cluster.fodc.enabled }}
+ - name: fodc-agent
+ image: {{ .Values.cluster.fodc.agent.image.repository }}:{{ default
.Values.image.tag .Values.cluster.fodc.agent.image.tag }}
+ imagePullPolicy: {{ .Values.cluster.fodc.agent.image.pullPolicy }}
+ {{- with .Values.cluster.fodc.agent.containerSecurityContext }}
+ securityContext:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ command:
+ - sh
+ - -c
+ - |
+ exec /fodc-agent \
+ --proxy-addr={{ template "banyandb.fullname" .
}}-fodc-proxy-grpc:{{ .Values.cluster.fodc.proxy.grpcSvc.port }} \
+ --node-ip=127.0.0.1 \
+ --node-port={{ .Values.cluster.liaison.grpcSvc.port }} \
+ --node-role=liaison \
+ --metrics-endpoint=http://127.0.0.1:2121/metrics \
+ --poll-metrics-interval={{
.Values.cluster.fodc.agent.config.scrapeInterval }} \
+ --prometheus-listen-addr=:{{
.Values.cluster.fodc.agent.httpPort }} \
+ --max-metrics-memory-usage-percentage={{
.Values.cluster.fodc.agent.config.ktmEnabled | ternary 10 5 }} \
+ --heartbeat-interval={{
.Values.cluster.fodc.agent.config.heartbeatInterval }} \
+ --reconnect-interval={{
.Values.cluster.fodc.agent.config.reconnectInterval }}
+ env:
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ {{- range $env := .Values.cluster.fodc.agent.env }}
+ - name: {{ $env.name }}
+ value: {{ $env.value }}
+ {{- end }}
+ ports:
+ - name: fodc-agent-grpc
+ containerPort: {{ .Values.cluster.fodc.agent.grpcPort }}
+ - name: fodc-agent-http
+ containerPort: {{ .Values.cluster.fodc.agent.httpPort }}
+ startupProbe:
+ httpGet:
+ path: /metrics
+ port: {{ .Values.cluster.fodc.agent.httpPort }}
+ initialDelaySeconds: {{
.Values.cluster.fodc.agent.startupProbe.initialDelaySeconds }}
+ periodSeconds: {{
.Values.cluster.fodc.agent.startupProbe.periodSeconds }}
+ timeoutSeconds: {{
.Values.cluster.fodc.agent.startupProbe.timeoutSeconds }}
+ successThreshold: {{
.Values.cluster.fodc.agent.startupProbe.successThreshold }}
+ failureThreshold: {{
.Values.cluster.fodc.agent.startupProbe.failureThreshold }}
+ readinessProbe:
+ httpGet:
+ path: /metrics
+ port: {{ .Values.cluster.fodc.agent.httpPort }}
+ initialDelaySeconds: {{
.Values.cluster.fodc.agent.readinessProbe.initialDelaySeconds }}
+ periodSeconds: {{
.Values.cluster.fodc.agent.readinessProbe.periodSeconds }}
+ timeoutSeconds: {{
.Values.cluster.fodc.agent.readinessProbe.timeoutSeconds }}
+ successThreshold: {{
.Values.cluster.fodc.agent.readinessProbe.successThreshold }}
+ failureThreshold: {{
.Values.cluster.fodc.agent.readinessProbe.failureThreshold }}
+ livenessProbe:
+ httpGet:
+ path: /metrics
+ port: {{ .Values.cluster.fodc.agent.httpPort }}
+ initialDelaySeconds: {{
.Values.cluster.fodc.agent.livenessProbe.initialDelaySeconds }}
+ periodSeconds: {{
.Values.cluster.fodc.agent.livenessProbe.periodSeconds }}
+ timeoutSeconds: {{
.Values.cluster.fodc.agent.livenessProbe.timeoutSeconds }}
+ successThreshold: {{
.Values.cluster.fodc.agent.livenessProbe.successThreshold }}
+ failureThreshold: {{
.Values.cluster.fodc.agent.livenessProbe.failureThreshold }}
+ {{- with .Values.cluster.fodc.agent.resources }}
+ resources:
+ {{- if .requests }}
+ requests:
+ {{- range $request := .requests }}
+ {{ $request.key }}: {{ $request.value }}
+ {{- end }}
+ {{- end }}
+ {{- if .limits }}
+ limits:
+ {{- range $limit := .limits }}
+ {{ $limit.key }}: {{ $limit.value }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+
{{- if or .Values.cluster.liaison.tls .Values.auth.enabled
$nodeDiscoveryFileMode }}
volumes:
{{- if .Values.cluster.liaison.tls }}
diff --git a/chart/templates/ingress.yaml b/chart/templates/ingress.yaml
index 1dbdc9a..cfe5dca 100644
--- a/chart/templates/ingress.yaml
+++ b/chart/templates/ingress.yaml
@@ -156,4 +156,52 @@ spec:
{{ toYaml .Values.cluster.ui.standalone.ingress.tls | indent 4 }}
{{- end -}}
{{- end }}
+
+{{- if and .Values.cluster.fodc.enabled
.Values.cluster.fodc.proxy.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:
+ labels: {{ include "banyandb.labels" . | nindent 4 }}
+ app.kubernetes.io/component: fodc-proxy
+ {{- range $key, $value := .Values.cluster.fodc.proxy.ingress.labels }}
+ {{ $key }}: {{ $value | quote }}
+ {{- end }}
+ name: {{ template "banyandb.fullname" . }}-fodc-proxy
+ annotations:
+ {{- range $key, $value := .Values.cluster.fodc.proxy.ingress.annotations }}
+ {{ $key }}: {{ $value | quote }}
+ {{- end }}
+spec:
+ rules:
+ {{- range .Values.cluster.fodc.proxy.ingress.rules }}
+ - host: {{ .host }}
+ http:
+ paths:
+ {{- range .paths }}
+ - path: {{ .path }}
+ pathType: Prefix
+ backend:
+ {{- if $.Capabilities.APIVersions.Has
"networking.k8s.io/v1/Ingress" }}
+ service:
+ name: {{ .serviceName }}
+ port:
+ number: {{ .port }}
+ {{- else }}
+ serviceName: {{ .serviceName }}
+ servicePort: {{ .port }}
+ {{- end }}
+ {{- end }}
+ {{- end -}}
+ {{- if .Values.cluster.fodc.proxy.ingress.tls }}
+ tls:
+{{ toYaml .Values.cluster.fodc.proxy.ingress.tls | indent 4 }}
+ {{- end -}}
+{{- end }}
{{- end }}
\ No newline at end of file
diff --git a/chart/templates/pdb.yaml b/chart/templates/pdb.yaml
index 8f0192c..d403f2d 100644
--- a/chart/templates/pdb.yaml
+++ b/chart/templates/pdb.yaml
@@ -125,3 +125,30 @@ spec:
paused: {{ $budget.paused }}
{{- end }}
{{- end }}
+---
+{{- if and .Values.cluster.fodc.enabled
.Values.cluster.fodc.proxy.podDisruptionBudget }}
+{{- if .Capabilities.APIVersions.Has "policy/v1" }}
+apiVersion: policy/v1
+{{- else }}
+apiVersion: policy/v1beta1
+{{- end }}
+kind: PodDisruptionBudget
+metadata:
+ name: {{ template "banyandb.fullname" . }}-fodc-proxy
+ labels: {{ include "banyandb.labels" . | nindent 4 }}
+ app.kubernetes.io/component: fodc-proxy
+spec:
+ {{- $budget := .Values.cluster.fodc.proxy.podDisruptionBudget }}
+ {{- if $budget.maxUnavailable }}
+ maxUnavailable: {{ $budget.maxUnavailable }}
+ {{- end }}
+ {{- if $budget.minAvailable }}
+ minAvailable: {{ $budget.minAvailable }}
+ {{- end }}
+ selector:
+ matchLabels: {{ include "banyandb.selectorLabels" . | nindent 6 }}
+ app.kubernetes.io/component: fodc-proxy
+ {{- if $budget.paused }}
+ paused: {{ $budget.paused }}
+ {{- end }}
+{{- end }}
diff --git a/chart/templates/standalone_statefulset.yaml
b/chart/templates/standalone_statefulset.yaml
index be22873..ed195e8 100644
--- a/chart/templates/standalone_statefulset.yaml
+++ b/chart/templates/standalone_statefulset.yaml
@@ -236,6 +236,109 @@ spec:
{{- end }}
{{- end }}
+ {{- if and .Values.cluster.enabled .Values.cluster.fodc.enabled }}
+ - name: fodc-agent
+ image: {{ .Values.cluster.fodc.agent.image.repository }}:{{ default
.Values.image.tag .Values.cluster.fodc.agent.image.tag }}
+ imagePullPolicy: {{ .Values.cluster.fodc.agent.image.pullPolicy }}
+ {{- with .Values.cluster.fodc.agent.containerSecurityContext }}
+ securityContext:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ command:
+ - sh
+ - -c
+ - |
+ set -euo pipefail
+ echo "Waiting for BanyanDB observability port (2121) to be
ready..."
+ MAX_ATTEMPTS=60
+ ATTEMPT=0
+ while [ ${ATTEMPT} -lt ${MAX_ATTEMPTS} ]; do
+ if wget -q -T 1 -O- "http://127.0.0.1:2121/metrics" >
/dev/null 2>&1; then
+ echo "BanyanDB observability port is ready, starting FODC
agent..."
+ break
+ fi
+ ATTEMPT=$((ATTEMPT + 1))
+ if [ $((ATTEMPT % 5)) -eq 0 ]; then
+ echo "Waiting for BanyanDB observability port (attempt
${ATTEMPT}/${MAX_ATTEMPTS})..."
+ fi
+ sleep 2
+ done
+ if [ ${ATTEMPT} -ge ${MAX_ATTEMPTS} ]; then
+ echo "Warning: BanyanDB observability port not ready after
${MAX_ATTEMPTS} attempts, starting agent anyway..."
+ fi
+ exec /fodc-agent \
+ --proxy-addr={{ template "banyandb.fullname" .
}}-fodc-proxy-grpc:{{ .Values.cluster.fodc.proxy.grpcSvc.port }} \
+ --node-ip=${POD_NAME}.banyandb.${POD_NAMESPACE} \
+ --node-port={{ .Values.standalone.grpcSvc.port }} \
+ --node-role=standalone \
+ --metrics-endpoint=http://127.0.0.1:2121/metrics \
+ --poll-metrics-interval={{
.Values.cluster.fodc.agent.config.scrapeInterval }} \
+ --prometheus-listen-addr=:{{
.Values.cluster.fodc.agent.httpPort }} \
+ --max-metrics-memory-usage-percentage={{
.Values.cluster.fodc.agent.config.ktmEnabled | ternary 10 5 }} \
+ --heartbeat-interval={{
.Values.cluster.fodc.agent.config.heartbeatInterval }} \
+ --reconnect-interval={{
.Values.cluster.fodc.agent.config.reconnectInterval }}
+ env:
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ {{- range $env := .Values.cluster.fodc.agent.env }}
+ - name: {{ $env.name }}
+ value: {{ $env.value }}
+ {{- end }}
+ ports:
+ - name: fodc-agent-grpc
+ containerPort: {{ .Values.cluster.fodc.agent.grpcPort }}
+ - name: fodc-agent-http
+ containerPort: {{ .Values.cluster.fodc.agent.httpPort }}
+ startupProbe:
+ httpGet:
+ path: /metrics
+ port: {{ .Values.cluster.fodc.agent.httpPort }}
+ initialDelaySeconds: {{
.Values.cluster.fodc.agent.startupProbe.initialDelaySeconds }}
+ periodSeconds: {{
.Values.cluster.fodc.agent.startupProbe.periodSeconds }}
+ timeoutSeconds: {{
.Values.cluster.fodc.agent.startupProbe.timeoutSeconds }}
+ successThreshold: {{
.Values.cluster.fodc.agent.startupProbe.successThreshold }}
+ failureThreshold: {{
.Values.cluster.fodc.agent.startupProbe.failureThreshold }}
+ readinessProbe:
+ httpGet:
+ path: /health
+ port: {{ .Values.cluster.fodc.agent.httpPort }}
+ initialDelaySeconds: {{
.Values.cluster.fodc.agent.readinessProbe.initialDelaySeconds }}
+ periodSeconds: {{
.Values.cluster.fodc.agent.readinessProbe.periodSeconds }}
+ timeoutSeconds: {{
.Values.cluster.fodc.agent.readinessProbe.timeoutSeconds }}
+ successThreshold: {{
.Values.cluster.fodc.agent.readinessProbe.successThreshold }}
+ failureThreshold: {{
.Values.cluster.fodc.agent.readinessProbe.failureThreshold }}
+ livenessProbe:
+ httpGet:
+ path: /health
+ port: {{ .Values.cluster.fodc.agent.httpPort }}
+ initialDelaySeconds: {{
.Values.cluster.fodc.agent.livenessProbe.initialDelaySeconds }}
+ periodSeconds: {{
.Values.cluster.fodc.agent.livenessProbe.periodSeconds }}
+ timeoutSeconds: {{
.Values.cluster.fodc.agent.livenessProbe.timeoutSeconds }}
+ successThreshold: {{
.Values.cluster.fodc.agent.livenessProbe.successThreshold }}
+ failureThreshold: {{
.Values.cluster.fodc.agent.livenessProbe.failureThreshold }}
+ {{- with .Values.cluster.fodc.agent.resources }}
+ resources:
+ {{- if .requests }}
+ requests:
+ {{- range $request := .requests }}
+ {{ $request.key }}: {{ $request.value }}
+ {{- end }}
+ {{- end }}
+ {{- if .limits }}
+ limits:
+ {{- range $limit := .limits }}
+ {{ $limit.key }}: {{ $limit.value }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+
{{- if or .Values.standalone.tls .Values.auth.enabled }}
volumes:
{{- if .Values.standalone.tls }}
diff --git a/chart/values-lifecycle.yaml b/chart/values-lifecycle.yaml
index eb52945..bb4beeb 100644
--- a/chart/values-lifecycle.yaml
+++ b/chart/values-lifecycle.yaml
@@ -383,6 +383,9 @@ cluster:
annotations: {}
## @param cluster.liaison.grpcSvc.port Port number for GRPC service for
liaison
port: 17912
+ ## @param cluster.liaison.sidecar Sidecar containers for liaison pods
+ ##
+ sidecar: []
## HTTP service settings for liaison
##
httpSvc:
@@ -810,6 +813,199 @@ cluster:
## @param cluster.ui.standalone.startupProbe.failureThreshold Failure
threshold for UI startup probe
##
failureThreshold: 60
+ ## @section Configuration for FODC (First Occurrence Data Collection)
+ ##
+ fodc:
+ ## @param cluster.fodc.enabled Enable FODC (both Agent and Proxy) (boolean)
+ enabled: true
+ ## @section FODC Proxy component
+ ##
+ proxy:
+ ## @param cluster.fodc.proxy.podAnnotations Pod annotations for Proxy
+ podAnnotations: {}
+ ## @param cluster.fodc.proxy.securityContext Security context for Proxy
pods
+ securityContext: {}
+ ## @param cluster.fodc.proxy.containerSecurityContext Container-level
security context for Proxy
+ containerSecurityContext: {}
+ ## @param cluster.fodc.proxy.env Environment variables for Proxy pods
+ env: []
+ ## @param cluster.fodc.proxy.priorityClassName Priority class name for
Proxy pods
+ priorityClassName: ""
+ ## @param cluster.fodc.proxy.podDisruptionBudget Pod disruption budget
for Proxy
+ podDisruptionBudget: {}
+ ## @param cluster.fodc.proxy.tolerations Tolerations for Proxy pods
+ tolerations: []
+ ## @param cluster.fodc.proxy.nodeSelector Node selector for Proxy pods
+ nodeSelector: []
+ ## @param cluster.fodc.proxy.affinity Affinity rules for Proxy pods
+ affinity: {}
+ ## @param cluster.fodc.proxy.podAffinityPreset Pod affinity preset for
Proxy
+ podAffinityPreset: ""
+ ## @param cluster.fodc.proxy.podAntiAffinityPreset Pod anti-affinity
preset for Proxy
+ podAntiAffinityPreset: soft
+ ## Resource requests/limits for Proxy
+ resources:
+ ## @param cluster.fodc.proxy.resources.requests Resource requests for
Proxy pods
+ requests: {}
+ ## @param cluster.fodc.proxy.resources.limits Resource limits for
Proxy pods
+ limits: {}
+ image:
+ ## @param cluster.fodc.proxy.image.repository Docker repository for
FODC Proxy
+ repository: ghcr.io/apache/skywalking-banyandb-fodc-proxy
+ ## @param cluster.fodc.proxy.image.tag Image tag/version for FODC
Proxy (empty for latest)
+ tag: ""
+ ## @param cluster.fodc.proxy.image.pullPolicy Image pull policy for
FODC Proxy
+ pullPolicy: IfNotPresent
+ grpcSvc:
+ ## @param cluster.fodc.proxy.grpcSvc.labels Labels for Proxy gRPC
service
+ labels: {}
+ ## @param cluster.fodc.proxy.grpcSvc.annotations Annotations for Proxy
gRPC service
+ annotations: {}
+ ## @param cluster.fodc.proxy.grpcSvc.port Port number for Proxy gRPC
service (Agent connections)
+ port: 17912
+ httpSvc:
+ ## @param cluster.fodc.proxy.httpSvc.labels Labels for Proxy HTTP
service
+ labels: {}
+ ## @param cluster.fodc.proxy.httpSvc.annotations Annotations for Proxy
HTTP service
+ annotations: {}
+ ## @param cluster.fodc.proxy.httpSvc.port Port number for Proxy HTTP
service
+ port: 17913
+ ## @param cluster.fodc.proxy.httpSvc.type Service type for Proxy HTTP
service (ClusterIP, LoadBalancer, NodePort)
+ type: LoadBalancer
+ ## @param cluster.fodc.proxy.httpSvc.externalIPs External IP addresses
for Proxy HTTP service
+ externalIPs: []
+ ## @param cluster.fodc.proxy.httpSvc.loadBalancerIP Load balancer IP
for Proxy HTTP service
+ loadBalancerIP: null
+ ## @param cluster.fodc.proxy.httpSvc.loadBalancerSourceRanges Allowed
source ranges for Proxy HTTP service
+ loadBalancerSourceRanges: []
+ ingress:
+ ## @param cluster.fodc.proxy.ingress.enabled Enable ingress for Proxy
+ enabled: false
+ ## @param cluster.fodc.proxy.ingress.labels Labels for Proxy ingress
+ labels: {}
+ ## @param cluster.fodc.proxy.ingress.annotations Annotations for Proxy
ingress
+ annotations: {}
+ ## @param cluster.fodc.proxy.ingress.rules Ingress rules for Proxy
+ rules: []
+ ## @param cluster.fodc.proxy.ingress.tls TLS configuration for Proxy
ingress
+ tls: []
+ config:
+ ## @param cluster.fodc.proxy.config.agentHeartbeatTimeout Timeout for
considering agent offline
+ agentHeartbeatTimeout: 30s
+ ## @param cluster.fodc.proxy.config.agentCleanupTimeout Timeout for
auto-unregistering offline agents
+ agentCleanupTimeout: 5m
+ ## @param cluster.fodc.proxy.config.maxAgents Maximum number of agents
allowed to register
+ maxAgents: 1000
+ ## @param cluster.fodc.proxy.config.grpcMaxMsgSize Maximum gRPC
message size in bytes
+ grpcMaxMsgSize: 4194304
+ ## @param cluster.fodc.proxy.config.httpReadTimeout HTTP read timeout
+ httpReadTimeout: 10s
+ ## @param cluster.fodc.proxy.config.httpWriteTimeout HTTP write timeout
+ httpWriteTimeout: 10s
+ ## @param cluster.fodc.proxy.config.heartbeatInterval Default
heartbeat interval for agents
+ heartbeatInterval: 10s
+ livenessProbe:
+ ## @param cluster.fodc.proxy.livenessProbe.initialDelaySeconds Initial
delay for Proxy liveness probe
+ initialDelaySeconds: 10
+ ## @param cluster.fodc.proxy.livenessProbe.periodSeconds Probe period
for Proxy liveness probe
+ periodSeconds: 30
+ ## @param cluster.fodc.proxy.livenessProbe.timeoutSeconds Timeout in
seconds for Proxy liveness probe
+ timeoutSeconds: 5
+ ## @param cluster.fodc.proxy.livenessProbe.successThreshold Success
threshold for Proxy liveness probe
+ successThreshold: 1
+ ## @param cluster.fodc.proxy.livenessProbe.failureThreshold Failure
threshold for Proxy liveness probe
+ failureThreshold: 5
+ readinessProbe:
+ ## @param cluster.fodc.proxy.readinessProbe.initialDelaySeconds
Initial delay for Proxy readiness probe
+ initialDelaySeconds: 10
+ ## @param cluster.fodc.proxy.readinessProbe.periodSeconds Probe period
for Proxy readiness probe
+ periodSeconds: 30
+ ## @param cluster.fodc.proxy.readinessProbe.timeoutSeconds Timeout in
seconds for Proxy readiness probe
+ timeoutSeconds: 5
+ ## @param cluster.fodc.proxy.readinessProbe.successThreshold Success
threshold for Proxy readiness probe
+ successThreshold: 1
+ ## @param cluster.fodc.proxy.readinessProbe.failureThreshold Failure
threshold for Proxy readiness probe
+ failureThreshold: 5
+ startupProbe:
+ ## @param cluster.fodc.proxy.startupProbe.initialDelaySeconds Initial
delay for Proxy startup probe
+ initialDelaySeconds: 0
+ ## @param cluster.fodc.proxy.startupProbe.periodSeconds Probe period
for Proxy startup probe
+ periodSeconds: 10
+ ## @param cluster.fodc.proxy.startupProbe.timeoutSeconds Timeout in
seconds for Proxy startup probe
+ timeoutSeconds: 5
+ ## @param cluster.fodc.proxy.startupProbe.successThreshold Success
threshold for Proxy startup probe
+ successThreshold: 1
+ ## @param cluster.fodc.proxy.startupProbe.failureThreshold Failure
threshold for Proxy startup probe
+ failureThreshold: 60
+
+ ## @section FODC Agent sidecar
+ ##
+ agent:
+ image:
+ ## @param cluster.fodc.agent.image.repository Docker repository for
FODC Agent
+ repository: ghcr.io/apache/skywalking-banyandb-fodc-agent
+ ## @param cluster.fodc.agent.image.tag Image tag/version for FODC
Agent (defaults to same as main image)
+ tag: ""
+ ## @param cluster.fodc.agent.image.pullPolicy Image pull policy for
FODC Agent
+ pullPolicy: IfNotPresent
+ ## @param cluster.fodc.agent.env Environment variables for Agent sidecar
+ env: []
+ ## @param cluster.fodc.agent.containerSecurityContext Container-level
security context for Agent
+ containerSecurityContext: {}
+ resources:
+ ## @param cluster.fodc.agent.resources.requests Resource requests for
Agent
+ requests: []
+ ## @param cluster.fodc.agent.resources.limits Resource limits for Agent
+ limits: []
+ ## @param cluster.fodc.agent.grpcPort GRPC port for Agent sidecar (not
used - agent connects outbound to proxy)
+ grpcPort: 17914
+ ## @param cluster.fodc.agent.httpPort HTTP port for Agent sidecar
(prometheus-listen-addr flag)
+ httpPort: 17915
+ config:
+ ## @param cluster.fodc.agent.config.scrapeInterval Interval for
scraping BanyanDB metrics (poll-metrics-interval flag)
+ scrapeInterval: 15s
+ ## @param cluster.fodc.agent.config.heartbeatInterval Heartbeat
interval to Proxy (heartbeat-interval flag)
+ heartbeatInterval: 10s
+ ## @param cluster.fodc.agent.config.reconnectInterval Reconnect
interval when connection to Proxy is lost (reconnect-interval flag)
+ reconnectInterval: 10s
+ ## @param cluster.fodc.agent.config.ktmEnabled Enable Kernel Telemetry
Module (affects max-metrics-memory-usage-percentage)
+ ktmEnabled: true
+ ## Liveness probe for Agent
+ livenessProbe:
+ ## @param cluster.fodc.agent.livenessProbe.initialDelaySeconds Initial
delay for Agent liveness probe
+ initialDelaySeconds: 90
+ ## @param cluster.fodc.agent.livenessProbe.periodSeconds Probe period
for Agent liveness probe
+ periodSeconds: 30
+ ## @param cluster.fodc.agent.livenessProbe.timeoutSeconds Timeout in
seconds for Agent liveness probe
+ timeoutSeconds: 5
+ ## @param cluster.fodc.agent.livenessProbe.successThreshold Success
threshold for Agent liveness probe
+ successThreshold: 1
+ ## @param cluster.fodc.agent.livenessProbe.failureThreshold Failure
threshold for Agent liveness probe
+ failureThreshold: 5
+ ## Readiness probe for Agent
+ readinessProbe:
+ ## @param cluster.fodc.agent.readinessProbe.initialDelaySeconds
Initial delay for Agent readiness probe
+ initialDelaySeconds: 60
+ ## @param cluster.fodc.agent.readinessProbe.periodSeconds Probe period
for Agent readiness probe
+ periodSeconds: 10
+ ## @param cluster.fodc.agent.readinessProbe.timeoutSeconds Timeout in
seconds for Agent readiness probe
+ timeoutSeconds: 5
+ ## @param cluster.fodc.agent.readinessProbe.successThreshold Success
threshold for Agent readiness probe
+ successThreshold: 1
+ ## @param cluster.fodc.agent.readinessProbe.failureThreshold Failure
threshold for Agent readiness probe
+ failureThreshold: 12
+ ## Startup probe for Agent
+ startupProbe:
+ ## @param cluster.fodc.agent.startupProbe.initialDelaySeconds Initial
delay for Agent startup probe
+ initialDelaySeconds: 30
+ ## @param cluster.fodc.agent.startupProbe.periodSeconds Probe period
for Agent startup probe
+ periodSeconds: 5
+ ## @param cluster.fodc.agent.startupProbe.timeoutSeconds Timeout in
seconds for Agent startup probe
+ timeoutSeconds: 3
+ ## @param cluster.fodc.agent.startupProbe.successThreshold Success
threshold for Agent startup probe
+ successThreshold: 1
+ ## @param cluster.fodc.agent.startupProbe.failureThreshold Failure
threshold for Agent startup probe
+ failureThreshold: 60
## @section Storage configuration for persistent volumes
##
diff --git a/chart/values.yaml b/chart/values.yaml
index 8d87a02..1728895 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -422,6 +422,9 @@ cluster:
annotations: {}
## @param cluster.liaison.grpcSvc.port Port number for GRPC service for
liaison
port: 17912
+ ## @param cluster.liaison.sidecar Sidecar containers for liaison pods
+ ##
+ sidecar: []
## HTTP service settings for liaison
##
httpSvc:
@@ -832,6 +835,200 @@ cluster:
##
failureThreshold: 60
+ ## @section Configuration for FODC (First Occurrence Data Collection)
+ ##
+ fodc:
+ ## @param cluster.fodc.enabled Enable FODC (both Agent and Proxy) (boolean)
+ enabled: true
+ ## @section FODC Proxy component
+ ##
+ proxy:
+ ## @param cluster.fodc.proxy.podAnnotations Pod annotations for Proxy
+ podAnnotations: {}
+ ## @param cluster.fodc.proxy.securityContext Security context for Proxy
pods
+ securityContext: {}
+ ## @param cluster.fodc.proxy.containerSecurityContext Container-level
security context for Proxy
+ containerSecurityContext: {}
+ ## @param cluster.fodc.proxy.env Environment variables for Proxy pods
+ env: []
+ ## @param cluster.fodc.proxy.priorityClassName Priority class name for
Proxy pods
+ priorityClassName: ""
+ ## @param cluster.fodc.proxy.podDisruptionBudget Pod disruption budget
for Proxy
+ podDisruptionBudget: {}
+ ## @param cluster.fodc.proxy.tolerations Tolerations for Proxy pods
+ tolerations: []
+ ## @param cluster.fodc.proxy.nodeSelector Node selector for Proxy pods
+ nodeSelector: []
+ ## @param cluster.fodc.proxy.affinity Affinity rules for Proxy pods
+ affinity: {}
+ ## @param cluster.fodc.proxy.podAffinityPreset Pod affinity preset for
Proxy
+ podAffinityPreset: ""
+ ## @param cluster.fodc.proxy.podAntiAffinityPreset Pod anti-affinity
preset for Proxy
+ podAntiAffinityPreset: soft
+ ## Resource requests/limits for Proxy
+ resources:
+ ## @param cluster.fodc.proxy.resources.requests Resource requests for
Proxy pods
+ requests: {}
+ ## @param cluster.fodc.proxy.resources.limits Resource limits for
Proxy pods
+ limits: {}
+ image:
+ ## @param cluster.fodc.proxy.image.repository Docker repository for
FODC Proxy
+ repository: ghcr.io/apache/skywalking-banyandb-fodc-proxy
+ ## @param cluster.fodc.proxy.image.tag Image tag/version for FODC
Proxy (empty for latest)
+ tag: ""
+ ## @param cluster.fodc.proxy.image.pullPolicy Image pull policy for
FODC Proxy
+ pullPolicy: IfNotPresent
+ grpcSvc:
+ ## @param cluster.fodc.proxy.grpcSvc.labels Labels for Proxy gRPC
service
+ labels: {}
+ ## @param cluster.fodc.proxy.grpcSvc.annotations Annotations for Proxy
gRPC service
+ annotations: {}
+ ## @param cluster.fodc.proxy.grpcSvc.port Port number for Proxy gRPC
service (Agent connections)
+ port: 17912
+ httpSvc:
+ ## @param cluster.fodc.proxy.httpSvc.labels Labels for Proxy HTTP
service
+ labels: {}
+ ## @param cluster.fodc.proxy.httpSvc.annotations Annotations for Proxy
HTTP service
+ annotations: {}
+ ## @param cluster.fodc.proxy.httpSvc.port Port number for Proxy HTTP
service
+ port: 17913
+ ## @param cluster.fodc.proxy.httpSvc.type Service type for Proxy HTTP
service (ClusterIP, LoadBalancer, NodePort)
+ type: LoadBalancer
+ ## @param cluster.fodc.proxy.httpSvc.externalIPs External IP addresses
for Proxy HTTP service
+ externalIPs: []
+ ## @param cluster.fodc.proxy.httpSvc.loadBalancerIP Load balancer IP
for Proxy HTTP service
+ loadBalancerIP: null
+ ## @param cluster.fodc.proxy.httpSvc.loadBalancerSourceRanges Allowed
source ranges for Proxy HTTP service
+ loadBalancerSourceRanges: []
+ ingress:
+ ## @param cluster.fodc.proxy.ingress.enabled Enable ingress for Proxy
+ enabled: false
+ ## @param cluster.fodc.proxy.ingress.labels Labels for Proxy ingress
+ labels: {}
+ ## @param cluster.fodc.proxy.ingress.annotations Annotations for Proxy
ingress
+ annotations: {}
+ ## @param cluster.fodc.proxy.ingress.rules Ingress rules for Proxy
+ rules: []
+ ## @param cluster.fodc.proxy.ingress.tls TLS configuration for Proxy
ingress
+ tls: []
+ config:
+ ## @param cluster.fodc.proxy.config.agentHeartbeatTimeout Timeout for
considering agent offline
+ agentHeartbeatTimeout: 30s
+ ## @param cluster.fodc.proxy.config.agentCleanupTimeout Timeout for
auto-unregistering offline agents
+ agentCleanupTimeout: 5m
+ ## @param cluster.fodc.proxy.config.maxAgents Maximum number of agents
allowed to register
+ maxAgents: 1000
+ ## @param cluster.fodc.proxy.config.grpcMaxMsgSize Maximum gRPC
message size in bytes
+ grpcMaxMsgSize: 4194304
+ ## @param cluster.fodc.proxy.config.httpReadTimeout HTTP read timeout
+ httpReadTimeout: 10s
+ ## @param cluster.fodc.proxy.config.httpWriteTimeout HTTP write timeout
+ httpWriteTimeout: 10s
+ ## @param cluster.fodc.proxy.config.heartbeatInterval Default
heartbeat interval for agents
+ heartbeatInterval: 10s
+ livenessProbe:
+ ## @param cluster.fodc.proxy.livenessProbe.initialDelaySeconds Initial
delay for Proxy liveness probe
+ initialDelaySeconds: 10
+ ## @param cluster.fodc.proxy.livenessProbe.periodSeconds Probe period
for Proxy liveness probe
+ periodSeconds: 30
+ ## @param cluster.fodc.proxy.livenessProbe.timeoutSeconds Timeout in
seconds for Proxy liveness probe
+ timeoutSeconds: 5
+ ## @param cluster.fodc.proxy.livenessProbe.successThreshold Success
threshold for Proxy liveness probe
+ successThreshold: 1
+ ## @param cluster.fodc.proxy.livenessProbe.failureThreshold Failure
threshold for Proxy liveness probe
+ failureThreshold: 5
+ readinessProbe:
+ ## @param cluster.fodc.proxy.readinessProbe.initialDelaySeconds
Initial delay for Proxy readiness probe
+ initialDelaySeconds: 10
+ ## @param cluster.fodc.proxy.readinessProbe.periodSeconds Probe period
for Proxy readiness probe
+ periodSeconds: 30
+ ## @param cluster.fodc.proxy.readinessProbe.timeoutSeconds Timeout in
seconds for Proxy readiness probe
+ timeoutSeconds: 5
+ ## @param cluster.fodc.proxy.readinessProbe.successThreshold Success
threshold for Proxy readiness probe
+ successThreshold: 1
+ ## @param cluster.fodc.proxy.readinessProbe.failureThreshold Failure
threshold for Proxy readiness probe
+ failureThreshold: 5
+ startupProbe:
+ ## @param cluster.fodc.proxy.startupProbe.initialDelaySeconds Initial
delay for Proxy startup probe
+ initialDelaySeconds: 0
+ ## @param cluster.fodc.proxy.startupProbe.periodSeconds Probe period
for Proxy startup probe
+ periodSeconds: 10
+ ## @param cluster.fodc.proxy.startupProbe.timeoutSeconds Timeout in
seconds for Proxy startup probe
+ timeoutSeconds: 5
+ ## @param cluster.fodc.proxy.startupProbe.successThreshold Success
threshold for Proxy startup probe
+ successThreshold: 1
+ ## @param cluster.fodc.proxy.startupProbe.failureThreshold Failure
threshold for Proxy startup probe
+ failureThreshold: 60
+
+ ## @section FODC Agent sidecar
+ ##
+ agent:
+ image:
+ ## @param cluster.fodc.agent.image.repository Docker repository for
FODC Agent
+ repository: ghcr.io/apache/skywalking-banyandb-fodc-agent
+ ## @param cluster.fodc.agent.image.tag Image tag/version for FODC
Agent (defaults to same as main image)
+ tag: ""
+ ## @param cluster.fodc.agent.image.pullPolicy Image pull policy for
FODC Agent
+ pullPolicy: IfNotPresent
+ ## @param cluster.fodc.agent.env Environment variables for Agent sidecar
+ env: []
+ ## @param cluster.fodc.agent.containerSecurityContext Container-level
security context for Agent
+ containerSecurityContext: {}
+ resources:
+ ## @param cluster.fodc.agent.resources.requests Resource requests for
Agent
+ requests: []
+ ## @param cluster.fodc.agent.resources.limits Resource limits for Agent
+ limits: []
+ ## @param cluster.fodc.agent.grpcPort GRPC port for Agent sidecar (not
used - agent connects outbound to proxy)
+ grpcPort: 17914
+ ## @param cluster.fodc.agent.httpPort HTTP port for Agent sidecar
(prometheus-listen-addr flag)
+ httpPort: 17915
+ config:
+ ## @param cluster.fodc.agent.config.scrapeInterval Interval for
scraping BanyanDB metrics (poll-metrics-interval flag)
+ scrapeInterval: 15s
+ ## @param cluster.fodc.agent.config.heartbeatInterval Heartbeat
interval to Proxy (heartbeat-interval flag)
+ heartbeatInterval: 10s
+ ## @param cluster.fodc.agent.config.reconnectInterval Reconnect
interval when connection to Proxy is lost (reconnect-interval flag)
+ reconnectInterval: 10s
+ ## @param cluster.fodc.agent.config.ktmEnabled Enable Kernel Telemetry
Module (affects max-metrics-memory-usage-percentage)
+ ktmEnabled: true
+ ## Liveness probe for Agent
+ livenessProbe:
+ ## @param cluster.fodc.agent.livenessProbe.initialDelaySeconds Initial
delay for Agent liveness probe
+ initialDelaySeconds: 90
+ ## @param cluster.fodc.agent.livenessProbe.periodSeconds Probe period
for Agent liveness probe
+ periodSeconds: 30
+ ## @param cluster.fodc.agent.livenessProbe.timeoutSeconds Timeout in
seconds for Agent liveness probe
+ timeoutSeconds: 5
+ ## @param cluster.fodc.agent.livenessProbe.successThreshold Success
threshold for Agent liveness probe
+ successThreshold: 1
+ ## @param cluster.fodc.agent.livenessProbe.failureThreshold Failure
threshold for Agent liveness probe
+ failureThreshold: 5
+ ## Readiness probe for Agent
+ readinessProbe:
+ ## @param cluster.fodc.agent.readinessProbe.initialDelaySeconds
Initial delay for Agent readiness probe
+ initialDelaySeconds: 60
+ ## @param cluster.fodc.agent.readinessProbe.periodSeconds Probe period
for Agent readiness probe
+ periodSeconds: 10
+ ## @param cluster.fodc.agent.readinessProbe.timeoutSeconds Timeout in
seconds for Agent readiness probe
+ timeoutSeconds: 5
+ ## @param cluster.fodc.agent.readinessProbe.successThreshold Success
threshold for Agent readiness probe
+ successThreshold: 1
+ ## @param cluster.fodc.agent.readinessProbe.failureThreshold Failure
threshold for Agent readiness probe
+ failureThreshold: 12
+ ## Startup probe for Agent
+ startupProbe:
+ ## @param cluster.fodc.agent.startupProbe.initialDelaySeconds Initial
delay for Agent startup probe
+ initialDelaySeconds: 30
+ ## @param cluster.fodc.agent.startupProbe.periodSeconds Probe period
for Agent startup probe
+ periodSeconds: 5
+ ## @param cluster.fodc.agent.startupProbe.timeoutSeconds Timeout in
seconds for Agent startup probe
+ timeoutSeconds: 3
+ ## @param cluster.fodc.agent.startupProbe.successThreshold Success
threshold for Agent startup probe
+ successThreshold: 1
+ ## @param cluster.fodc.agent.startupProbe.failureThreshold Failure
threshold for Agent startup probe
+ failureThreshold: 60
+
## @section Storage configuration for persistent volumes
##
storage:
diff --git a/doc/parameters.md b/doc/parameters.md
index 120b800..d42185f 100644
--- a/doc/parameters.md
+++ b/doc/parameters.md
@@ -99,7 +99,7 @@ The content of this document describes the parameters that
can be configured in
| Name | Description | Value |
|------------------------------|---------------------------------|--------|
-| `cluster.nodeDiscovery.mode` | Node discovery mode (etcd, dns) | `etcd` |
+| `cluster.nodeDiscovery.mode` | Node discovery mode (etcd, dns, file) | `dns`
|
### DNS Mode Configuration
@@ -156,6 +156,7 @@ The content of this document describes the parameters that
can be configured in
| `cluster.liaison.grpcSvc.labels` | Labels for
GRPC service for liaison | `{}` |
| `cluster.liaison.grpcSvc.annotations` | Annotations
for GRPC service for liaison | `{}` |
| `cluster.liaison.grpcSvc.port` | Port number
for GRPC service for liaison | `17912` |
+| `cluster.liaison.sidecar` | Sidecar
containers for liaison pods | `[]` |
| `cluster.liaison.httpSvc.labels` | Labels for
HTTP service for liaison | `{}` |
| `cluster.liaison.httpSvc.annotations` | Annotations
for HTTP service for liaison | `{}` |
| `cluster.liaison.httpSvc.port` | Port number
for HTTP service for liaison | `17913` |
@@ -291,6 +292,102 @@ The content of this document describes the parameters
that can be configured in
| `cluster.ui.standalone.startupProbe.successThreshold` |
Success threshold for UI startup probe | `1` |
| `cluster.ui.standalone.startupProbe.failureThreshold` |
Failure threshold for UI startup probe | `60` |
+### Configuration for FODC (First Occurrence Data Collection) Proxy component
+
+| Name |
Description | Value
|
+| --------------------------------------------------------------- |
----------------------------------------------------------------------- |
------------------------------------------------- |
+| `cluster.fodc.proxy.enabled` | Enable
FODC Proxy deployment (boolean) | `true`
|
+| `cluster.fodc.proxy.podAnnotations` | Pod
annotations for Proxy | `{}`
|
+| `cluster.fodc.proxy.securityContext` | Security
context for Proxy pods | `{}`
|
+| `cluster.fodc.proxy.containerSecurityContext` |
Container-level security context for Proxy | `{}`
|
+| `cluster.fodc.proxy.env` |
Environment variables for Proxy pods | `[]`
|
+| `cluster.fodc.proxy.priorityClassName` | Priority
class name for Proxy pods | `""`
|
+| `cluster.fodc.proxy.updateStrategy.type` | Update
strategy type for Proxy pods |
`RollingUpdate` |
+| `cluster.fodc.proxy.updateStrategy.rollingUpdate.maxUnavailable` | Maximum
unavailable pods during update | `1`
|
+| `cluster.fodc.proxy.updateStrategy.rollingUpdate.maxSurge` | Maximum
surge pods during update | `1`
|
+| `cluster.fodc.proxy.podDisruptionBudget` | Pod
disruption budget for Proxy | `{}`
|
+| `cluster.fodc.proxy.tolerations` |
Tolerations for Proxy pods | `[]`
|
+| `cluster.fodc.proxy.nodeSelector` | Node
selector for Proxy pods | `[]`
|
+| `cluster.fodc.proxy.affinity` | Affinity
rules for Proxy pods | `{}`
|
+| `cluster.fodc.proxy.podAffinityPreset` | Pod
affinity preset for Proxy | `""`
|
+| `cluster.fodc.proxy.podAntiAffinityPreset` | Pod
anti-affinity preset for Proxy | `soft`
|
+| `cluster.fodc.proxy.resources.requests` | Resource
requests for Proxy pods | `[]`
|
+| `cluster.fodc.proxy.resources.limits` | Resource
limits for Proxy pods | `[]`
|
+| `cluster.fodc.proxy.image.repository` | Docker
repository for FODC Proxy |
`ghcr.io/apache/skywalking-banyandb-fodc-proxy` |
+| `cluster.fodc.proxy.image.tag` | Image
tag/version for FODC Proxy (empty for latest) | `""`
|
+| `cluster.fodc.proxy.image.pullPolicy` | Image
pull policy for FODC Proxy |
`IfNotPresent` |
+| `cluster.fodc.proxy.grpcSvc.labels` | Labels
for Proxy gRPC service | `{}`
|
+| `cluster.fodc.proxy.grpcSvc.annotations` |
Annotations for Proxy gRPC service | `{}`
|
+| `cluster.fodc.proxy.grpcSvc.port` | Port
number for Proxy gRPC service (Agent connections) | `17912`
|
+| `cluster.fodc.proxy.httpSvc.labels` | Labels
for Proxy HTTP service | `{}`
|
+| `cluster.fodc.proxy.httpSvc.annotations` |
Annotations for Proxy HTTP service | `{}`
|
+| `cluster.fodc.proxy.httpSvc.port` | Port
number for Proxy HTTP service | `17913`
|
+| `cluster.fodc.proxy.httpSvc.type` | Service
type for Proxy HTTP service (ClusterIP, LoadBalancer, NodePort) |
`LoadBalancer` |
+| `cluster.fodc.proxy.httpSvc.externalIPs` | External
IP addresses for Proxy HTTP service | `[]`
|
+| `cluster.fodc.proxy.httpSvc.loadBalancerIP` | Load
balancer IP for Proxy HTTP service | `nil`
|
+| `cluster.fodc.proxy.httpSvc.loadBalancerSourceRanges` | Allowed
source ranges for Proxy HTTP service | `[]`
|
+| `cluster.fodc.proxy.ingress.enabled` | Enable
ingress for Proxy | `false`
|
+| `cluster.fodc.proxy.ingress.labels` | Labels
for Proxy ingress | `{}`
|
+| `cluster.fodc.proxy.ingress.annotations` |
Annotations for Proxy ingress | `{}`
|
+| `cluster.fodc.proxy.ingress.rules` | Ingress
rules for Proxy | `[]`
|
+| `cluster.fodc.proxy.ingress.tls` | TLS
configuration for Proxy ingress | `[]`
|
+| `cluster.fodc.proxy.config.agentHeartbeatTimeout` | Timeout
for considering agent offline | `30s`
|
+| `cluster.fodc.proxy.config.agentCleanupTimeout` | Timeout
for auto-unregistering offline agents | `5m`
|
+| `cluster.fodc.proxy.config.maxAgents` | Maximum
number of agents allowed to register | `1000`
|
+| `cluster.fodc.proxy.config.grpcMaxMsgSize` | Maximum
gRPC message size in bytes | `4194304`
|
+| `cluster.fodc.proxy.config.httpReadTimeout` | HTTP read
timeout | `10s`
|
+| `cluster.fodc.proxy.config.httpWriteTimeout` | HTTP
write timeout | `10s`
|
+| `cluster.fodc.proxy.config.heartbeatInterval` | Default
heartbeat interval for agents | `10s`
|
+| `cluster.fodc.proxy.livenessProbe.initialDelaySeconds` | Initial
delay for Proxy liveness probe | `10`
|
+| `cluster.fodc.proxy.livenessProbe.periodSeconds` | Probe
period for Proxy liveness probe | `30`
|
+| `cluster.fodc.proxy.livenessProbe.timeoutSeconds` | Timeout
in seconds for Proxy liveness probe | `5`
|
+| `cluster.fodc.proxy.livenessProbe.successThreshold` | Success
threshold for Proxy liveness probe | `1`
|
+| `cluster.fodc.proxy.livenessProbe.failureThreshold` | Failure
threshold for Proxy liveness probe | `5`
|
+| `cluster.fodc.proxy.readinessProbe.initialDelaySeconds` | Initial
delay for Proxy readiness probe | `10`
|
+| `cluster.fodc.proxy.readinessProbe.periodSeconds` | Probe
period for Proxy readiness probe | `30`
|
+| `cluster.fodc.proxy.readinessProbe.timeoutSeconds` | Timeout
in seconds for Proxy readiness probe | `5`
|
+| `cluster.fodc.proxy.readinessProbe.successThreshold` | Success
threshold for Proxy readiness probe | `1`
|
+| `cluster.fodc.proxy.readinessProbe.failureThreshold` | Failure
threshold for Proxy readiness probe | `5`
|
+| `cluster.fodc.proxy.startupProbe.initialDelaySeconds` | Initial
delay for Proxy startup probe | `0`
|
+| `cluster.fodc.proxy.startupProbe.periodSeconds` | Probe
period for Proxy startup probe | `10`
|
+| `cluster.fodc.proxy.startupProbe.timeoutSeconds` | Timeout
in seconds for Proxy startup probe | `5`
|
+| `cluster.fodc.proxy.startupProbe.successThreshold` | Success
threshold for Proxy startup probe | `1`
|
+| `cluster.fodc.proxy.startupProbe.failureThreshold` | Failure
threshold for Proxy startup probe | `60`
|
+
+### Configuration for FODC (First Occurrence Data Collection) Agent sidecar
+
+| Name | Description
| Value
|
+| ------------------------------------------------------ |
---------------------------------------------------------------------------- |
------------------------------------------------- |
+| `cluster.fodc.agent.enabled` | Enable FODC Agent
sidecar (boolean) | `true`
|
+| `cluster.fodc.agent.image.repository` | Docker repository
for FODC Agent |
`ghcr.io/apache/skywalking-banyandb-fodc-agent` |
+| `cluster.fodc.agent.image.tag` | Image tag/version
for FODC Agent (defaults to same as main image) | `""`
|
+| `cluster.fodc.agent.image.pullPolicy` | Image pull policy
for FODC Agent | `IfNotPresent`
|
+| `cluster.fodc.agent.env` | Environment
variables for Agent sidecar | `[]`
|
+| `cluster.fodc.agent.containerSecurityContext` | Container-level
security context for Agent | `{}`
|
+| `cluster.fodc.agent.resources.requests` | Resource requests
for Agent | `[]`
|
+| `cluster.fodc.agent.resources.limits` | Resource limits
for Agent | `[]`
|
+| `cluster.fodc.agent.grpcPort` | GRPC port for
Agent sidecar (not used - agent connects outbound to proxy) | `17914`
|
+| `cluster.fodc.agent.httpPort` | HTTP port for
Agent sidecar (prometheus-listen-addr flag) | `17915`
|
+| `cluster.fodc.agent.config.scrapeInterval` | Interval for
scraping BanyanDB metrics (poll-metrics-interval flag) | `15s`
|
+| `cluster.fodc.agent.config.heartbeatInterval` | Heartbeat interval
to Proxy (heartbeat-interval flag) | `10s`
|
+| `cluster.fodc.agent.config.reconnectInterval` | Reconnect interval
when connection to Proxy is lost (reconnect-interval flag) | `10s`
|
+| `cluster.fodc.agent.config.ktmEnabled` | Enable Kernel
Telemetry Module (affects max-metrics-memory-usage-percentage) | `true`
|
+| `cluster.fodc.agent.livenessProbe.initialDelaySeconds` | Initial delay for
Agent liveness probe | `90`
|
+| `cluster.fodc.agent.livenessProbe.periodSeconds` | Probe period for
Agent liveness probe | `30`
|
+| `cluster.fodc.agent.livenessProbe.timeoutSeconds` | Timeout in seconds
for Agent liveness probe | `5`
|
+| `cluster.fodc.agent.livenessProbe.successThreshold` | Success threshold
for Agent liveness probe | `1`
|
+| `cluster.fodc.agent.livenessProbe.failureThreshold` | Failure threshold
for Agent liveness probe | `5`
|
+| `cluster.fodc.agent.readinessProbe.initialDelaySeconds` | Initial delay for
Agent readiness probe | `60`
|
+| `cluster.fodc.agent.readinessProbe.periodSeconds` | Probe period for
Agent readiness probe | `10`
|
+| `cluster.fodc.agent.readinessProbe.timeoutSeconds` | Timeout in seconds
for Agent readiness probe | `5`
|
+| `cluster.fodc.agent.readinessProbe.successThreshold` | Success threshold
for Agent readiness probe | `1`
|
+| `cluster.fodc.agent.readinessProbe.failureThreshold` | Failure threshold
for Agent readiness probe | `12`
|
+| `cluster.fodc.agent.startupProbe.initialDelaySeconds` | Initial delay for
Agent startup probe | `30`
|
+| `cluster.fodc.agent.startupProbe.periodSeconds` | Probe period for
Agent startup probe | `5`
|
+| `cluster.fodc.agent.startupProbe.timeoutSeconds` | Timeout in seconds
for Agent startup probe | `3`
|
+| `cluster.fodc.agent.startupProbe.successThreshold` | Success threshold
for Agent startup probe | `1`
|
+| `cluster.fodc.agent.startupProbe.failureThreshold` | Failure threshold
for Agent startup probe | `60`
|
+
### Storage configuration for persistent volumes
| Name | Description
| Value
|
diff --git a/test/e2e/e2e-banyandb-fodc-proxy-service.yaml
b/test/e2e/e2e-banyandb-fodc-proxy-service.yaml
new file mode 100644
index 0000000..4120ca0
--- /dev/null
+++ b/test/e2e/e2e-banyandb-fodc-proxy-service.yaml
@@ -0,0 +1,121 @@
+# 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.
+
+# E2E test for FODC proxy service functionality
+
+setup:
+ env: kind
+ file: kind.yaml
+ init-system-environment: env
+ kind:
+ expose-ports:
+ - namespace: istio-system
+ resource: service/skywalking-ui
+ port: 80
+ steps:
+ - name: set PATH
+ command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+ - name: install yq
+ command: bash test/e2e/setup-e2e-shell/install.sh yq
+ - name: install swctl
+ command: bash test/e2e/setup-e2e-shell/install.sh swctl
+ - name: install kubectl
+ command: bash test/e2e/setup-e2e-shell/install.sh kubectl
+ - name: install istio
+ command: |
+ bash test/e2e/setup-e2e-shell/install.sh istioctl
+ istioctl install -y --set profile=demo \
+ --set
meshConfig.defaultConfig.envoyAccessLogService.address=skywalking-oap.istio-system:11800
\
+ --set meshConfig.enableEnvoyAccessLogService=true
+ kubectl label namespace default istio-injection=enabled
+ wait:
+ - namespace: istio-system
+ resource: pod
+ for: condition=ready
+ label-selector: app=istiod
+ - name: Install helm
+ command: bash test/e2e/setup-e2e-shell/install.sh helm
+ - name: Install dependency
+ command: |
+ helm repo add bitnami https://charts.bitnami.com/bitnami
+ cd chart
+ helm dependency update
+ - name: Install BanyanDB with FODC
+ command: helm -n istio-system install banyandb chart/ -f
test/e2e/values.fodc.yaml
+ wait:
+ - namespace: istio-system
+ resource: pod
+ for: condition=ready
+ label-selector: app.kubernetes.io/name=banyandb
+ - namespace: istio-system
+ resource: deployments/banyandb-fodc-proxy
+ for: condition=available
+ - name: Install SkyWalking
+ command: |
+ helm -n istio-system install --timeout 10m skywalking
oci://ghcr.io/apache/skywalking-helm/skywalking-helm \
+ --version "$SW_HELM_VERSION" \
+ --set fullnameOverride=skywalking \
+ --set
oap.env.SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS=k8s-mesh \
+ --set oap.env.SW_ENVOY_METRIC_ALS_TCP_ANALYSIS=k8s-mesh
\
+ --set
oap.env.K8S_SERVICE_NAME_RULE='e2e::${service.metadata.name}' \
+ --set oap.env.SW_STORAGE_BANYANDB_USER=admin \
+ --set oap.env.SW_STORAGE_BANYANDB_PASSWORD=banyandb \
+ --set oap.replicas=1 \
+ --set ui.image.repository=$UI_REPO \
+ --set ui.image.tag=$UI_TAG \
+ --set oap.image.repository=$OAP_REPO \
+ --set oap.image.tag=$OAP_TAG \
+ --set oap.storageType=banyandb \
+ --set elasticsearch.enabled=false \
+ --set banyandb.enabled=false \
+ -f test/e2e/values.yaml
+ wait:
+ - namespace: istio-system
+ resource: deployments/skywalking-oap
+ for: condition=available
+ - name: Deploy demo services
+ command: |
+ kubectl apply -f
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo.yaml
+ kubectl apply -f
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/bookinfo-gateway.yaml
+ # Enable TCP services
+ kubectl apply -f
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml
+ kubectl apply -f
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo-db.yaml
+ kubectl apply -f
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/destination-rule-all.yaml
+ kubectl apply -f
https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/virtual-service-ratings-db.yaml
+ wait:
+ - namespace: default
+ resource: pod
+ for: condition=Ready
+ - name: Generate traffic
+ path: traffic-gen.yaml
+ wait:
+ - namespace: default
+ resource: pod
+ for: condition=Ready
+ timeout: 25m
+
+verify:
+ retry:
+ count: 20
+ interval: 15s
+ cases:
+ # Verify FODC proxy is collecting observability data - check services are
observable
+ - query: swctl --display yaml
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
service ls
+ expected: expected/service.yml
+ # Verify FODC agent is working - check metrics are available for services
+ - query: swctl --display yaml
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
metrics exec --expression=service_sla --service-name=e2e::productpage
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
metrics exec --expression=service_cpm --service-name=e2e::productpage
+ expected: expected/metrics-has-value.yml
diff --git a/test/e2e/env b/test/e2e/env
index b390bee..31cf319 100644
--- a/test/e2e/env
+++ b/test/e2e/env
@@ -22,7 +22,7 @@
SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
SW_KUBERNETES_COMMIT_SHA=6fe5e6f0d3b7686c6be0457733e825ee68cb9b35
SW_ROVER_COMMIT=79292fe07f17f98f486e0c4471213e1961fb2d1d
-SW_BANYANDB_COMMIT=0f3b90d9b4f628d2de02cb39ef678d636358df44
+SW_BANYANDB_COMMIT=6e926242c5bd28cf00a95034f75818c8850d1045
SW_AGENT_PHP_COMMIT=d1114e7be5d89881eec76e5b56e69ff844691e35
SW_PREDICTOR_COMMIT=54a0197654a3781a6f73ce35146c712af297c994
diff --git a/test/e2e/values.cluster.yaml b/test/e2e/values.cluster.yaml
index 1fe46d1..b794229 100644
--- a/test/e2e/values.cluster.yaml
+++ b/test/e2e/values.cluster.yaml
@@ -403,6 +403,9 @@ cluster:
successThreshold: 1
failureThreshold: 60
+ fodc:
+ enabled: false
+
storage:
data:
enabled: true
diff --git a/test/e2e/values.dns.registry.yaml
b/test/e2e/values.dns.registry.yaml
index 279b5a4..6cf581b 100644
--- a/test/e2e/values.dns.registry.yaml
+++ b/test/e2e/values.dns.registry.yaml
@@ -37,6 +37,8 @@ cluster:
value: "true"
roles:
hot: {}
+ fodc:
+ enabled: false
storage:
data:
diff --git a/test/e2e/values.lifecycle.yaml b/test/e2e/values.fodc.yaml
similarity index 63%
copy from test/e2e/values.lifecycle.yaml
copy to test/e2e/values.fodc.yaml
index c547c6a..1d49966 100644
--- a/test/e2e/values.lifecycle.yaml
+++ b/test/e2e/values.fodc.yaml
@@ -13,13 +13,13 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Lifecycle-enabled values for banyandb cluster mode.
-# This is a YAML-formatted file with lifecycle configuration enabled.
+# Default values for banyandb.
+# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
image:
repository: ghcr.io/apache/skywalking-banyandb
- tag: 46083529398b73504e9ca929ef367cd1776aef82
+ tag: 6e926242c5bd28cf00a95034f75818c8850d1045
pullPolicy: IfNotPresent
cluster:
@@ -44,9 +44,7 @@ cluster:
chownUser: 1000
chownGroup: 1000
image: busybox:1.36
- env:
- - name: BYDB_DATA_NODE_SELECTOR
- value: "type=hot"
+ env: []
priorityClassName: ""
podDisruptionBudget: {}
updateStrategy:
@@ -144,27 +142,17 @@ cluster:
port: 17912
sidecar: []
-
backupSidecar:
enabled: true
dest: "file:///tmp/backups/data-$(ORDINAL_NUMBER)"
timeStyle: "daily"
- schedule: "@hourly"
+ schedule: "@every 10s"
customFlags: []
resources: {}
-
- lifecycleSidecar:
- enabled: true
- schedule: "@hourly"
- progressFile: "/tmp/stream/lifecycle/progress.json"
- reportDir: "/tmp/stream/lifecycle/reports"
- resources: {}
-
restoreInitContainer:
enabled: true
customFlags: []
resources: {}
-
livenessProbe:
initialDelaySeconds: 20
periodSeconds: 5
@@ -185,28 +173,14 @@ cluster:
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 60
-
roles:
- hot:
- lifecycleSidecar:
- schedule: "@daily"
- enabled: true
- progressFile: "/tmp/stream/lifecycle/progress.json"
- reportDir: "/tmp/stream/lifecycle/reports"
- warm:
- lifecycleSidecar:
- schedule: "@daily"
- enabled: true
- progressFile: "/tmp/stream/lifecycle/progress.json"
- reportDir: "/tmp/stream/lifecycle/reports"
- cold:
- replicas: 1
-
+ hot: {}
ui:
type: Embedded
standalone:
replicas: 1
- podAnnotations:
+ podAnnotations: # example: banyandb-foo
+
securityContext: {}
env: []
priorityClassName: ""
@@ -224,7 +198,6 @@ cluster:
resources:
requests: []
limits: []
-
httpSvc:
labels: {}
annotations: {}
@@ -240,7 +213,6 @@ cluster:
annotations: {}
rules: []
tls: []
-
livenessProbe:
initialDelaySeconds: 20
periodSeconds: 30
@@ -262,143 +234,148 @@ cluster:
successThreshold: 1
failureThreshold: 60
+ fodc:
+ enabled: true
+ proxy:
+ podAnnotations: {}
+ securityContext: {}
+ containerSecurityContext: {}
+ env: []
+ priorityClassName: ""
+ updateStrategy:
+ type: RollingUpdate
+ rollingUpdate:
+ maxUnavailable: 1
+ maxSurge: 1
+ podDisruptionBudget: {}
+ tolerations: []
+ nodeSelector: []
+ affinity: {}
+ podAffinityPreset: ""
+ podAntiAffinityPreset: soft
+ resources:
+ requests: {}
+ limits: {}
+ image:
+ repository: ghcr.io/apache/skywalking-banyandb-fodc-proxy
+ tag: "6e926242c5bd28cf00a95034f75818c8850d1045"
+ pullPolicy: IfNotPresent
+ grpcSvc:
+ labels: {}
+ annotations: {}
+ port: 17904
+ httpSvc:
+ labels: {}
+ annotations: {}
+ port: 17905
+ type: LoadBalancer
+ externalIPs: []
+ loadBalancerIP: null
+ loadBalancerSourceRanges: []
+ ingress:
+ enabled: false
+ labels: {}
+ annotations: {}
+ rules: []
+ tls: []
+ config:
+ agentHeartbeatTimeout: 30s
+ agentCleanupTimeout: 5m
+ maxAgents: 1000
+ grpcMaxMsgSize: 4194304
+ httpReadTimeout: 10s
+ httpWriteTimeout: 10s
+ heartbeatInterval: 10s
+ livenessProbe:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ timeoutSeconds: 5
+ successThreshold: 1
+ failureThreshold: 5
+ readinessProbe:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ timeoutSeconds: 5
+ successThreshold: 1
+ failureThreshold: 5
+ startupProbe:
+ initialDelaySeconds: 0
+ periodSeconds: 10
+ timeoutSeconds: 5
+ successThreshold: 1
+ failureThreshold: 60
+
+ agent:
+ image:
+ repository: ghcr.io/apache/skywalking-banyandb-fodc-agent
+ tag: "6e926242c5bd28cf00a95034f75818c8850d1045"
+ pullPolicy: IfNotPresent
+ env: []
+ containerSecurityContext: {}
+ resources:
+ requests: []
+ limits: []
+ grpcPort: 17914
+ httpPort: 17915
+ config:
+ scrapeInterval: 15s
+ heartbeatInterval: 10s
+ ktmEnabled: true
+ livenessProbe:
+ initialDelaySeconds: 90
+ periodSeconds: 30
+ timeoutSeconds: 5
+ successThreshold: 1
+ failureThreshold: 5
+ readinessProbe:
+ initialDelaySeconds: 60
+ periodSeconds: 10
+ timeoutSeconds: 5
+ successThreshold: 1
+ failureThreshold: 12
+ startupProbe:
+ initialDelaySeconds: 30
+ periodSeconds: 5
+ timeoutSeconds: 3
+ successThreshold: 1
+ failureThreshold: 60
+
storage:
data:
enabled: true
persistentVolumeClaims:
- - mountTargets: [ "measure" ]
- nodeRole: hot
- existingClaimName: null
- claimName: hot-measure-data
- size: 50Gi
- accessModes:
- - ReadWriteOnce
- storageClass: null
- volumeMode: Filesystem
- - mountTargets: [ "stream" ]
+ - mountTargets: [ "measure", "stream", "property", "trace" ]
nodeRole: hot
existingClaimName: null
- claimName: hot-stream-data
- size: 50Gi
- accessModes:
- - ReadWriteOnce
- storageClass: null
- volumeMode: Filesystem
- - mountTargets: [ "property" ]
- nodeRole: hot
- existingClaimName: null
- claimName: hot-property-data
+ claimName: data
size: 5Gi
accessModes:
- ReadWriteOnce
storageClass: null
volumeMode: Filesystem
- - mountTargets: [ "trace" ]
- nodeRole: hot
- existingClaimName: null
- claimName: hot-trace-data
- size: 50Gi
- accessModes:
- - ReadWriteOnce
- storageClass: null
- volumeMode: Filesystem
- - mountTargets: [ "measure" ]
- nodeRole: warm
- existingClaimName: null
- claimName: warm-measure-data
- size: 100Gi
- accessModes:
- - ReadWriteOnce
- storageClass: null
- volumeMode: Filesystem
- - mountTargets: [ "stream" ]
- nodeRole: warm
- existingClaimName: null
- claimName: warm-stream-data
- size: 100Gi
- accessModes:
- - ReadWriteOnce
- storageClass: null
- volumeMode: Filesystem
- - mountTargets: [ "property" ]
- nodeRole: warm
- existingClaimName: null
- claimName: warm-property-data
- size: 10Gi
- accessModes:
- - ReadWriteOnce
- storageClass: null
- volumeMode: Filesystem
- - mountTargets: [ "trace" ]
- nodeRole: warm
- existingClaimName: null
- claimName: warm-trace-data
- size: 100Gi
- accessModes:
- - ReadWriteOnce
- storageClass: null
- volumeMode: Filesystem
- - mountTargets: [ "measure" ]
- nodeRole: cold
- existingClaimName: null
- claimName: cold-measure-data
- size: 200Gi
- accessModes:
- - ReadWriteOnce
- storageClass: null
- volumeMode: Filesystem
- - mountTargets: [ "stream" ]
- nodeRole: cold
- existingClaimName: null
- claimName: cold-stream-data
- size: 200Gi
- accessModes:
- - ReadWriteOnce
- storageClass: null
- volumeMode: Filesystem
- - mountTargets: [ "property" ]
- nodeRole: cold
- existingClaimName: null
- claimName: cold-property-data
- size: 20Gi
- accessModes:
- - ReadWriteOnce
- storageClass: null
- volumeMode: Filesystem
- - mountTargets: [ "trace" ]
- nodeRole: cold
- existingClaimName: null
- claimName: cold-trace-data
- size: 200Gi
- accessModes:
- - ReadWriteOnce
- storageClass: null
- volumeMode: Filesystem
- mountTargets: [ "backups" ]
nodeRole: hot
existingClaimName: null
- claimName: hot-backups
- size: 10Gi
+ claimName: backups
+ size: 5Gi
accessModes:
- ReadWriteOnce
storageClass: null
volumeMode: Filesystem
-
liaison:
enabled: true
persistentVolumeClaims:
- - mountTargets: [ "measure", "stream" ]
+ - mountTargets: [ "measure", "stream", "trace" ]
claimName: liaison-data
size: 10Gi
accessModes:
- ReadWriteOnce
storageClass: null
volumeMode: Filesystem
-
standalone:
enabled: false
persistentVolumeClaims:
- - mountTargets: [ "measure", "stream", "property" ]
+ - mountTargets: [ "measure", "stream", "property", "trace" ]
claimName: standalone-data
size: 200Gi
accessModes:
@@ -407,8 +384,12 @@ storage:
volumeMode: Filesystem
serviceAccount:
+ # Specifies whether a service account should be created
create: true
+ # 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: ""
etcd:
@@ -429,16 +410,14 @@ etcd:
token:
enabled: true
type: simple
- livenessProbe:
- initialDelaySeconds: 10
- readinessProbe:
- initialDelaySeconds: 10
- autoCompactionMode: periodic
- autoCompactionRetention: "1"
- defrag:
- enabled: true
- cronjob:
- schedule: "0 0 * * *"
fullnameOverride: ""
nameOverride: "banyandb"
+
+auth:
+ enabled: true
+ existingSecret: ""
+ credentialsFileKey: "credentials.yaml"
+ users:
+ - username: admin
+ password: banyandb
diff --git a/test/e2e/values.lifecycle.yaml b/test/e2e/values.lifecycle.yaml
index c547c6a..af24ab0 100644
--- a/test/e2e/values.lifecycle.yaml
+++ b/test/e2e/values.lifecycle.yaml
@@ -262,6 +262,9 @@ cluster:
successThreshold: 1
failureThreshold: 60
+ fodc:
+ enabled: false
+
storage:
data:
enabled: true