Skip to content

feat: New akvorado, clickhouse and kafka chart #72

Merged
duchieu2k merged 5 commits into
mainfrom
feature/netflows
Sep 8, 2025
Merged

feat: New akvorado, clickhouse and kafka chart #72
duchieu2k merged 5 commits into
mainfrom
feature/netflows

Conversation

@duchieu2k
Copy link
Copy Markdown
Contributor

@duchieu2k duchieu2k commented Aug 27, 2025

Summary by CodeRabbit

  • New Features

    • Added Helm charts to deploy Akvorado, Kafka (Strimzi), and ClickHouse (Altinity) with configurable images, replicas, services, and init checks.
    • Akvorado now includes console, inlet, orchestrator, Redis, GeoIP sidecar, and persistent storage (PV/PVC) options.
    • ClickHouse chart adds operator-backed cluster and keeper CRs plus credential secret support.
    • Values expose Kafka/ClickHouse sizing, networking, and storage settings.
  • Documentation

    • Added READMEs with prerequisites, configuration parameters, and install/uninstall instructions for each chart.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Aug 27, 2025

Walkthrough

Adds three new Helm charts (akvorado, clickhouse, kafka) with chart metadata, values, templates (Deployments, Services, PV/PVCs, ConfigMaps, Secrets, CRs) and helper templates; includes README and .helmignore files and initContainer wait logic in several Deployments.

Changes

Cohort / File(s) Summary
Akvorado chart core
kubernetes/akvorado/Chart.yaml, kubernetes/akvorado/values.yaml, kubernetes/akvorado/README.md, kubernetes/akvorado/.helmignore
New Helm chart metadata, comprehensive defaults (console, inlet, orchestrator, redis, geoip, clickhouse integration, kafka), docs, and packaging ignore rules.
Akvorado templates — helpers & config
kubernetes/akvorado/templates/_helpers.tpl, kubernetes/akvorado/templates/akvorado-orchestrator-configmap.yaml
Adds generate_clickhouse_list helper and orchestrator ConfigMap template embedding akvorado/console/inlet YAML with conditional ClickHouse server generation.
Akvorado orchestrator
kubernetes/akvorado/templates/akvorado-orchestrator-deployment.yaml, kubernetes/akvorado/templates/akvorado-orchestrator-service.yaml
Orchestrator Deployment (init wait for Kafka, geoip sidecar, mounts) and Service (port 8080).
Akvorado inlet
kubernetes/akvorado/templates/akvorado-inlet-deployment.yaml, kubernetes/akvorado/templates/akvorado-inlet-service.yaml, kubernetes/akvorado/templates/akvorado-inlet-persistentvolumeclaim.yaml
Inlet Deployment (init wait for orchestrator, UDP/TCP ports, shared persistence), Service (2055/6343/10179), and SeaweedFS PV/PVC.
Akvorado console
kubernetes/akvorado/templates/akvorado-console-deployment.yaml, kubernetes/akvorado/templates/akvorado-console-service.yaml, kubernetes/akvorado/templates/akvorado-console-persistentvolumeclaim.yaml
Console Deployment (waits for orchestrator), Service (8080, optional loadBalancerIP), and SeaweedFS PV/PVC for shared persistence.
Akvorado geoip & redis
kubernetes/akvorado/templates/akvorado-geoip-persistentvolumeclaim.yaml, kubernetes/akvorado/templates/akvorado-redis-deployment.yaml, kubernetes/akvorado/templates/akvorado-redis-service.yaml
GeoIP PV/PVC (SeaweedFS, Retain) and Redis Deployment + Service (cache, liveness probe).
ClickHouse chart core
kubernetes/clickhouse/Chart.yaml, kubernetes/clickhouse/values.yaml, kubernetes/clickhouse/README.md, kubernetes/clickhouse/.helmignore
New ClickHouse chart metadata, defaults (clickhouse/keeper, users, volumes), docs, and packaging ignore rules.
ClickHouse templates — helpers & resources
kubernetes/clickhouse/templates/_helpers.tpl, kubernetes/clickhouse/templates/clickhouse.yaml, kubernetes/clickhouse/templates/clickhouseKeeper.yaml, kubernetes/clickhouse/templates/secret.yaml
Naming/label helpers; ClickHouseInstallation CR template; ClickHouseKeeperInstallation CR template; credentials Secret (per-user sha256 hashed passwords).
Kafka chart core
kubernetes/kafka/Chart.yaml, kubernetes/kafka/values.yaml, kubernetes/kafka/README.md, kubernetes/kafka/.helmignore
New Kafka chart metadata, defaults (Strimzi-based Kafka/Zookeeper config, persistence, resources), docs, and packaging ignore rules.
Kafka template — Strimzi CR
kubernetes/kafka/templates/kafka.yaml
Adds Strimzi Kafka CR template (kafka + zookeeper + entityOperator), listeners, storage, pod affinity, and resource mappings.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Exporter as Flow Exporters
  participant Inlet as Akvorado Inlet
  participant Orch as Akvorado Orchestrator
  participant Kafka as Kafka (Strimzi)
  participant CH as ClickHouse
  participant Console as Console
  participant Redis as Redis
  participant GeoIP as GeoIP Sidecar

  note over Inlet,Orch: Startup ordering
  Inlet->>Orch: init wait for orchestrator:8080
  Orch->>Kafka: init wait for kafka-external:9094

  note over Exporter,Inlet: Ingest
  Exporter-->>Inlet: NetFlow/sFlow
  Inlet->>Orch: metadata/register
  Inlet->>Kafka: produce flows

  note over Kafka,CH: Storage pipeline
  Kafka-->>CH: consume/ingest
  Orch->>CH: manage schema/writes (via config)

  note over Console,Redis: Query path
  Console->>Orch: API requests
  Console->>Redis: cache reads
  Orch->>CH: read analytics
  CH-->>Orch: results
  Orch-->>Console: responses
Loading
sequenceDiagram
  autonumber
  participant User as helm/kubectl
  participant K8s as Kubernetes
  participant CM as ConfigMap
  participant PV as SeaweedFS PV/PVC
  participant Deploys as Deployments/CRs

  User->>K8s: helm install charts (akvorado/clickhouse/kafka)
  K8s-->>CM: create orchestrator ConfigMap and related config
  K8s-->>PV: create PV/PVCs (console/inlet/geoip)
  K8s-->>Deploys: create Deployments and CRs (orchestrator, inlet, console, redis, clickhouse, keeper, kafka)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~70 minutes

Suggested reviewers

  • tuhoanganh
  • vyvuvivo
✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/netflows

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 27

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
kubernetes/akvorado/Chart.yaml (1)

1-30: Fix CRLF newlines (YAML lint failing).

YAMLlint reports “wrong new line character: expected \n”. Convert file EOLs to LF to unblock CI.

kubernetes/kafka/Chart.yaml (1)

1-30: Fix CRLF newlines (YAML lint failing).

Convert to LF; current EOLs cause YAMLlint error.

🧹 Nitpick comments (59)
kubernetes/akvorado/Chart.yaml (3)

27-29: Use a clearer SemVer constraint for dependencies.

Prefer ^1 or >=1.0.0 <2.0.0 over 1.x.x for compatibility with Helm’s Masterminds/semver.

 dependencies:
   - name: common
     repository: https://svtechnmaa.github.io/charts/artifacthub/
-    version: 1.x.x
+    version: ^1.0.0

20-24: Confirm appVersion reflects the deployed Akvorado version.

If this charts an Akvorado release, align appVersion with the actual image/tag used. If not known, omit or set accurately.


1-3: Add chart metadata for installability and cataloging.

kubeVersion gate + metadata (home, sources, maintainers, keywords) improves UX and Artifact Hub listing.

 apiVersion: v2
 name: akvorado
 description: A Helm chart for Kubernetes
+type: application
+kubeVersion: ">=1.25.0-0"
+home: https://akvorado.net/
+sources:
+  - https://github.com/akvorado/akvorado
+keywords:
+  - netflow
+  - ipfix
+  - sflow
+maintainers:
+  - name: svtechnmaa
+    email: noreply@example.com
kubernetes/akvorado/.helmignore (2)

1-24: Normalize EOL to LF.

Same CRLF issue as other files; keep LF for Helm packaging.


19-23: Harden .helmignore with common Helm artifacts.

Avoid packaging nested charts, locks, and archives.

 *.tmproj
 .vscode/
+charts/
+Chart.lock
+tmp/
+*.tgz
kubernetes/clickhouse/.helmignore (1)

1-24: Add standard Helm ignores and normalize EOL.

Mirror additions made in akvorado/.helmignore; ensure LF newlines.

 *.tmproj
 .vscode/
+charts/
+Chart.lock
+tmp/
+*.tgz
kubernetes/kafka/.helmignore (1)

1-24: Add standard Helm ignores and normalize EOL.

Same as other charts; add charts/, Chart.lock, tmp/, *.tgz and use LF.

 *.tmproj
 .vscode/
+charts/
+Chart.lock
+tmp/
+*.tgz
kubernetes/kafka/Chart.yaml (3)

27-29: Tighten dependency version constraint.

   - name: common
     repository: https://svtechnmaa.github.io/charts/artifacthub/
-    version: 1.x.x
+    version: ^1.0.0

20-24: Set appVersion to the actual target (Kafka or Strimzi).

“1.16.0” looks like the helm create default. If this installs Strimzi CRs, appVersion should match the Strimzi operator (or Kafka) version used by the templates/images.


1-3: Add kubeVersion and metadata.

