This is an automated email from the ASF dual-hosted git repository.

hgruszecki pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iggy.git


The following commit(s) were added to refs/heads/master by this push:
     new f66540010 fix: Helm chart install guidance and deployment defaults 
(#2976)
f66540010 is described below

commit f665400108526079c26b55bbf3a1aba27cecd847
Author: Aviraj Khare <[email protected]>
AuthorDate: Sat Mar 21 15:27:46 2026 +0530

    fix: Helm chart install guidance and deployment defaults (#2976)
---
 helm/charts/iggy/Chart.yaml                |  2 +-
 helm/charts/iggy/README.md                 | 48 +++++++++++++++++++++++-------
 helm/charts/iggy/templates/deployment.yaml | 23 ++++++++++----
 helm/charts/iggy/values.yaml               | 12 ++++++--
 4 files changed, 65 insertions(+), 20 deletions(-)

diff --git a/helm/charts/iggy/Chart.yaml b/helm/charts/iggy/Chart.yaml
index 26c42e6b5..08f86a803 100644
--- a/helm/charts/iggy/Chart.yaml
+++ b/helm/charts/iggy/Chart.yaml
@@ -20,7 +20,7 @@ apiVersion: v2
 name: iggy
 description: A Helm chart for Apache Iggy server and web-ui
 type: application
-version: 0.4.0
+version: 0.5.0
 appVersion: "0.7.0"
 sources:
   - https://github.com/apache/iggy
diff --git a/helm/charts/iggy/README.md b/helm/charts/iggy/README.md
index c6c9567eb..76c62b3e3 100644
--- a/helm/charts/iggy/README.md
+++ b/helm/charts/iggy/README.md
@@ -7,6 +7,7 @@ A Helm chart for [Apache Iggy](https://github.com/apache/iggy) 
server and web-ui
 * Kubernetes 1.19+
 * Helm 3.2.0+
 * PV provisioner support in the underlying infrastructure (if persistence is 
enabled)
+* Prometheus Operator CRDs if `server.serviceMonitor.enabled=true`
 
 ### io_uring Requirements
 
@@ -15,7 +16,13 @@ Iggy server uses `io_uring` for high-performance async I/O. 
This requires:
 1. **IPC_LOCK capability** - For locking memory required by io_uring
 2. **Unconfined seccomp profile** - To allow io_uring syscalls
 
-These are configured by default in the chart's `securityContext` and 
`podSecurityContext`.
+These are configured by default for the Iggy server via the chart's root-level
+`securityContext` and `podSecurityContext`. The web UI uses 
`ui.securityContext`
+and `ui.podSecurityContext`, which default to empty.
+
+Some local or container-based Kubernetes environments may still fail during 
Iggy runtime
+initialization if the node/kernel does not provide the `io_uring` support 
required by the
+server runtime.
 
 ## Quick Start
 
@@ -26,18 +33,18 @@ cd iggy
 
 # Install with persistence enabled
 helm install iggy ./helm/charts/iggy \
-  --set server.persistence.enabled=true \
-  --set server.serviceMonitor.enabled=false
+  --set server.persistence.enabled=true
 
 # Install with custom root credentials
 helm install iggy ./helm/charts/iggy \
   --set server.persistence.enabled=true \
-  --set server.serviceMonitor.enabled=false \
   --set server.users.root.username=admin \
   --set server.users.root.password=secretpassword
 ```
 
-> **Note:** Set `server.serviceMonitor.enabled=false` if Prometheus Operator 
is not installed.
+> **Note:** `server.serviceMonitor.enabled` defaults to `false`.
+> Enable it only if Prometheus Operator is installed and you want a 
`ServiceMonitor` resource.
+> The server still requires node/kernel support for `io_uring`, including on 
clean local clusters such as `kind` or `minikube`.
 
 ## Installation
 
@@ -63,6 +70,10 @@ helm install iggy ./helm/charts/iggy \
 helm install iggy ./helm/charts/iggy -f custom-values.yaml
 ```
 
+If Prometheus Operator is installed and you want monitoring, set
+`server.serviceMonitor.enabled=true` in `custom-values.yaml` or pass it on the
+command line with `--set server.serviceMonitor.enabled=true`.
+
 ## Uninstallation
 
 ```bash
@@ -101,14 +112,14 @@ helm uninstall iggy
 | `server.users.root.password` | string | `"changeit"` | Root user password |
 | `server.users.root.createSecret` | bool | `true` | Create secret for root 
user |
 | `server.users.root.existingSecret.name` | string | `""` | Use existing 
secret |
-| `securityContext.capabilities.add` | list | `["IPC_LOCK"]` | Container 
capabilities (required for io_uring) |
-| `podSecurityContext.seccompProfile.type` | string | `"Unconfined"` | Seccomp 
profile (required for io_uring) |
+| `securityContext.capabilities.add` | list | `["IPC_LOCK"]` | Server 
container capabilities (required for io_uring) |
+| `podSecurityContext.seccompProfile.type` | string | `"Unconfined"` | Server 
pod seccomp profile (required for io_uring) |
 
 ### Monitoring Configuration
 
 | Key | Type | Default | Description |
 | --- | ---- | ------- | ----------- |
-| `server.serviceMonitor.enabled` | bool | `true` | Enable ServiceMonitor for 
Prometheus Operator |
+| `server.serviceMonitor.enabled` | bool | `false` | Enable ServiceMonitor for 
Prometheus Operator |
 | `server.serviceMonitor.interval` | string | `"30s"` | Scrape interval |
 | `server.serviceMonitor.path` | string | `"/metrics"` | Metrics endpoint path 
|
 
@@ -121,6 +132,8 @@ helm uninstall iggy
 | `ui.image.repository` | string | `"apache/iggy-web-ui"` | UI image 
repository |
 | `ui.ports.http` | int | `3050` | UI HTTP port |
 | `ui.server.endpoint` | string | `""` | Iggy server endpoint (auto-detected 
if empty) |
+| `ui.securityContext` | object | `{}` | UI container security context |
+| `ui.podSecurityContext` | object | `{}` | UI pod security context |
 
 ## Troubleshooting
 
@@ -137,7 +150,19 @@ This means io_uring cannot lock sufficient memory. Ensure:
 1. `securityContext.capabilities.add` includes `IPC_LOCK`
 2. `podSecurityContext.seccompProfile.type` is `Unconfined`
 
-These are set by default but may be overridden.
+These server settings are set by default but may be overridden.
+
+### Pod CrashLoopBackOff with "Invalid argument" during server startup
+
+If the Iggy server exits with a panic similar to:
+
+```text
+called `Result::unwrap()` on an `Err` value: Os { code: 22, kind: 
InvalidInput, message: "Invalid argument" }
+```
+
+the Kubernetes node may not support the `io_uring` runtime configuration 
required by the server.
+This has been observed on local/container-based clusters even when `IPC_LOCK` 
and
+`podSecurityContext.seccompProfile.type=Unconfined` are set.
 
 ### ServiceMonitor CRD not found
 
@@ -175,13 +200,14 @@ kubectl port-forward svc/iggy-ui 3050:3050
 
 ### Using Ingress
 
-Enable ingress in values:
+Enable ingress in values. Set `className` and any controller-specific 
annotations to match your
+ingress implementation:
 
 ```yaml
 server:
   ingress:
     enabled: true
-    className: nginx
+    className: "<your-ingress-class>"
     hosts:
       - host: iggy.example.com
         paths:
diff --git a/helm/charts/iggy/templates/deployment.yaml 
b/helm/charts/iggy/templates/deployment.yaml
index 67f38417a..4a75c57d9 100644
--- a/helm/charts/iggy/templates/deployment.yaml
+++ b/helm/charts/iggy/templates/deployment.yaml
@@ -15,6 +15,9 @@
 # specific language governing permissions and limitations
 # under the License.
 {{ if .Values.server.enabled }}
+{{- if hasKey .Values.server "podSecurityContext" }}
+{{- fail "server.podSecurityContext has been moved to podSecurityContext (root 
level). Please update your values." }}
+{{- end }}
 ---
 apiVersion: apps/v1
 kind: Deployment
@@ -44,7 +47,7 @@ spec:
       {{- end }}
       serviceAccountName: {{ include "iggy.serviceAccountName" . }}
       securityContext:
-        {{ toYaml .Values.server.podSecurityContext | nindent 8 }}
+        {{ toYaml .Values.podSecurityContext | nindent 8 }}
       containers:
         - name: {{ .Chart.Name }}
           securityContext:
@@ -96,13 +99,19 @@ spec:
               mountPath: /app/local_data
               subPath: {{ ternary "root" (printf "%s/root" 
.Values.server.persistence.subPath) (empty .Values.server.persistence.subPath) 
}}
 
+          startupProbe:
+            httpGet:
+              path: /ping
+              port: http
+            periodSeconds: 10
+            failureThreshold: 30
           livenessProbe:
             httpGet:
-              path: /
+              path: /ping
               port: http
           readinessProbe:
             httpGet:
-              path: /
+              path: /ping
               port: http
           resources:
             {{- toYaml .Values.resources | nindent 12 }}
@@ -154,12 +163,16 @@ spec:
         {{ toYaml . | nindent 8 }}
       {{- end }}
       serviceAccountName: {{ include "iggy.serviceAccountName" . }}
+      {{- with .Values.ui.podSecurityContext }}
       securityContext:
-        {{ toYaml .Values.podSecurityContext | nindent 8 }}
+        {{ toYaml . | nindent 8 }}
+      {{- end }}
       containers:
         - name: {{ .Chart.Name }}
+          {{- with .Values.ui.securityContext }}
           securityContext:
-            {{ toYaml .Values.securityContext | nindent 12 }}
+            {{ toYaml . | nindent 12 }}
+          {{- end }}
           image: "{{ .Values.ui.image.repository }}:{{ .Values.ui.image.tag | 
default .Chart.AppVersion }}"
           imagePullPolicy: {{ .Values.ui.image.pullPolicy }}
           ports:
diff --git a/helm/charts/iggy/values.yaml b/helm/charts/iggy/values.yaml
index e604ff9ea..a7316942d 100644
--- a/helm/charts/iggy/values.yaml
+++ b/helm/charts/iggy/values.yaml
@@ -36,7 +36,7 @@ server:
 
   serviceMonitor:
     # -- Enable this if you're using [Prometheus 
Operator](https://github.com/coreos/prometheus-operator)
-    enabled: true
+    enabled: false
     # -- Namespace to deploy the ServiceMonitor
     namespace: ""
     # -- Fallback to the prometheus default unless specified
@@ -170,6 +170,12 @@ ui:
     #   cpu: 100m
     #   memory: 128Mi
 
+  # -- Web UI pod security context. Leave empty unless your UI deployment 
needs explicit pod-level settings.
+  podSecurityContext: {}
+
+  # -- Web UI container security context. Leave empty unless your UI 
deployment needs explicit container-level settings.
+  securityContext: {}
+
   nodeSelector: {}
 
   tolerations: []
@@ -195,14 +201,14 @@ serviceAccount:
 podAnnotations: {}
 
 podSecurityContext:
-  # Required for io_uring syscalls in containerized environments
+  # Required for Iggy server io_uring syscalls in containerized environments
   seccompProfile:
     type: Unconfined
 
 securityContext:
   capabilities:
     add:
-      # Required for memlock (io_uring memory)
+      # Required for Iggy server memlock (io_uring memory)
       - IPC_LOCK
 
 resources:

Reply via email to