Improves UX and discovery.

 apiVersion: v2
 name: kafka
 description: A Helm chart for Kubernetes
+type: application
+kubeVersion: ">=1.25.0-0"
+home: https://strimzi.io/
+sources:
+  - https://github.com/strimzi/strimzi-kafka-operator
+keywords:
+  - kafka
+  - strimzi
+maintainers:
+  - name: svtechnmaa
+    email: noreply@example.com
kubernetes/akvorado/README.md (3)

31-36: Fix grammar in parameters table.

Minor wording/grammar issues; tighten phrasing.

-| `global.kafka.topic`                   | Define Kafka topic, must defined in global to reuse in another charts (like kafka,...)                    | ""            |
-| `global.kafka.partition`               | Define Kafka partition, must defined in global to reuse in another charts (like kafka,...)                | 1             |
-| `global.kafka.replicationFactor`       | Define Kafka replication factor, must defined in global to reuse in another charts (like kafka,...)       | 1             |
-| `inlet.config.providers`               | Define device subnet and community for collecting additional information                                  | `::/0-public` |
-| `geoip.env`                            | Define ipinfo db for getting geoip data and update time                                                   | {}            |
-| `clickhouse`                           | Define clickhouse cluster for connecting database                                                         | {}            |
+| `global.kafka.topic`                   | Kafka topic (set under `global` for reuse by other charts, e.g., Kafka)                                   | ""            |
+| `global.kafka.partition`               | Kafka partitions (set under `global` for reuse by other charts)                                           | 1             |
+| `global.kafka.replicationFactor`       | Kafka replication factor (set under `global` for reuse by other charts)                                   | 1             |
+| `inlet.config.providers`               | Device subnet and community for enrichment                                                                | `::/0-public` |
+| `geoip.env`                            | GeoIP-related environment (e.g., provider token, update schedule)                                         | {}            |
+| `clickhouse`                           | ClickHouse connection/cluster configuration                                                               | {}            |

14-16: Call out required CRDs/operators in prerequisites.

Mention the Strimzi (Kafka) and ClickHouse Operator CRDs must be installed first.

 - Kafka cluster
 - ClickHouse cluster
+- Strimzi Kafka Operator installed (CRDs present)
+- ClickHouse Operator installed (CRDs present)

39-45: Show a values override install example.

Add an example with a user-provided values file and dependency update.

   helm install akvorado /opt/charts/kubernetes/akvorado \
       --namespace akvorado \
       --create-namespace
+
+# Alternatively with overrides:
+# helm dependency update /opt/charts/kubernetes/akvorado
+# helm upgrade --install akvorado /opt/charts/kubernetes/akvorado \
+#   --namespace akvorado --create-namespace -f my-values.yaml
kubernetes/akvorado/templates/_helpers.tpl (1)

1-15: Emit a proper YAML list with toYaml; simplify loops and validate inputs.

Avoid manual hyphens/newlines and ensure indentation is handled at the call site.

-{{- define "generate_clickhouse_list" -}}
-{{- $clusterName := .clusterName -}}
-{{- $replicaCount := .replicaCount | int -}}
-{{- $shardCount := .shardCount | int -}}
-{{- $releaseName := .releaseName -}}
-
-{{- range $i, $ := until $shardCount }}
-  {{- range $j, $ := until $replicaCount }}
-      {{- printf "- chi-%s-clickhouse-%s-%d-%d:9000" $releaseName $clusterName $i $j -}}
-      {{- if not (and (eq $i (sub $shardCount 1)) (eq $j (sub $replicaCount 1))) }}
-      {{- printf "\n" -}}
-      {{- end -}}
-  {{- end -}}
-{{- end -}}
-{{- end -}}
+{{- define "generate_clickhouse_list" -}}
+{{- $clusterName := .clusterName -}}
+{{- $replicaCount := int .replicaCount -}}
+{{- $shardCount := int .shardCount -}}
+{{- $releaseName := .releaseName -}}
+{{- if or (lt $replicaCount 1) (lt $shardCount 1) -}}
+{{- fail "generate_clickhouse_list: shardCount and replicaCount must be >= 1" -}}
+{{- end -}}
+{{- $servers := list -}}
+{{- range $i := until $shardCount -}}
+  {{- range $j := until $replicaCount -}}
+    {{- $servers = append $servers (printf "chi-%s-clickhouse-%s-%d-%d:9000" $releaseName $clusterName $i $j) -}}
+  {{- end -}}
+{{- end -}}
+{{- toYaml $servers -}}
+{{- end -}}

Confirm port 9000 is the intended ClickHouse native port for Akvorado in your setup; expose it as a value if customization is needed.

kubernetes/akvorado/templates/akvorado-inlet-persistentvolumeclaim.yaml (1)

14-21: Be explicit with volumeMode and normalize line endings.

  • Explicit volumeMode improves clarity for CSI drivers.
  • File has CRLF and trailing space; switch repo to LF to avoid lint errors.
 spec:
   capacity:
     storage: {{ .Values.inlet.sharedPersistenceVolume.storageSize }}
   csi:
     driver: seaweedfs-csi-driver
@@
   persistentVolumeReclaimPolicy: Retain
   storageClassName: {{ $namespace }}-{{ .Values.inlet.sharedPersistenceVolume.storageClass }}
+  volumeMode: Filesystem

Add a repo-wide .gitattributes to ensure LF:

* text=auto eol=lf
*.sh text eol=lf
*.yaml text eol=lf
*.yml  text eol=lf
kubernetes/clickhouse/Chart.yaml (1)

28-28: Add newline at end of file.

Small formatting nit; some tooling expects a trailing newline.

-    repository: https://svtechnmaa.github.io/charts/artifacthub/
\ No newline at end of file
+    repository: https://svtechnmaa.github.io/charts/artifacthub/
+
kubernetes/akvorado/templates/akvorado-inlet-service.yaml (2)

10-19: Use descriptive port names.

Numeric names are allowed but not descriptive; prefer well-known names.

-    - name: "2055"
+    - name: "netflow-2055"
@@
-    - name: "6343"
+    - name: "sflow-6343"
@@
-    - name: "10179"
+    - name: "ipfix-10179"

24-27: Preserve client source IP for flow telemetry.

For LoadBalancer/NodePort, set externalTrafficPolicy: Local.

   type: {{ .Values.inlet.service.type }}
   {{- if and (eq .Values.inlet.service.type "LoadBalancer") (not (empty .Values.global.backendVip)) }}
   loadBalancerIP: {{ .Values.global.backendVip }}
   {{- end }}
+  {{- if or (eq .Values.inlet.service.type "LoadBalancer") (eq .Values.inlet.service.type "NodePort") }}
+  externalTrafficPolicy: Local
+  {{- end }}

Confirm your LB/ingress stack supports UDP on these ports (e.g., MetalLB).

kubernetes/akvorado/values.yaml (3)

78-81: Avoid :latest for container images. Pin the GeoIP image to a version.

   image:
     repository: ghcr.io/akvorado/ipinfo-geoipupdate
-    tag: latest
+    tag: "vX.Y.Z"  # pin a tested, immutable tag
     pullPolicy: IfNotPresent

98-100: Don’t hardcode cluster IPs for ClickHouse; use stable DNS.

ClusterIP addresses change. Prefer service DNS from your ClickHouse operator/CRD.

   servers:
-  - 10.98.5.221:9000
-  - 10.98.5.222:9000
-  - 10.98.5.223:9000
+  - clickhouse-0.clickhouse.<namespace>.svc.cluster.local:9000
+  - clickhouse-1.clickhouse.<namespace>.svc.cluster.local:9000
+  - clickhouse-2.clickhouse.<namespace>.svc.cluster.local:9000

If you already expose a headless service, align with that FQDN pattern.


1-103: Normalize line endings and strip trailing spaces.

CRLFs and trailing spaces break linters/CI (yaml-lint flags at Line 18 and Line 43). Enforce LF via .gitattributes and run a whitespace cleanup.

kubernetes/akvorado/templates/akvorado-inlet-deployment.yaml (3)

31-38: Release-safe service naming: prefer Release.Name (or fullname) for DNS targets.

Using .Chart.Name collides across multiple releases in the same namespace.

-              until nc -zvw5 {{ .Chart.Name }}-orchestrator.{{ .Release.Namespace }}.svc.cluster.local 8080; do echo "Waiting for Orchestrator..."; sleep 2; done
+              until nc -zvw5 {{ .Release.Name }}-orchestrator.{{ .Release.Namespace }}.svc.cluster.local 8080; do echo "Waiting for Orchestrator..."; sleep 2; done
@@
-            - http://{{ .Chart.Name }}-orchestrator:8080
+            - http://{{ .Release.Name }}-orchestrator:8080

If you have a common.names.fullname, use that instead.


43-49: Expose ports via values to make the chart environment-agnostic.

Hardcoding NetFlow/sFlow ports limits reuse.

Example (requires adding to values.yaml and the Service template too):

-            - containerPort: 2055
+            - containerPort: {{ .Values.inlet.ports.netflow }}
               protocol: UDP
-            - containerPort: 6343
+            - containerPort: {{ .Values.inlet.ports.sflow }}
               protocol: UDP
-            - containerPort: 10179
+            - containerPort: {{ .Values.inlet.ports.tcp }}
               protocol: TCP

34-53: Add liveness/readiness probes for the inlet.

Improves rollout safety and detection of stuck receivers.

         - args:
             - inlet
             - http://{{ .Release.Name }}-orchestrator:8080
+          readinessProbe:
+            httpGet:
+              path: /health
+              port: 8080
+            initialDelaySeconds: 5
+            periodSeconds: 10
+          livenessProbe:
+            httpGet:
+              path: /health
+              port: 8080
+            initialDelaySeconds: 15
+            periodSeconds: 20

Adjust paths/port to the inlet’s actual health endpoint.

kubernetes/akvorado/templates/akvorado-console-service.yaml (2)

3-8: Use Release.Name (or fullname) for the Service name to avoid cross-release clashes.

-  name: {{ .Chart.Name }}-console
+  name: {{ .Release.Name }}-console

16-19: Optionally preserve client IPs for LB traffic.

If you need source IPs, set externalTrafficPolicy and healthCheckNodePort (MetalLB/Env dependent).

   type: {{ .Values.console.service.type }}
   {{- if and (eq .Values.console.service.type "LoadBalancer") (not (empty .Values.global.frontendVip)) }}
   loadBalancerIP: {{ .Values.global.frontendVip }}
   {{- end }}
+  {{- if eq .Values.console.service.type "LoadBalancer" }}
+  externalTrafficPolicy: Local
+  {{- end }}
kubernetes/akvorado/templates/akvorado-console-persistentvolumeclaim.yaml (1)

1-9: Minor: consider adding labels and volumeMode to PV.

Helpful for ops, and explicit Filesystem mode.

 kind: PersistentVolume
 metadata:
   name: {{ $namespace }}-{{ .Values.console.sharedPersistenceVolume.pvcName }}-pv
   annotations:
     helm.sh/resource-policy: keep
+  labels:
+    app.kubernetes.io/name: {{ .Chart.Name }}
+    app.kubernetes.io/component: {{ .Chart.Name }}-console
 spec:
+  volumeMode: Filesystem
kubernetes/akvorado/templates/akvorado-orchestrator-service.yaml (1)

4-4: Trim trailing whitespace on Line 4.

-  labels: 
+  labels:
kubernetes/kafka/values.yaml (4)

4-4: Avoid empty topic default.

Empty string is easy to ship by accident; either provide a sensible default or fail fast if unset.

-    topic: ""
+    # topic for producers/consumers; must be non-empty
+    topic: "netflow"

Or add a required check in templates.


10-16: Kafka resource requests are too low for a broker.

50Mi memory will likely OOM even at idle; consider ≥512Mi (often 2–4Gi) and higher cpu requests for stability.

Would you like me to propose sizing presets for dev vs prod?


25-33: Zookeeper: single replica with 3-broker cluster.

OK for dev; for HA consider 3 replicas, or move to KRaft mode with Kafka 3.8 to eliminate ZK.


1-41: Normalize line endings to LF.

YAML linter flagged CRLF; convert to LF to avoid CI diffs.

kubernetes/akvorado/templates/akvorado-redis-deployment.yaml (3)

15-17: Deployment strategy rendering can be invalid.

Setting rollingUpdate: null is unnecessary and may confuse reviews. Only render when RollingUpdate.

-  strategy:
-    type: {{ .Values.redis.updateStrategy }}
-    rollingUpdate: null
+  {{- if eq .Values.redis.updateStrategy "RollingUpdate" }}
+  strategy:
+    type: RollingUpdate
+  {{- else }}
+  strategy:
+    type: Recreate
+  {{- end }}

23-37: Missing resources and hardened securityContext.

Add requests/limits and drop root caps.

       containers:
         - env:
@@
           name: redis
+          resources:
+            requests:
+              cpu: 50m
+              memory: 128Mi
+            limits:
+              cpu: 500m
+              memory: 512Mi
+          securityContext:
+            runAsNonRoot: true
+            allowPrivilegeEscalation: false
+            readOnlyRootFilesystem: true
+            seccompProfile:
+              type: RuntimeDefault
+      securityContext:
+        fsGroup: 1001

1-38: Normalize line endings to LF.

Resolve YAML lint “expected \n”.

kubernetes/clickhouse/README.md (3)

1-6: Fix grammar/typos and clarity in the intro.

-# Clickhouse Chart
-This chart defines Clickhouse DB Cluter as Kubernetes objects and it depend on the Clickhouse Operator, which is available at https://docs.altinity.com/clickhouse-operator
-In detail:
-- The ClickHouseKeeperInstallation Object is created to define Keeper (replicas, podTemplate, VolumeClaimTemplates).
-- The ClickHouseInstallation Object is created to define the ClickHouse cluster (keeper, replicas, shards, podTemplate, VolumeClaimTemplates).
-- The secret named clickhouse-credentials containt password that allow administrators to access to Clickhouse DB.
+# ClickHouse Chart
+This chart defines a ClickHouse DB cluster as Kubernetes objects and depends on the ClickHouse Operator (see operator docs).
+In detail:
+- A ClickHouseKeeperInstallation defines Keeper (replicas, podTemplate, volumeClaimTemplates).
+- A ClickHouseInstallation defines the ClickHouse cluster (keeper, replicas, shards, podTemplate, volumeClaimTemplates).
+- The Secret named `clickhouse-credentials` contains admin credentials for ClickHouse.

36-44: Avoid documenting real passwords in defaults.

Replace the example with placeholders; recommend pre-hashed or external secret flow.

-| `global.clickhouse.users`               | Define username-host-password for clickhouse                                                                | juniper-0.0.0.0/0-juniper@123 |
+| `global.clickhouse.users`               | Define users (name, networks, passwordSha256Hex)                                                            | juniper-0.0.0.0/0-<sha256>     |

45-50: Add dependency build step before install.

If the chart depends on common libs, ensure dependencies are pulled.

-helm install clickhouse /opt/charts/kubernetes/clickhouse \
+helm dependency build /opt/charts/kubernetes/clickhouse
+helm install clickhouse /opt/charts/kubernetes/clickhouse \
     --namespace clickhouse \
     --create-namespace
kubernetes/akvorado/templates/akvorado-redis-service.yaml (1)

1-17: Normalize line endings to LF.

Resolve YAML lint “expected \n”.

kubernetes/akvorado/templates/akvorado-console-deployment.yaml (3)

26-33: Ensure nc is available in the init image or switch to a more ubiquitous probe.

Many minimal images lack netcat. Consider BusyBox wget/timeout or curl to reduce fragility.

-          command:
-            - /bin/sh
-            - -c
-            - |
-              until nc -zvw5 {{ .Release.Name }}-orchestrator.{{ .Release.Namespace }}.svc.cluster.local 8080; do echo "Waiting for Orchestrator..."; sleep 2; done
+          command:
+            - /bin/sh
+            - -c
+            - |
+              until wget -qO- --spider http://{{ .Release.Name }}-orchestrator.{{ .Release.Namespace }}.svc.cluster.local:8080/healthz; do echo "Waiting for Orchestrator..."; sleep 2; done

34-47: Add health probes and resource requests/limits for stability.

Console lacks readiness/liveness probes and resource constraints; add them via values for safer rollouts.


1-52: Normalize line endings to LF.

YAMLlint flagged CRLF. Add a repo-level .gitattributes to enforce LF for yaml/yml.

+*.yaml text eol=lf
+*.yml  text eol=lf
kubernetes/akvorado/templates/akvorado-orchestrator-deployment.yaml (3)

41-47: Trim extra spaces after colons.

Double spaces after value: can trip linters.

-              value:  {{ .Values.geoip.env.ipinfo_db | quote }}
+              value: {{ .Values.geoip.env.ipinfo_db | quote }}
@@
-              value:  {{ .Values.geoip.env.update_time | quote }}
+              value: {{ .Values.geoip.env.update_time | quote }}

54-55: Remove trailing whitespace and add imagePullPolicy.

One trailing space on Line 54; also align pull policy handling with other components.

-          image: {{ include "common.images.image" ( dict "imageRoot" .Values.orchestrator.image ) }} 
+          image: {{ include "common.images.image" ( dict "imageRoot" .Values.orchestrator.image ) }}
+          imagePullPolicy: {{ .Values.orchestrator.image.pullPolicy | quote }}

24-33: Optional: replace nc check with HTTP health probe and add container probes.

More robust and faster rollouts.

kubernetes/kafka/templates/kafka.yaml (3)

31-33: Consider moving protocol version to values and matching Kafka version.

Hard-coding "3.8" can hinder upgrades; make it configurable and validate against .Values.kafka.version.


53-55: Running as root (runAsUser: 0).

Running Kafka/ZK as root is usually unnecessary and may fail under PSP/PodSecurity. Prefer the image’s default UID.

Also applies to: 74-76


1-81: YAML/template linting: ignore false positives but keep LF endings consistent.

Top-level Helm variable assignment confuses yamllint; safe to ignore. Still, enforce LF endings.

kubernetes/akvorado/templates/akvorado-orchestrator-configmap.yaml (2)

52-52: Remove trailing spaces to satisfy linters.

-      
+

1-132: YAML structure/order.

While valid, placing kind/metadata after data confused yamllint. Consider moving them next to apiVersion for readability.

kubernetes/clickhouse/templates/clickhouse.yaml (3)

20-27: Render networks as a proper YAML list under the key.

Safer to break key/value across lines to avoid formatting edge cases.

-      {{ .name }}/networks/ip: {{ toYaml .networks | nindent 8 }}
+      {{ .name }}/networks/ip:
+        {{- toYaml .networks | nindent 8 }}

65-74: Guard Akvorado-specific mounts behind the same conditional block.

You already guard volumeMounts/volumes; keep the structure tight and ensure no stray whitespace.

-          {{- end }}
-              
+          {{- end }}

76-80: Add a trailing newline and keep formatting consistent.

-    {{- end }}
+    {{- end }}
+
kubernetes/kafka/README.md (2)

2-5: Fix bare URL and minor wording.

Avoid bare URLs and tighten phrasing.

-This chart defines a Kafka cluster as Kubernetes objects and it depends on the Strimzi Kafka Operator, which is available at https://strimzi.io/docs/
+This chart defines a Kafka cluster as Kubernetes objects and depends on the Strimzi Kafka Operator (see: https://strimzi.io/docs/).
 In detail:
-- The Kafka Object is created to define the Kafka cluster (replicas, version, listeners, config, etc.) and Zookeeper cluster (storage, resources, replicas, etc.)
+- The Kafka object defines the Kafka cluster (replicas, version, listeners, config, etc.) and the ZooKeeper cluster (storage, resources, replicas, etc.).

8-15: Add languages to fenced code blocks (markdownlint MD040).

Specify languages for all fenced blocks.

-```
+```text
 ...
-```
+```

-    ```
+    ```bash
     wget https://github.com/strimzi/strimzi-kafka-operator/releases/download/0.45.0/strimzi-cluster-operator-0.45.0.yaml
     sed 's/myproject/netflows/' strimzi-cluster-operator-0.45.0.yaml > strimzi.yaml
     kubectl apply -f strimzi.yaml
-    ```
+    ```

-    ```
+    ```bash
     cd /opt
     git clone https://github.com/svtechnmaa/charts.git
-    ```
+    ```

-    ```
+    ```bash
     helm install kafka /opt/charts/kubernetes/kafka \
         --namespace kafka \
         --create-namespace
-    ```
+    ```

-    ```
+    ```bash
     helm uninstall kafka \
         --namespace kafka
-    ```
+    ```

Also applies to: 20-24, 27-30, 46-50, 53-56

kubernetes/akvorado/templates/akvorado-geoip-persistentvolumeclaim.yaml (1)

20-21: Trailing spaces and formatting.

Trim trailing spaces to satisfy linters.

-  storageClassName: {{ $namespace }}-{{ .Values.geoip.sharedPersistenceVolume.storageClass }}
-  
+  storageClassName: {{ $namespace }}-{{ .Values.geoip.sharedPersistenceVolume.storageClass }}
kubernetes/clickhouse/templates/clickhouseKeeper.yaml (1)

53-55: No newline at EOF.

Add a trailing newline.

-      - name: default
-        spec: {{ toYaml .Values.clickhouseKeeper.volumes | nindent 10 }}
+      - name: default
+        spec: {{ toYaml .Values.clickhouseKeeper.volumes | nindent 10 }}
+
kubernetes/clickhouse/values.yaml (2)

13-13: Whitespace/formatting fixes (trailing spaces, newline at EOF).

Clean up YAML to satisfy linters.

-      networks: 
+      networks:
@@
-  resources:  
+  resources:
@@
-        requests: 
+        requests:
           storage: 100Gi
@@
-        requests: 
+        requests:
           storage: 100Mi
+

Also applies to: 25-25, 61-61, 69-70


35-37: Normalize list indentation for accessModes.

Indent lists by two spaces under the key for readability and consistency.

   volumes:
     accessModes:
-      - ReadWriteOnce
+    - ReadWriteOnce
@@
   volumes:
     data:
       persistentVolumeReclaimPolicy: Retain
       accessModes:
-        - ReadWriteOnce
+      - ReadWriteOnce
@@
     log:
       persistentVolumeReclaimPolicy: Retain
       accessModes:
-        - ReadWriteOnce
+      - ReadWriteOnce

Also applies to: 57-59, 65-67

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between b2ac904 and a608eea.

📒 Files selected for processing (30)
  • kubernetes/akvorado/.helmignore (1 hunks)
  • kubernetes/akvorado/Chart.yaml (1 hunks)
  • kubernetes/akvorado/README.md (1 hunks)
  • kubernetes/akvorado/templates/_helpers.tpl (1 hunks)
  • kubernetes/akvorado/templates/akvorado-console-deployment.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-console-persistentvolumeclaim.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-console-service.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-geoip-persistentvolumeclaim.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-inlet-deployment.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-inlet-persistentvolumeclaim.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-inlet-service.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-orchestrator-configmap.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-orchestrator-deployment.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-orchestrator-service.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-redis-deployment.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-redis-service.yaml (1 hunks)
  • kubernetes/akvorado/values.yaml (1 hunks)
  • kubernetes/clickhouse/.helmignore (1 hunks)
  • kubernetes/clickhouse/Chart.yaml (1 hunks)
  • kubernetes/clickhouse/README.md (1 hunks)
  • kubernetes/clickhouse/templates/_helpers.tpl (1 hunks)
  • kubernetes/clickhouse/templates/clickhouse.yaml (1 hunks)
  • kubernetes/clickhouse/templates/clickhouseKeeper.yaml (1 hunks)
  • kubernetes/clickhouse/templates/secret.yaml (1 hunks)
  • kubernetes/clickhouse/values.yaml (1 hunks)
  • kubernetes/kafka/.helmignore (1 hunks)
  • kubernetes/kafka/Chart.yaml (1 hunks)
  • kubernetes/kafka/README.md (1 hunks)
  • kubernetes/kafka/templates/kafka.yaml (1 hunks)
  • kubernetes/kafka/values.yaml (1 hunks)
🧰 Additional context used
🪛 LanguageTool
kubernetes/akvorado/README.md

[grammar] ~1-~1: Ensure spelling is correct
Context: # Akvorado Chart This Helm chart deploys Akvorado...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~14-~14: There might be a mistake here.
Context: ...tion. ## Prerequisites - Kafka cluster - ClickHouse cluster ## Installation 1. ...

(QB_NEW_EN)

kubernetes/clickhouse/README.md

[grammar] ~1-~1: There might be a mistake here.
Context: # Clickhouse Chart This chart defines Clickhouse DB Cluter ...

(QB_NEW_EN)


[grammar] ~2-~2: Ensure spelling is correct
Context: ... Chart This chart defines Clickhouse DB Cluter as Kubernetes objects and it depend on ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~3-~3: There might be a mistake here.
Context: ...inity.com/clickhouse-operator In detail: - The ClickHouseKeeperInstallation Object ...

(QB_NEW_EN)


[grammar] ~4-~4: There might be a mistake here.
Context: ...cas, podTemplate, VolumeClaimTemplates). - The ClickHouseInstallation Object is cre...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...rds, podTemplate, VolumeClaimTemplates). - The secret named clickhouse-credentials ...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ...ministrators to access to Clickhouse DB. ## Tree level ``` +--- Chart.yaml : Chart ...

(QB_NEW_EN)

kubernetes/kafka/README.md

[grammar] ~1-~1: There might be a mistake here.
Context: # Kafka Chart This chart defines a Kafka cluster as Ku...

(QB_NEW_EN)


[grammar] ~2-~2: There might be a mistake here.
Context: ...is available at https://strimzi.io/docs/ In detail: - The Kafka Object is created...

(QB_NEW_EN)


[grammar] ~3-~3: There might be a mistake here.
Context: ...e at https://strimzi.io/docs/ In detail: - The Kafka Object is created to define th...

(QB_NEW_EN)


[grammar] ~41-~41: There might be a mistake here.
Context: ...r | 3 | | kafka.config.min_insync_replica ...

(QB_NEW_EN)


[grammar] ~42-~42: There might be a mistake here.
Context: ...te to them | 2 | | kafka.config.log_retention_hours ...

(QB_NEW_EN)

🪛 YAMLlint (1.37.1)
kubernetes/akvorado/templates/akvorado-inlet-deployment.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[warning] 6-6: wrong indentation: expected 2 but found 4

(indentation)


[error] 5-5: syntax error: expected the node content, but found '-'

(syntax)


[warning] 22-22: wrong indentation: expected 6 but found 8

(indentation)

kubernetes/kafka/Chart.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)

kubernetes/akvorado/templates/akvorado-console-deployment.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[warning] 7-7: wrong indentation: expected 2 but found 4

(indentation)


[warning] 14-14: wrong indentation: expected 4 but found 6

(indentation)


[warning] 22-22: wrong indentation: expected 6 but found 8

(indentation)


[error] 4-4: syntax error: expected , but found ''

(syntax)

kubernetes/akvorado/templates/akvorado-redis-deployment.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[warning] 6-6: wrong indentation: expected 2 but found 4

(indentation)


[error] 5-5: syntax error: expected the node content, but found '-'

(syntax)


[warning] 22-22: wrong indentation: expected 6 but found 8

(indentation)

kubernetes/akvorado/templates/akvorado-orchestrator-service.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[error] 4-4: trailing spaces

(trailing-spaces)


[warning] 6-6: wrong indentation: expected 2 but found 4

(indentation)


[warning] 15-15: wrong indentation: expected 2 but found 4

(indentation)


[error] 5-5: syntax error: expected the node content, but found '-'

(syntax)

kubernetes/akvorado/templates/akvorado-console-persistentvolumeclaim.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[error] 2-2: syntax error: expected the node content, but found '-'

(syntax)

kubernetes/kafka/values.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)

kubernetes/clickhouse/templates/clickhouse.yaml

[warning] 7-7: wrong indentation: expected 2 but found 4

(indentation)


[error] 6-6: syntax error: expected the node content, but found '-'

(syntax)


[error] 75-75: trailing spaces

(trailing-spaces)


[error] 80-80: no new line character at the end of file

(new-line-at-end-of-file)

kubernetes/akvorado/Chart.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)

kubernetes/akvorado/values.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[error] 18-18: trailing spaces

(trailing-spaces)


[error] 43-43: trailing spaces

(trailing-spaces)

kubernetes/akvorado/templates/akvorado-orchestrator-deployment.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[warning] 6-6: wrong indentation: expected 2 but found 4

(indentation)


[error] 5-5: syntax error: expected the node content, but found '-'

(syntax)


[warning] 22-22: wrong indentation: expected 6 but found 8

(indentation)


[warning] 41-41: too many spaces after colon

(colons)


[warning] 43-43: too many spaces after colon

(colons)


[error] 54-54: trailing spaces

(trailing-spaces)

kubernetes/kafka/templates/kafka.yaml

[error] 1-1: syntax error: expected the node content, but found '-'

(syntax)


[warning] 47-47: wrong indentation: expected 14 but found 12

(indentation)


[warning] 68-68: wrong indentation: expected 14 but found 12

(indentation)

kubernetes/akvorado/templates/akvorado-inlet-service.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[error] 4-4: trailing spaces

(trailing-spaces)


[warning] 6-6: wrong indentation: expected 2 but found 4

(indentation)


[warning] 23-23: wrong indentation: expected 2 but found 4

(indentation)


[error] 5-5: syntax error: expected the node content, but found '-'

(syntax)

kubernetes/akvorado/templates/akvorado-redis-service.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[warning] 6-6: wrong indentation: expected 2 but found 4

(indentation)


[warning] 15-15: wrong indentation: expected 2 but found 4

(indentation)


[error] 5-5: syntax error: expected the node content, but found '-'

(syntax)

kubernetes/akvorado/templates/akvorado-inlet-persistentvolumeclaim.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[error] 21-21: trailing spaces

(trailing-spaces)


[error] 3-3: syntax error: mapping values are not allowed here

(syntax)

kubernetes/akvorado/templates/akvorado-console-service.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[warning] 6-6: wrong indentation: expected 2 but found 4

(indentation)


[warning] 15-15: wrong indentation: expected 2 but found 4

(indentation)


[error] 5-5: syntax error: expected the node content, but found '-'

(syntax)

kubernetes/clickhouse/Chart.yaml

[error] 28-28: no new line character at the end of file

(new-line-at-end-of-file)

kubernetes/akvorado/templates/akvorado-geoip-persistentvolumeclaim.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[error] 21-21: trailing spaces

(trailing-spaces)


[error] 3-3: syntax error: mapping values are not allowed here

(syntax)

kubernetes/clickhouse/templates/secret.yaml

[warning] 8-8: wrong indentation: expected 0 but found 2

(indentation)


[error] 7-7: syntax error: expected the node content, but found '-'

(syntax)

kubernetes/akvorado/templates/akvorado-orchestrator-configmap.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[error] 52-52: trailing spaces

(trailing-spaces)


[error] 130-130: syntax error: expected , but found ''

(syntax)

kubernetes/clickhouse/templates/clickhouseKeeper.yaml

[warning] 7-7: wrong indentation: expected 2 but found 4

(indentation)


[warning] 31-31: wrong indentation: expected 12 but found 10

(indentation)


[error] 4-4: syntax error: expected , but found ''

(syntax)


[error] 55-55: no new line character at the end of file

(new-line-at-end-of-file)

kubernetes/clickhouse/values.yaml

[error] 13-13: trailing spaces

(trailing-spaces)


[error] 25-25: trailing spaces

(trailing-spaces)


[warning] 36-36: wrong indentation: expected 4 but found 6

(indentation)


[warning] 58-58: wrong indentation: expected 6 but found 8

(indentation)


[error] 61-61: trailing spaces

(trailing-spaces)


[warning] 66-66: wrong indentation: expected 6 but found 8

(indentation)


[error] 69-69: trailing spaces

(trailing-spaces)


[error] 70-70: no new line character at the end of file

(new-line-at-end-of-file)

🪛 markdownlint-cli2 (0.17.2)
kubernetes/kafka/README.md

2-2: Bare URL used

(MD034, no-bare-urls)


8-8: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


20-20: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


27-27: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


46-46: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


53-53: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (17)
kubernetes/akvorado/Chart.yaml (1)

26-29: Helm dependency repository URL is correct

I’ve verified that the index.yaml is served at https://svtechnmaa.github.io/charts/artifacthub/index.yaml (HTTP 200), whereas the parent path returns 404. Your current repository setting already points to the proper Helm chart repo root, so no update is required.

kubernetes/kafka/Chart.yaml (1)

26-29: No change needed: artifacthub/ is the correct Helm repo path

The common chart is only indexed under the /artifacthub/ path—attempting to use the root URL fails to find it. Your dependency entry is already pointing at the correct repository.

Leave the repository URL as https://svtechnmaa.github.io/charts/artifacthub/.

Likely an incorrect or invalid review comment.

kubernetes/akvorado/templates/akvorado-inlet-persistentvolumeclaim.yaml (1)

20-20: Verify StorageClass naming strategy.

Prefixing the StorageClass with namespace is unusual; ensure a matching SC exists. Consider using the value verbatim to match cluster-scoped SC names.

-  storageClassName: {{ $namespace }}-{{ .Values.inlet.sharedPersistenceVolume.storageClass }}
+  storageClassName: {{ .Values.inlet.sharedPersistenceVolume.storageClass }}

Also applies to: 30-30

kubernetes/clickhouse/Chart.yaml (1)

25-28: Validate dependency repository URL.

Confirm the ‘common’ chart is published at this URL (path includes ‘artifacthub/’, which is atypical). If not, adjust to your actual index URL or OCI repo.

kubernetes/akvorado/templates/akvorado-inlet-service.yaml (1)

18-20: Incorrect protocol suggestion for port 10179

The Service manifest omits protocol, which defaults to TCP—this matches the container’s protocol: TCP on port 10179 in akvorado-inlet-deployment.yaml. No change to UDP is required. If you’d like to be explicit, you can add:

    - name: "10179"
      port: 10179
+     protocol: TCP
      targetPort: 10179

But the original recommendation to switch this to UDP is incorrect.

Likely an incorrect or invalid review comment.

kubernetes/akvorado/templates/akvorado-inlet-deployment.yaml (1)

24-33: Verify BusyBox netcat flags in your initContainer image

BusyBox’s nc implementation can vary between distributions and versions. Flags like -z (zero-I/O), -v (verbose) and -w (timeout) are not universally supported. Please confirm that your chosen initContainer image’s BusyBox build supports nc -zvw. If it does not, consider using a more portable approach that relies on DNS lookups and an HTTP health endpoint instead.

• File: kubernetes/akvorado/templates/akvorado-inlet-deployment.yaml
• Lines: 24–33

Suggested fallback snippet:

-            - |
-              until nc -zvw5 {{ .Chart.Name }}-orchestrator.{{ .Release.Namespace }}.svc.cluster.local 8080; do
-                echo "Waiting for Orchestrator..."; sleep 2;
-              done
+            - |
+              H={{ .Release.Name }}-orchestrator.{{ .Release.Namespace }}.svc.cluster.local
+              P=8080
+              until getent hosts "$H" >/dev/null \
+                && wget -qO- "http://$H:$P/health" >/dev/null 2>&1; do
+                echo "Waiting for Orchestrator…"
+                sleep 2
+              done
kubernetes/kafka/values.yaml (1)

35-41: Persistence fallback not verifiable automatically

I ran searches across kubernetes/kafka/templates and found no occurrences of:

  • .Values.kafka.hostPath
  • hostPath:
  • persistentVolumeClaim:
  • storageClassName:

This means we can’t confirm that an empty hostPath will fall back to a PVC rather than rendering an invalid (empty) hostPath volume.

Please manually verify that:

  • The Kafka and Zookeeper StatefulSet (or Deployment) templates include conditional logic to:
    • Use a hostPath volume when .Values.kafka.hostPath is non-empty
    • Otherwise define a volumeClaimTemplate (or persistentVolumeClaim) with a valid storageClassName
  • No volumes with an empty hostPath are rendered when hostPath: "" is set in values.yaml

If the logic is missing, consider adding something like:

 volumes:
-  - name: data
-    hostPath:
-      path: {{ .Values.kafka.hostPath }}
+{{- if .Values.kafka.hostPath }}
+  - name: data
+    hostPath:
+      path: {{ .Values.kafka.hostPath | quote }}
+{{- else }}
+  volumeClaimTemplates:
+  - metadata:
+      name: data
+    spec:
+      storageClassName: {{ .Values.storageClassName | quote }}
+      accessModes: ["ReadWriteOnce"]
+      resources:
+        requests:
+          storage: {{ .Values.kafka.size | quote }}
+{{- end }}

This will ensure that when hostPath is empty, Helm falls back to provisioning a PVC rather than producing an invalid hostPath volume.

kubernetes/clickhouse/README.md (1)

24-29: Helm repo URL for Altinity operator.

The docs site URL isn’t a Helm repo. Use the official Helm repo URL.

-helm repo add clickhouse-operator https://docs.altinity.com/clickhouse-operator
+helm repo add clickhouse-operator https://helm.altinity.com/
 helm upgrade --install --create-namespace \
     --namespace clickhouse \
     clickhouse-operator \
     clickhouse-operator/altinity-clickhouse-operator

Please verify current operator chart name if it changed.

kubernetes/akvorado/templates/akvorado-redis-service.yaml (2)

7-7: Service naming consistency.

Service uses {{ .Chart.Name }}-redis while Deployment uses {{ .Release.Name }}-redis. Labels match, so selectors work, but double-check any in-cluster references (ConfigMaps) assume this service name.

I can align both to a shared fullname helper if desired.


1-17: Otherwise LGTM.

Labels, selector, and type wiring look correct.

kubernetes/akvorado/templates/akvorado-console-deployment.yaml (1)

39-46: Verify DB path alignment with the mounted volume.

AKVORADO_CFG_CONSOLE_DATABASE_DSN points to /run/akvorado/console.sqlite, but the PVC is mounted at {{ .Values.console.sharedPersistenceVolume.path }}. Make sure these paths align.

kubernetes/kafka/templates/kafka.yaml (1)

44-53: Check anti-affinity label selector.

Selector uses app.kubernetes.io/name: kafka; Strimzi pods typically use strimzi.io/name. Verify labels to ensure the anti-affinity is effective.

Also applies to: 65-73

kubernetes/akvorado/templates/akvorado-orchestrator-configmap.yaml (1)

75-127: Sanity-check SNMP community exposure.

SNMP communities under inlet are sensitive. Consider sourcing from Secrets and templating them in at runtime.

kubernetes/clickhouse/templates/clickhouse.yaml (2)

12-13: Keeper service DNS likely should be release-scoped.

If the Keeper Service is named with .Release.Name, this FQDN will be wrong.

-        - host: {{ .Chart.Name }}-keeper.{{ .Release.Namespace }}.svc.cluster.local
+        - host: {{ .Release.Name }}-keeper.{{ .Release.Namespace }}.svc.cluster.local

33-35: Confirm volumes/claims integrate as intended.

CHI typically needs volumeClaimTemplates and appropriate defaults/podTemplates mapping. Verify data/log volumes are attached as expected for your layout.

Also applies to: 76-80

kubernetes/akvorado/templates/akvorado-geoip-persistentvolumeclaim.yaml (1)

20-21: Double-check storageClassName naming.

Prefixing storageClassName with the namespace is unusual; StorageClass is cluster-scoped. Ensure the StorageClass actually exists with that name for both PV and PVC.

Would you like me to add a values toggle to omit storageClassName (static binding by name) or to reference an existing class?

Also applies to: 30-31

kubernetes/clickhouse/templates/_helpers.tpl (1)

1-63: Helpers look standard and solid.

Naming, labels, and truncation patterns align with Helm best practices.

Comment thread kubernetes/akvorado/templates/akvorado-console-deployment.yaml
Comment thread kubernetes/akvorado/templates/akvorado-console-deployment.yaml
Comment thread kubernetes/akvorado/templates/akvorado-geoip-persistentvolumeclaim.yaml Outdated
Comment thread kubernetes/clickhouse/templates/clickhouseKeeper.yaml
Comment thread kubernetes/clickhouse/templates/secret.yaml
Comment thread kubernetes/clickhouse/values.yaml
Comment thread kubernetes/kafka/templates/kafka.yaml Outdated
Comment thread kubernetes/kafka/values.yaml
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

♻️ Duplicate comments (13)
kubernetes/kafka/templates/kafka.yaml (1)

30-30: Fix values key typo and add safe default for min.insync.replicas.

Use the correct key and guard against unset values to avoid rendering <no value>.

Apply:

-      min.insync.replicas: {{ .Values.kafka.config.min_insync_replica }}
+      min.insync.replicas: {{ default (min (int .Values.kafka.replicaCount) 2) .Values.kafka.config.min_insync_replicas }}
kubernetes/clickhouse/values.yaml (1)

10-14: Remove default plaintext password and unrestricted network.

Do not ship an empty/real password or 0.0.0.0/0 by default. Require user-supplied secret and narrow networks.

   users:
     - name: juniper
-      password: ""
-      networks: 
-      - 0.0.0.0/0
+      # password: ""  # Do not commit real passwords. Provide via values at install-time or an existing Secret.
+      # existingSecret: clickhouse-credentials   # optional: wire templates to read this
+      # passwordKey: juniper                     # optional: key inside the secret
+      networks:
+        - 10.0.0.0/8    # example; scope to your CIDRs

If you want, I can wire existingSecret/passwordKey in the secret template and operator users config.

kubernetes/clickhouse/templates/clickhouseKeeper.yaml (2)

25-38: Ports indentation under serviceTemplates now looks correct.

Previous mis-indentation is fixed; this should satisfy yamllint.


1-16: Ensure common library and Keeper CRD are present.

This template depends on Bitnami/common helpers and the Altinity Keeper CRD; make sure Chart.yaml references the correct common repo and the CRD is installed/bundled.

I can verify Chart.yaml/CRD placement across the repo if you’d like a quick check script.

kubernetes/clickhouse/README.md (1)

13-15: Filename now matches the template.

README references clickhouseKeeper.yaml, consistent with the chart.

kubernetes/akvorado/templates/akvorado-redis-deployment.yaml (2)

25-29: Disable empty password; use Secret-based auth.

ALLOW_EMPTY_PASSWORD=yes is unsafe. Inject a password from a Secret and configure clients accordingly.

-        - env:
-            - name: ALLOW_EMPTY_PASSWORD
-              value: "yes"
+        - env:
+            - name: VALKEY_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  name: {{ .Release.Name }}-redis-auth
+                  key: password

I can add a Secret template and wire it through values on request.


30-36: Liveness probe command won’t run as written; use tcpSocket or a shell.

Kubelet exec doesn’t invoke a shell; a single string with pipes won’t work. Prefer tcpSocket for simplicity.

-          livenessProbe:
-            exec:
-              command:
-                - timeout 3 redis-cli ping | grep -q PONG
-            failureThreshold: 3
-            periodSeconds: 20
-            timeoutSeconds: 10
+          livenessProbe:
+            tcpSocket:
+              port: 6379
+            failureThreshold: 3
+            periodSeconds: 20
+            timeoutSeconds: 3

Optionally add a readinessProbe mirroring the liveness check.

kubernetes/akvorado/templates/akvorado-inlet-persistentvolumeclaim.yaml (2)

1-1: YAML document separator fixed.

Replaced invalid ‘------’ with ‘---’. Looks good.


10-13: Support list or string for accessModes (both PV and PVC).

Template assumes a single string; add list handling to avoid rendering errors.

-  accessModes:
-    - {{ .Values.inlet.sharedPersistenceVolume.accessModes }}
+  accessModes:
+    {{- if kindIs "slice" .Values.inlet.sharedPersistenceVolume.accessModes }}
+    {{- range .Values.inlet.sharedPersistenceVolume.accessModes }}
+    - {{ . }}
+    {{- end }}
+    {{- else }}
+    - {{ .Values.inlet.sharedPersistenceVolume.accessModes }}
+    {{- end }}

Repeat the same change for the PVC section (Lines 31–33).

kubernetes/akvorado/templates/akvorado-geoip-persistentvolumeclaim.yaml (1)

10-13: Render accessModes via toYaml; current template breaks when value is a list.

 spec:
   accessModes:
-    - {{ .Values.geoip.sharedPersistenceVolume.accessModes }}
+    {{- toYaml .Values.geoip.sharedPersistenceVolume.accessModes | nindent 4 }}
@@
 spec:
   accessModes:
-    - {{ .Values.geoip.sharedPersistenceVolume.accessModes }}
+    {{- toYaml .Values.geoip.sharedPersistenceVolume.accessModes | nindent 4 }}

Also applies to: 31-35

kubernetes/akvorado/values.yaml (2)

66-69: Restrict SNMP providers; avoid ::/0 with community: public.

   config:
     providers:
-    - ip: "::/0"
-      community: "public"
+    - ip: "fd00:1234:abcd::/48"   # CHANGE: limit to mgmt subnet(s)
+      community: ""               # source from a Secret, not values.yaml

86-90: Remove plaintext ipinfo token from Git; source via Secret.

   env:
-    ipinfo_token: "a2632ea59736c7"
+    # TODO: load from a Kubernetes Secret (e.g., {{ .Release.Name }}-geoip/ipinfo_token)
+    ipinfo_token: ""
     ipinfo_db: "country asn"
     update_time: "48h"

I can generate the Secret manifest and wire secretKeyRef in templates if you want.

kubernetes/akvorado/templates/akvorado-orchestrator-deployment.yaml (1)

15-17: Avoid rollingUpdate: null; render only for RollingUpdate.

-  strategy:
-    type: {{ .Values.orchestrator.updateStrategy }}
-    rollingUpdate: null
+  strategy:
+    type: {{ .Values.orchestrator.updateStrategy | default "RollingUpdate" }}
+    {{- if eq (.Values.orchestrator.updateStrategy | default "RollingUpdate") "RollingUpdate" }}
+    rollingUpdate:
+      maxUnavailable: 25%
+      maxSurge: 25%
+    {{- end }}
🧹 Nitpick comments (25)
kubernetes/kafka/templates/kafka.yaml (8)

26-29: Clamp replication settings to replicaCount with sensible defaults.

Prevents invalid configs when replicas < desired RF and reduces footguns if values are omitted.

Apply:

-      offsets.topic.replication.factor: {{ .Values.kafka.config.offsets_topic_replication_factor }}
-      transaction.state.log.replication.factor: {{ .Values.kafka.config.transaction_state_log_replication_factor }}
-      transaction.state.log.min.isr: {{ .Values.kafka.config.transaction_state_log_min_isr }}
-      default.replication.factor: {{ .Values.kafka.config.default_replication_factor }}
+      offsets.topic.replication.factor: {{ default (min (int .Values.kafka.replicaCount) 3) .Values.kafka.config.offsets_topic_replication_factor }}
+      transaction.state.log.replication.factor: {{ default (min (int .Values.kafka.replicaCount) 3) .Values.kafka.config.transaction_state_log_replication_factor }}
+      transaction.state.log.min.isr: {{ default (ternary 2 1 (ge (int .Values.kafka.replicaCount) 3)) .Values.kafka.config.transaction_state_log_min_isr }}
+      default.replication.factor: {{ default (min (int .Values.kafka.replicaCount) 3) .Values.kafka.config.default_replication_factor }}

31-31: Avoid hard-coding IBP; default to Kafka version’s major.minor.

Keeps IBP aligned when Kafka is bumped.

Apply:

-      inter.broker.protocol.version: "3.8"
+      inter.broker.protocol.version: {{ default (regexFind "^[0-9]+\\.[0-9]+" .Values.kafka.version) .Values.kafka.config.inter_broker_protocol_version | quote }}

33-33: Parameterize socket.request.max.bytes.

Let users tune via values.

Apply:

-      socket.request.max.bytes: 419430400
+      socket.request.max.bytes: {{ default 419430400 .Values.kafka.config.socket_request_max_bytes }}

47-52: Fix list item indentation under preferredDuringSchedulingIgnoredDuringExecution.

Current indentation trips linters; YAML list items should be indented two spaces beyond the parent key.

Apply:

-            preferredDuringSchedulingIgnoredDuringExecution:
-            - podAffinityTerm:
+            preferredDuringSchedulingIgnoredDuringExecution:
+              - podAffinityTerm:
@@
-            preferredDuringSchedulingIgnoredDuringExecution:
-            - podAffinityTerm:
+            preferredDuringSchedulingIgnoredDuringExecution:
+              - podAffinityTerm:

Also applies to: 68-73


48-51: Use Strimzi labels for anti-affinity; current selector likely won’t match.

Strimzi pods are labeled with strimzi.io/name: <cluster>-{kafka|zookeeper}.

Apply:

-                labelSelector:
-                  matchLabels:
-                    app.kubernetes.io/name: kafka
+                labelSelector:
+                  matchLabels:
+                    strimzi.io/name: {{ .Release.Name }}-kafka
@@
-                labelSelector:
-                  matchLabels:
-                    app.kubernetes.io/name: zookeeper
+                labelSelector:
+                  matchLabels:
+                    strimzi.io/name: {{ .Release.Name }}-zookeeper

Also applies to: 69-72


37-38: Make storageClass configurable (keep local-path as default).

Avoid baking cluster-specific class names into the template.

Apply:

-      class: local-path
-      size: {{ .Values.persistence.kafka.size }}
+      class: {{ default "local-path" .Values.persistence.kafka.storageClass }}
+      size: {{ .Values.persistence.kafka.size }}
@@
-      class: local-path
-      size: {{ .Values.persistence.zookeeper.size }}
+      class: {{ default "local-path" .Values.persistence.zookeeper.storageClass }}
+      size: {{ .Values.persistence.zookeeper.size }}

Also applies to: 60-61


1-2: Remove unused $namespace helper.

It’s only referenced in commented lines.

Apply:

-{{- $namespace := .Release.Namespace }}
-

1-1: Yamllint noise on Helm templates.

If yamllint runs on raw templates, it will flag templating as syntax errors. Run lint on rendered manifests or exclude templates/ in .yamllint for this chart.

kubernetes/clickhouse/values.yaml (4)

24-31: Default Keeper log level “trace” is noisy for prod.

Consider “info” (or “warn”) as default; keep “trace” for troubleshooting via values override.

-  log_level: trace
+  log_level: info

33-40: YAML lint: indentation and trailing spaces.

Fix mis-indents under volumes and trailing spaces flagged by yamllint; add final newline.

   volumes:
-      - ReadWriteOnce
+    - ReadWriteOnce
   resources:
-      limits: {}
-      requests:
-        storage: 10Gi
+    limits: {}
+    requests:
+      storage: 10Gi

Also remove trailing spaces at Lines 13, 25, 61, 69 and ensure the file ends with a newline.


54-63: Consistent indentation under clickhouse.volumes.data.

Align with two-space nesting to avoid yamllint warnings.

   volumes:
     data:
       persistentVolumeReclaimPolicy: Retain
       accessModes:
-        - ReadWriteOnce
+      - ReadWriteOnce
       resources:
-        limits: {}
-        requests: 
-          storage: 100Gi
+      limits: {}
+      requests:
+        storage: 100Gi

63-70: Consistent indentation under clickhouse.volumes.log.

Mirror data section; remove trailing space after “requests:”.

   log:
     persistentVolumeReclaimPolicy: Retain
     accessModes:
-        - ReadWriteOnce
+      - ReadWriteOnce
     resources:
-        limits: {}
-        requests: 
-          storage: 100Mi
+      limits: {}
+      requests:
+        storage: 100Mi
kubernetes/clickhouse/templates/clickhouseKeeper.yaml (2)

1-3: Style: unquote apiVersion/kind (optional).

Quotes are valid but uncommon; unquoting improves readability and avoids some linters complaining.

-apiVersion: "clickhouse-keeper.altinity.com/v1"
-kind: "ClickHouseKeeperInstallation"
+apiVersion: clickhouse-keeper.altinity.com/v1
+kind: ClickHouseKeeperInstallation

47-53: Minor: trim trailing spaces and keep multiline mappings clean.

There’s trailing whitespace after resources; also prefer the multiline form for securityContext/resources for clarity.

           containers:
             - name: clickhouse-keeper
               imagePullPolicy: {{ .Values.clickhouseKeeper.image.pullPolicy }}
               image: {{ include "common.images.image" ( dict "imageRoot" .Values.clickhouseKeeper.image) }}
-              resources: {{ toYaml .Values.clickhouseKeeper.resources | nindent 16 }}    
+              resources:
+                {{- toYaml .Values.clickhouseKeeper.resources | nindent 16 }}
-          securityContext: {{ toYaml .Values.clickhouseKeeper.securityContext | nindent 12 }}
+          securityContext:
+            {{- toYaml .Values.clickhouseKeeper.securityContext | nindent 12 }}

Also add a final newline at EOF.

kubernetes/clickhouse/README.md (2)

9-18: Add fenced code languages; minor cleanup.

Mark code blocks as bash and clarify tree description.

-```
+```text
 +--- Chart.yaml : Chart information and dependencies (available as {{ .Chart }} in templates)
@@
-+--- values.yaml : define {{ .Values }} variable to use in template files
++--- values.yaml : define values (available as {{ .Values }}) used in templates

46-56: Add bash fences to install/uninstall commands.

Improves readability and editor copy/paste.

-    ```
+    ```bash
@@
-    ```
+    ```bash
@@
-    ```
+    ```
kubernetes/akvorado/templates/akvorado-inlet-persistentvolumeclaim.yaml (1)

21-24: Trim trailing spaces and normalize newlines.

Remove the trailing space at Line 21 and ensure LF newlines across the file.

kubernetes/akvorado/templates/akvorado-inlet-deployment.yaml (3)

15-17: Don’t render rollingUpdate: null; gate it on RollingUpdate.

-  strategy:
-    type: {{ .Values.inlet.updateStrategy }}
-    rollingUpdate: null
+  strategy:
+    type: {{ .Values.inlet.updateStrategy | default "RollingUpdate" }}
+    {{- if eq (.Values.inlet.updateStrategy | default "RollingUpdate") "RollingUpdate" }}
+    rollingUpdate:
+      maxUnavailable: 25%
+      maxSurge: 25%
+    {{- end }}

25-33: BusyBox nc flags are unreliable; use HTTP probe with wget for orchestrator.

More portable in minimal images.

-          command:
-            - /bin/sh
-            - -c
-            - |
-              until nc -zvw5 {{ .Release.Name }}-orchestrator.{{ .Release.Namespace }}.svc.cluster.local 8080; do echo "Waiting for Orchestrator..."; sleep 2; done
+          command:
+            - /bin/sh
+            - -c
+            - |
+              until wget -q --spider http://{{ .Release.Name }}-orchestrator:8080; do echo "Waiting for Orchestrator..."; sleep 2; done

1-59: Normalize line endings in kubernetes/akvorado/templates/akvorado-inlet-deployment.yaml

• CRLF line endings were detected throughout the file—please convert to LF to satisfy YAML linting and avoid platform-specific issues.
• No trailing whitespace was found.
• To prevent regressions, add a .gitattributes entry such as:

*.yaml text eol=lf

and an .editorconfig rule to enforce 2-space indentation for YAML files.

kubernetes/akvorado/templates/akvorado-geoip-persistentvolumeclaim.yaml (1)

19-21: Add volumeMode and trim trailing space.

Explicit volumeMode improves clarity; also remove trailing whitespace at Line 21.

   persistentVolumeReclaimPolicy: Retain
-  storageClassName: {{ $namespace }}-{{ .Values.geoip.sharedPersistenceVolume.storageClass }}
-  
+  storageClassName: {{ $namespace }}-{{ .Values.geoip.sharedPersistenceVolume.storageClass }}
+  volumeMode: Filesystem
 spec:
   resources:
     requests:
       storage: {{ .Values.geoip.sharedPersistenceVolume.storageSize }}
+  volumeMode: Filesystem
kubernetes/akvorado/values.yaml (2)

27-33: Make accessModes arrays for consistency with templates.

-    accessModes: ReadWriteMany
+    accessModes:
+      - ReadWriteMany
@@
-    accessModes: ReadWriteMany
+    accessModes:
+      - ReadWriteMany
@@
-    accessModes: ReadWriteMany
+    accessModes:
+      - ReadWriteMany

Also applies to: 56-62, 91-96


1-106: Trim trailing whitespace (lines 18 & 47) and normalize to LF endings

  • Line 18 and line 47 each contain trailing spaces; please remove them.
  • The file currently uses CRLF line endings—please convert it to LF.
  • Consider adding a repo-wide .editorconfig or .gitattributes to enforce whitespace and line-ending rules.
kubernetes/akvorado/templates/akvorado-orchestrator-deployment.yaml (2)

54-55: Set imagePullPolicy from values for the orchestrator container.

-          image: {{ include "common.images.image" ( dict "imageRoot" .Values.orchestrator.image ) }} 
+          image: {{ include "common.images.image" ( dict "imageRoot" .Values.orchestrator.image ) }}
+          imagePullPolicy: {{ .Values.orchestrator.image.pullPolicy | quote }}

1-70: Whitespace/style nits flagged by YAMLlint.

Extra spaces (Lines 41, 43) and trailing space (Line 54). Safe to trim.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between a608eea and fa08259.

📒 Files selected for processing (10)
  • kubernetes/akvorado/templates/akvorado-geoip-persistentvolumeclaim.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-inlet-deployment.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-inlet-persistentvolumeclaim.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-orchestrator-deployment.yaml (1 hunks)
  • kubernetes/akvorado/templates/akvorado-redis-deployment.yaml (1 hunks)
  • kubernetes/akvorado/values.yaml (1 hunks)
  • kubernetes/clickhouse/README.md (1 hunks)
  • kubernetes/clickhouse/templates/clickhouseKeeper.yaml (1 hunks)
  • kubernetes/clickhouse/values.yaml (1 hunks)
  • kubernetes/kafka/templates/kafka.yaml (1 hunks)
🧰 Additional context used
🪛 YAMLlint (1.37.1)
kubernetes/akvorado/templates/akvorado-redis-deployment.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[warning] 6-6: wrong indentation: expected 2 but found 4

(indentation)


[error] 5-5: syntax error: expected the node content, but found '-'

(syntax)


[warning] 22-22: wrong indentation: expected 6 but found 8

(indentation)

kubernetes/clickhouse/templates/clickhouseKeeper.yaml

[warning] 7-7: wrong indentation: expected 2 but found 4

(indentation)


[error] 4-4: syntax error: expected , but found ''

(syntax)


[error] 56-56: no new line character at the end of file

(new-line-at-end-of-file)

kubernetes/akvorado/values.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[error] 18-18: trailing spaces

(trailing-spaces)


[error] 47-47: trailing spaces

(trailing-spaces)

kubernetes/akvorado/templates/akvorado-inlet-deployment.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[warning] 6-6: wrong indentation: expected 2 but found 4

(indentation)


[error] 5-5: syntax error: expected the node content, but found '-'

(syntax)


[warning] 22-22: wrong indentation: expected 6 but found 8

(indentation)

kubernetes/akvorado/templates/akvorado-geoip-persistentvolumeclaim.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[error] 21-21: trailing spaces

(trailing-spaces)


[error] 2-2: syntax error: expected the node content, but found '-'

(syntax)

kubernetes/akvorado/templates/akvorado-inlet-persistentvolumeclaim.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[error] 21-21: trailing spaces

(trailing-spaces)


[error] 2-2: syntax error: expected the node content, but found '-'

(syntax)

kubernetes/akvorado/templates/akvorado-orchestrator-deployment.yaml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[warning] 6-6: wrong indentation: expected 2 but found 4

(indentation)


[error] 5-5: syntax error: expected the node content, but found '-'

(syntax)


[warning] 22-22: wrong indentation: expected 6 but found 8

(indentation)


[warning] 41-41: too many spaces after colon

(colons)


[warning] 43-43: too many spaces after colon

(colons)


[error] 54-54: trailing spaces

(trailing-spaces)

kubernetes/clickhouse/values.yaml

[error] 13-13: trailing spaces

(trailing-spaces)


[error] 25-25: trailing spaces

(trailing-spaces)


[warning] 36-36: wrong indentation: expected 4 but found 6

(indentation)


[warning] 58-58: wrong indentation: expected 6 but found 8

(indentation)


[error] 61-61: trailing spaces

(trailing-spaces)


[warning] 66-66: wrong indentation: expected 6 but found 8

(indentation)


[error] 69-69: trailing spaces

(trailing-spaces)


[error] 70-70: no new line character at the end of file

(new-line-at-end-of-file)

kubernetes/kafka/templates/kafka.yaml

[error] 1-1: syntax error: expected the node content, but found '-'

(syntax)


[warning] 47-47: wrong indentation: expected 14 but found 12

(indentation)


[warning] 68-68: wrong indentation: expected 14 but found 12

(indentation)

🪛 LanguageTool
kubernetes/clickhouse/README.md

[grammar] ~1-~1: There might be a mistake here.
Context: # Clickhouse Chart This chart defines Clickhouse DB Cluter ...

(QB_NEW_EN)


[grammar] ~2-~2: Ensure spelling is correct
Context: ... Chart This chart defines Clickhouse DB Cluter as Kubernetes objects and it depend on ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~3-~3: There might be a mistake here.
Context: ...inity.com/clickhouse-operator In detail: - The ClickHouseKeeperInstallation Object ...

(QB_NEW_EN)


[grammar] ~4-~4: There might be a mistake here.
Context: ...cas, podTemplate, VolumeClaimTemplates). - The ClickHouseInstallation Object is cre...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...rds, podTemplate, VolumeClaimTemplates). - The secret named clickhouse-credentials ...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ...ministrators to access to Clickhouse DB. ## Tree level ``` +--- Chart.yaml : Chart ...

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)
kubernetes/clickhouse/README.md

2-2: Bare URL used

(MD034, no-bare-urls)


9-9: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


23-23: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


31-31: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


46-46: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


53-53: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (4)
kubernetes/kafka/templates/kafka.yaml (1)

13-16: Verify external listener schema (port on nodeport).

Strimzi’s nodeport external listener may not accept an explicit port (ports are allocated per-broker via configuration). Please confirm against your target Strimzi version’s CRD.

If needed, drop port: here and set bootstrap/broker nodePorts under configuration.brokers[].

kubernetes/clickhouse/README.md (1)

22-29: Add bash fencing and include helm repo update; the existing Helm repo URL and chart name are correct

Verified that the official Altinity ClickHouse Operator Helm repository is indeed https://docs.altinity.com/clickhouse-operator/ and the chart is clickhouse-operator/altinity-clickhouse-operator (github.com, docs.altinity.com). There’s no need to replace the URL or chart name—simply fence as bash and add a repo update step.

Locations to update:

  • kubernetes/clickhouse/README.md lines 22–29

Suggested diff:

-    ```
-    helm repo add clickhouse-operator https://docs.altinity.com/clickhouse-operator
+    ```bash
+    # Add Altinity’s ClickHouse Operator Helm repository and update
+    helm repo add clickhouse-operator https://docs.altinity.com/clickhouse-operator/
+    helm repo update
     helm upgrade --install --create-namespace \
         --namespace clickhouse \
         clickhouse-operator \
-        clickhouse-operator/altinity-clickhouse-operator
+        clickhouse-operator/altinity-clickhouse-operator
     ```

Likely an incorrect or invalid review comment.

kubernetes/akvorado/templates/akvorado-geoip-persistentvolumeclaim.yaml (1)

1-3: Header looks good now.

The invalid “------” header noted earlier is fixed; proper --- is present.

kubernetes/akvorado/templates/akvorado-orchestrator-deployment.yaml (1)

24-33: The external-bootstrap endpoint is valid as configured by the Strimzi Kafka CRD, no change required

The Kafka subchart uses a Strimzi Kafka custom resource, which defines both an internal listener on port 9092 and an external NodePort listener on port 9094. The Strimzi operator will automatically create a Service named <clusterName>-kafka-external-bootstrap (clusterIP + NodePort) that listens on port 9094, exactly matching your initContainer’s wait target . Inside the cluster, NodePort services still have a clusterIP and will correctly proxy traffic on port 9094 to the brokers (dzone.com).

If you prefer to use the internal listener for in-cluster traffic, you can point to <ReleaseName>-kafka-bootstrap:9092 instead, but the existing external-bootstrap approach will work as is. No edits to the deployment or configmap are necessary.

Likely an incorrect or invalid review comment.

Comment thread kubernetes/akvorado/templates/akvorado-inlet-deployment.yaml
Comment thread kubernetes/akvorado/templates/akvorado-orchestrator-deployment.yaml
Comment thread kubernetes/clickhouse/README.md
Comment thread kubernetes/clickhouse/README.md
Comment thread kubernetes/kafka/templates/kafka.yaml
Copy link
Copy Markdown
Contributor

@vyvuvivo vyvuvivo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok

@duchieu2k duchieu2k merged commit 72cb80e into main Sep 8, 2025
2 checks passed
@duchieu2k duchieu2k deleted the feature/netflows branch September 10, 2025 07:25
@SVTECH-NMAA
Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 1.4.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants