diff --git a/.agents/skills/release-chart/SKILL.md b/.agents/skills/release-chart/SKILL.md new file mode 100644 index 0000000..2fc422a --- /dev/null +++ b/.agents/skills/release-chart/SKILL.md @@ -0,0 +1,111 @@ +--- +name: release-chart +description: Cut and publish a new release of the Zabbix Helm chart in this repository, following the versioning rules and maintainer release process documented in CONTRIBUTING.md and CLAUDE.md (bump Chart.yaml/artifacthub-pkg.yml/values.yaml, regenerate docs, tag the release so CI publishes it). Trigger on requests like "release a new chart version", "cut a release", "bump the chart version", "publish v7.1.0", "prepare the next Zabbix chart release". +--- + +# Release a new version of the helm-zabbix chart + +This skill walks through the maintainer-only release process documented in `CONTRIBUTING.md` ("For code mainteners only") and `CLAUDE.md` ("Versioning and release rules"). Its final steps are hard to reverse — pushing a git tag triggers a public GitHub Release via CI — so **always confirm the version number and each push/tag/PR action with the user before running it**. Do not skip confirmation because a step "seems obvious". + +## Installing and invoking this skill + +This repo keeps skills under `.agents/skills/` rather than `.claude/skills/` so the same file can be reused by any AI assistant that supports a skills convention, not just Claude Code. To get Claude Code's native `/release-chart` invocation, symlink this directory in: + +- **Project-level** (this repo only): + ```bash + mkdir -p .claude/skills + ln -s ../../.agents/skills/release-chart .claude/skills/release-chart + ``` +- **Personal** (available in every repo you work in): + ```bash + mkdir -p ~/.claude/skills + ln -s /absolute/path/to/helm-zabbix/.agents/skills/release-chart ~/.claude/skills/release-chart + ``` + +Once linked, run it with `/release-chart`, or just describe the task in natural language — e.g. "release a new chart version", "cut a release", "bump the chart version", "prepare the next Zabbix chart release" (these phrases match the `description` frontmatter above). + +No symlink is strictly required to benefit from this file: `CLAUDE.md` already tells Claude Code to read and follow it whenever a maintainer asks to cut/publish a release, so it works out of the box in this repo. The symlink is only needed for the formal `/release-chart` slash invocation or to reuse the skill from other repositories. + +## 0. Preconditions + +- Confirm with the user (if not already given): + - The new chart `version` (and whether `appVersion`/`zabbixImageTag` — the Zabbix version — is also changing). + - Whether this is a **major** bump (the middle digit, e.g. `7.0.12` → `7.1.0` — signals a change that may require users to update their `values.yaml`) or a **minor** bump (the last digit, e.g. `7.0.12` → `7.0.13` — no API/interface changes). +- Verify all PRs intended for this release are already merged into `main`, and local `main` is up to date. +- Never bump versions or tag directly on `main` — always use a release branch. + +## 1. Create the release branch + +```bash +git checkout main +git pull upstream main +git checkout -b BRANCH_NAME +``` + +## 2. Run local tests + +```bash +cd charts/zabbix +make help # lists all available targets with descriptions +make lint +``` + +Fix any lint errors before continuing. + +## 3. Bump versions — exact files, nothing else + +1. `charts/zabbix/Chart.yaml` — `version:` (chart version) and `appVersion:` (Zabbix version, only if it's changing). +2. `charts/zabbix/artifacthub-pkg.yml` — three separate spots, all must match `Chart.yaml`: + - `version:` and `appVersion:` fields near the top. + - `createdAt:` — set to the output of `date +%Y-%m-%dT%TZ`. + - The hardcoded `export ZABBIX_CHART_VERSION='...'` line inside the `install:` block. This file is plain YAML (not Go-templated), so this string must be edited by hand. +3. `charts/zabbix/values.yaml` — `zabbixImageTag:` if the Zabbix version (`appVersion`) changed. +4. If this is a **major** release: add a new subsection under "Breaking changes of this helm chart" in `charts/zabbix/README.md.gotmpl`, explaining what changed and what users need to check in their own `values.yaml`. + +**Do not hand-edit** `charts/zabbix/README.md`, and do not touch the `export ZABBIX_CHART_VERSION=...` line inside `README.md.gotmpl` — that one is templated from `Chart.yaml`'s `version` via `{{ template "chart.version" . }}` and regenerates automatically in the next step. Only `artifacthub-pkg.yml`'s copy of that line is a plain hardcoded string. + +## 4. Regenerate chart docs + +```bash +cd charts/zabbix +make gen-docs +``` + +Confirm the resulting diff to `charts/zabbix/README.md` only touches the version number and (if `values.yaml` changed) the values table — nothing else should move. + +## 5. Commit, push, and open a PR + +Confirm with the user before pushing or opening the PR (visible, shared-state actions): + +```bash +git add charts/zabbix/Chart.yaml charts/zabbix/artifacthub-pkg.yml charts/zabbix/values.yaml charts/zabbix/README.md charts/zabbix/README.md.gotmpl +git commit -m "Release x.y.z" +git push --set-upstream origin BRANCH_NAME +``` + +Open a PR to `main`, address review feedback, then merge. + +## 6. Tag and publish — confirm explicitly before this step + +After the release PR is merged into `main`: + +```bash +git checkout main +git pull upstream main +git tag -a x.y.z -m "New release" +git push upstream --tags +``` + +Pushing the tag triggers `.github/workflows/helm-chart-releaser.yml`, which packages the chart and publishes a GitHub Release named `zabbix-x.y.z`. This is the point of no easy return for this process — do not run it without the user explicitly confirming the exact tag/version first. + +## 7. Finalize release notes + +Edit the auto-generated GitHub Release notes to match the style of previous releases (see the repo's Releases page). If this was a major release, make sure the breaking-changes write-up from step 3.4 is reflected in the release notes. + +## Reference + +- Full command-by-command detail: `CONTRIBUTING.md` → "For code mainteners only". +- Version semantics and cross-doc consistency notes: `CLAUDE.md` → "Versioning and release rules". +- A visual summary (Mermaid flowchart) of this same process: root `README.md` → "Release process". + +Keep this file, `CONTRIBUTING.md`, and `CLAUDE.md` in sync — if the release steps change, update all three. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..a2d5793 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,69 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Repository overview + +This repo contains a single Helm chart, `charts/zabbix`, that deploys [Zabbix](https://www.zabbix.com) (monitoring solution) on Kubernetes, backed by PostgreSQL/TimescaleDB only (no MySQL/MariaDB support planned). There is no application source code — all logic lives in Helm templates (Go templates) and `values.yaml`. + +## Common commands + +All chart commands are run from `charts/zabbix/` and are wrapped in the `Makefile` there, which runs `helm`/`helm-docs` inside Docker containers (no local Helm install required): + +```bash +cd charts/zabbix +make help # lists all targets below with their one-line descriptions +make lint # helm lint . (via dockerized helm) +make package # helm package . -d packages +make gen-docs # regenerates charts/zabbix/README.md from README.md.gotmpl via helm-docs (run after editing values.yaml) +``` + +`help` is self-documenting: it greps the Makefile for `target: ## description` comments, so any new target added with a trailing `## ...` comment shows up automatically — no separate list to maintain. + +If `helm` is installed locally, the equivalent direct commands work too, e.g. `helm lint .` from `charts/zabbix/`. + +There is no unit test suite in the traditional sense. Chart correctness is validated by: +- `helm lint` +- `helm template`/`--dry-run` against the chart +- The built-in Helm test hooks in `charts/zabbix/templates/tests/` (`test-server-connection.yaml`, `test-web-connection.yaml`), run post-install via `helm test -n ` +- CI in `.github/workflows/tests.yaml`, which spins up `kind` clusters and runs full install/upgrade/test/uninstall cycles across three scenarios: internal DB without HA, external DB with HA + external secret, and external DB with HA without external secret. Each scenario also exercises upgrades across Zabbix LTS/non-LTS image tags (`ubuntu-6.0-latest`, default `appVersion`, `ubuntu-7.2-latest`). + +To test changes locally against a real cluster (e.g. `kind`), follow `charts/zabbix/docs/example/README.md`, which uses `charts/zabbix/docs/example/kind/values.yaml` as an override file. + +## Versioning and release rules (see CONTRIBUTING.md and README.md) + +- Never bump `version`/`appVersion` in `charts/zabbix/Chart.yaml` or `charts/zabbix/artifacthub-pkg.yml` on your own initiative — that's the maintainers' release process, done via git tag (`zabbix-x.y.z` triggers `.github/workflows/helm-chart-releaser.yml`). If a maintainer explicitly asks to cut/publish a new release, use the `release-chart` skill at `.agents/skills/release-chart/SKILL.md` — it encodes the exact file list, ordering, and confirmation points (especially before pushing a tag, which is hard to reverse) instead of re-deriving the process from scratch. +- Never hand-edit `charts/zabbix/README.md` — it is generated by `make gen-docs` from `charts/zabbix/README.md.gotmpl` (which contains the prose/docs) plus the `values.yaml` comments (which become the values table). Edit the `.gotmpl` file and/or `values.yaml` comments, then regenerate. +- Keep `values.yaml` defaults working/sane, since templates reference them directly and CI installs with mostly-default values. +- The maintainer-only release steps are documented in three places, and all need to stay consistent if the process changes: `CONTRIBUTING.md` ("For code mainteners only" section, exact commands), the root `README.md` ("Release process" section, a summary plus a Mermaid flowchart), and `.agents/skills/release-chart/SKILL.md` (the actionable, step-by-step version meant to be followed directly). +- Version semantics: bumping the middle digit (`major`, e.g. `6.0.2` → `6.1.0`) signals a change that may require users to update their `values.yaml`; bumping the last digit (`minor`, e.g. `6.0.2` → `6.0.3`) is a safe, no-API-change upgrade. +- The root `README.md` also has a "Repository structure" section with an annotated directory tree. Update it (and this file, if the architecture notes below are affected) when adding, removing, or renaming top-level files/templates. + +## Architecture + +### Template/value organization + +Every component follows the same pattern in `values.yaml`: a top-level key (`zabbixServer`, `zabbixProxy`, `zabbixAgent`, `zabbixWeb`, `zabbixWebService`, `zabbixJavaGateway`, `zabbixBrowserMonitoring`, `postgresql`) with `enabled`, `image`, `resources`, `extraEnv`, `extraVolumes`/`extraVolumeMounts`, `extraDeploymentAnnotations`/`extraDeploymentLabels`, `extraPodAnnotations`/`extraPodLabels`, etc. following consistent naming across components. `global.commonLabels` applies to all resources. When adding a new tunable, mirror the sibling component's pattern rather than inventing a new shape. + +Each component's Kubernetes objects live in one template file named `-.yaml` under `charts/zabbix/templates/` (e.g. `deployment-zabbix-server.yaml`, `statefulset-zabbix-proxy.yaml`, `daemonset-zabbix-agent.yaml`). Shared template helpers/macros are in `templates/_helpers.tpl`. + +### Database access (`postgresAccess`) + +All DB connection info (host/port/user/password/db/schema) is centralized in one Secret (named `-db-access` by default, or `postgresAccess.existingSecretName` if pointing at an externally-managed secret, e.g. one generated by CNPG/PGO). The helper `zabbix.postgresAccess.variables` in `_helpers.tpl` generates the env vars for any container needing DB access, and its behavior branches on a `context` argument (`db_client` uses `PGHOST`/`PGUSER`/etc. for psql-based cron jobs, `db_init_upgrade` uses plain values instead of secret refs for the pre-install job, everything else uses `DB_SERVER_HOST`/`POSTGRES_USER`/etc. via `secretKeyRef`). When touching DB env var logic, changes usually need to be made in this one helper, not per-template. + +### Zabbix Server High Availability (`zabbixServer.zabbixServerHA`) + +This is the most complex part of the chart: +- HA is a native Zabbix Server feature (hot-standby via heartbeat rows in the DB), gated in this chart by `zabbixServer.zabbixServerHA.enabled`. +- HA is **mutually exclusive with `postgresql.enabled=true`** (enforced by a `fail` in `templates/job-create-upgrade-db.yaml`) — HA requires bringing your own (ideally HA) external Postgres. +- When HA is enabled, `templates/job-create-upgrade-db.yaml` runs as a Helm `pre-install,pre-upgrade` hook Job that prepares/migrates the DB schema and reconciles the `ha_node` table *before* any Zabbix Server pod starts (this ordering is why it can't be a post-install hook and why `postgresql.enabled` + HA can't coexist — Helm has no way to deploy a DB pod before a pre-install hook runs). +- A separate sidecar ("HA Labels sidecar", image from `zabbix-community/helm-zabbix-image-ha-labels-sidecar`) watches each Zabbix Server pod's process count to determine active/standby status and updates pod labels accordingly, so Services can route Active checks/Active Proxies to the right pod without probing the Zabbix Server port directly (probing pollutes Zabbix Server logs). +- `templates/cronjob-hanodes-autoclean.yaml`, `templates/role-ha-helper.yaml`, `templates/rolebinding-ha-helper.yaml`, `templates/serviceaccount-ha-helper.yaml` support this HA machinery (stale HA node cleanup, RBAC for the helper containers). +- See the "Native Zabbix Server High Availability" section of `charts/zabbix/README.md.gotmpl` before changing anything here — the reasoning behind the hook ordering and constraints is non-obvious and documented there. + +### Other notable behaviors + +- `templates/extra-manifests.yaml` lets users inject arbitrary extra manifests via `.Values.extraManifests`, rendered through `zabbix.tools.render` in `_helpers.tpl` (supports both plain YAML values and Helm template strings needing `tpl`). +- Zabbix Proxy (`statefulset-zabbix-proxy.yaml`) uses SQLite3 locally and supports multiple replicas for proxy groups; when replicated, `ZBX_HOSTNAME` can't be statically set and falls back to the pod name. +- Zabbix Agent supports both DaemonSet mode (`zabbixAgent.runAsDaemonSet=true`, uses `hostNetwork: true`) and Deployment/sidecar modes, plus a dynamic hostname mode via `ZBX_HOSTNAMEITEM`. +- Breaking changes between major chart versions are tracked in the "Breaking changes of this helm chart" section of `charts/zabbix/README.md.gotmpl` — check it when bumping `postgresAccess`, label/selector, or naming-convention behavior, since those have caused required-reinstall breakage before. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a2885bf..d403c50 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,6 +50,13 @@ cd charts/zabbix make lint ``` +Run ``make help`` to list all available ``make`` targets (``lint``, ``package``, ``gen-docs``, etc.) with a short description of each: + +```bash +cd charts/zabbix +make help +``` + - Method using locally installed ``helm`` command: ```bash @@ -107,6 +114,9 @@ References: ## For code mainteners only +> [!TIP] +> If you're using an AI coding assistant that supports skills (e.g. Claude Code), the `release-chart` skill at [.agents/skills/release-chart/SKILL.md](.agents/skills/release-chart/SKILL.md) automates the steps below end-to-end, including the exact files to bump and explicit confirmation points before any push/tag. Point your assistant at that file, or ask it to "release a new chart version", instead of following each step manually. + To generate a new release of the helm chart, follow these instructions: - Review and merge the opened PRs @@ -140,7 +150,7 @@ A **minor** is the "dot-dot" release. Example: *6.0.2* -> *6.0.3* is **minor upg - Change the ``version`` and ``appVersion`` parameters (helm chart and Zabbix version, respectively) in ``charts/zabbix/Chart.yaml`` and ``charts/zabbix/artifacthub-pkg.yml`` files. - Change the ``zabbixImageTag`` value (Zabbix version) in ``charts/zabbix/values.yaml`` file. - Change the ``createdAt`` parameter in ``charts/zabbix/artifacthub-pkg.yml`` file using the output of the command ``date +%Y-%m-%dT%TZ`` command. -- Change the ``ZABBIX_CHART_VERSION`` variable in ``charts/zabbix/artifacthub-pkg.yml`` and ``charts/zabbix/README.md`` files. +- Change the ``ZABBIX_CHART_VERSION`` variable in ``charts/zabbix/artifacthub-pkg.yml``. - Run the following commands to update the documentation of the helm chart. ```bash diff --git a/README.md b/README.md index 9fd77a1..f34a456 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ - [Important links](#important-links) - [Related to this helm chart](#related-to-this-helm-chart) - [Related to Zabbix](#related-to-zabbix) + - [Repository structure](#repository-structure) + - [Release process](#release-process) - [Contributors](#contributors) - [Maintainers](#maintainers) - [History](#history) @@ -58,6 +60,99 @@ See the [charts/zabbix/docs/example/README.md](charts/zabbix/docs/example/README - Open issues: https://support.zabbix.com/projects/ZBX/issues/ZBX-25876?filter=allopenissues - Open feature requests: https://support.zabbix.com/projects/ZBXNEXT/issues/ZBXNEXT-8875?filter=allopenissues +## Repository structure + +```text +. +├── charts +│ └── zabbix # The Helm chart itself +│ ├── docs +│ │ ├── example +│ │ │ ├── kind +│ │ │ │ └── values.yaml # Example values.yaml to install this chart in a kind cluster +│ │ │ └── README.md # Tutorial to install this chart in a kind cluster +│ │ ├── README.md # Index of docs +│ │ └── requirements.md # Requirements to develop/test this chart +│ ├── templates # Kubernetes manifests (Go templates), one file per kind/component +│ │ ├── tests +│ │ │ ├── test-server-connection.yaml # helm test: checks Zabbix Server connectivity +│ │ │ └── test-web-connection.yaml # helm test: checks Zabbix Web connectivity +│ │ ├── clusterrole-binding.yaml +│ │ ├── clusterrole.yaml +│ │ ├── cronjob-hanodes-autoclean.yaml # Cleans up stale Zabbix Server HA nodes +│ │ ├── daemonset-zabbix-agent.yaml +│ │ ├── deployment-webdriver.yaml +│ │ ├── deployment-zabbix-java-gateway.yaml +│ │ ├── deployment-zabbix-server.yaml +│ │ ├── deployment-zabbix-webservice.yaml +│ │ ├── deployment-zabbix-web.yaml +│ │ ├── extra-manifests.yaml # Renders arbitrary manifests from .Values.extraManifests +│ │ ├── _helpers.tpl # Shared template helpers/macros (labels, names, DB env vars, etc.) +│ │ ├── ingress.yaml +│ │ ├── job-create-upgrade-db.yaml # Pre-install/pre-upgrade hook Job that prepares/migrates the DB schema +│ │ ├── NOTES.txt # Post-install usage notes shown by helm +│ │ ├── rolebinding-ha-helper.yaml +│ │ ├── role-ha-helper.yaml +│ │ ├── secret-db-access.yaml +│ │ ├── serviceaccount-ha-helper.yaml +│ │ ├── serviceaccount.yaml +│ │ ├── service.yaml +│ │ ├── statefulset-postgresql.yaml +│ │ └── statefulset-zabbix-proxy.yaml +│ ├── artifacthub-pkg.yml # Artifact Hub metadata +│ ├── artifacthub-repo.yml # Artifact Hub repository metadata +│ ├── Chart.yaml # Chart name, version and appVersion +│ ├── Makefile # Dockerized helm/helm-docs targets: lint, package, gen-docs +│ ├── README.md # Generated chart documentation (do not edit directly) +│ ├── README.md.gotmpl # Source template used to generate README.md via helm-docs +│ └── values.yaml # Chart default configuration values +├── .github +│ ├── ISSUE_TEMPLATE +│ │ ├── bug_report.md +│ │ └── feature_request.md +│ ├── workflows +│ │ ├── helm-chart-releaser.yml # Publishes chart releases on tag push +│ │ └── tests.yaml # Lints and tests the chart against kind clusters +│ ├── CODEOWNERS +│ ├── dependabot.yml +│ └── PULL_REQUEST_TEMPLATE.md +├── CLAUDE.md # Guidance for Claude Code when working in this repository +├── CONTRIBUTING.md # How to contribute and how to release new chart versions +├── HISTORY.md # Repository history +├── LICENSE +└── README.md # This file +``` + +## Release process + +Publishing a new version of this Helm chart is restricted to the code maintainers (see [CONTRIBUTING.md](CONTRIBUTING.md#for-code-mainteners-only) for the full step-by-step, including exact commands). At a high level: + +- The `version` field in `charts/zabbix/Chart.yaml` follows a `major.minor.patch` convention where, in practice, only the last two digits are used: a `major` ("dot-release", e.g. `6.0.2` → `6.1.0`) signals a change that may require users to update their `values.yaml`, and a `minor` ("dot-dot-release", e.g. `6.0.2` → `6.0.3`) is a safe, no-API-change upgrade. +- Bumping `version`/`appVersion` in `Chart.yaml` and `artifacthub-pkg.yml`, and regenerating `charts/zabbix/README.md` via `make gen-docs`, only happens on the release branch/PR, right before merging to `main`. +- A release is actually cut by pushing a git tag (`x.y.z`) to the upstream repository, which triggers [.github/workflows/helm-chart-releaser.yml](.github/workflows/helm-chart-releaser.yml) to package and publish the chart as a GitHub Release named `zabbix-x.y.z`. + +```mermaid +flowchart TD + A[Review and merge open PRs into main] --> B[Create a release branch] + B --> C["Run local tests (cd charts/zabbix && make lint)"] + C --> D["Bump version/appVersion in Chart.yaml and artifacthub-pkg.yml"] + D --> E["Update zabbixImageTag in values.yaml"] + E --> F["Update createdAt in artifacthub-pkg.yml"] + F --> G["Update ZABBIX_CHART_VERSION in artifacthub-pkg.yml and README.md.gotmpl"] + G --> H["cd charts/zabbix && make gen-docs"] + H --> I[Commit and push the release branch] + I --> J[Open Pull Request to main] + J --> K{Reviewer requests changes?} + K -- Yes --> D + K -- No --> L[Merge Pull Request into main] + L --> M["Sync local main (git pull upstream main)"] + M --> N["Create annotated tag (git tag -a x.y.z -m 'New release')"] + N --> O["Push tag (git push upstream --tags)"] + O --> P["helm-chart-releaser.yml workflow runs"] + P --> Q["chart-releaser packages the chart and publishes GitHub Release 'zabbix-x.y.z'"] + Q --> R[Edit and adjust the auto-generated release notes on GitHub] +``` + ## Contributors diff --git a/charts/zabbix/Chart.yaml b/charts/zabbix/Chart.yaml index 4972c92..3cf8b3f 100644 --- a/charts/zabbix/Chart.yaml +++ b/charts/zabbix/Chart.yaml @@ -1,9 +1,9 @@ --- apiVersion: v2 # Don't change this name: zabbix -version: 7.0.12 # helm chart version +version: 7.1.0 # helm chart version # LTS Zabbix version by default due to stability. See: https://www.zabbix.com/life_cycle_and_release_policy -appVersion: 7.0.16 # zabbix version +appVersion: 7.0.23 # zabbix version description: Zabbix is a mature and effortless enterprise-class open source monitoring solution for network monitoring and application monitoring of millions of metrics. keywords: - zabbix diff --git a/charts/zabbix/Makefile b/charts/zabbix/Makefile index 399721c..d72badf 100644 --- a/charts/zabbix/Makefile +++ b/charts/zabbix/Makefile @@ -53,19 +53,19 @@ helm: $(CMD) # Run linter for helm chart -lint: +lint: ## Lint the helm chart make requirements CMD="lint ." $(MAKE) helm # Package chart into zip file -package: +package: ## Package the helm chart into a .tgz file under packages/ make requirements CMD="package . -d packages" $(MAKE) helm # Update documentation of helm chart -gen-docs: +gen-docs: ## Regenerate README.md from README.md.gotmpl via helm-docs make requirements docker run --rm --name helm-docs \ @@ -74,3 +74,7 @@ gen-docs: -w /helm-chart \ $(HELM_DOCS_IMAGE) \ helm-docs + +# Show this help message +help: ## Show this help message + @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}' diff --git a/charts/zabbix/README.md b/charts/zabbix/README.md index ba1425c..e40754a 100644 --- a/charts/zabbix/README.md +++ b/charts/zabbix/README.md @@ -1,6 +1,6 @@ # Helm chart for Zabbix -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) ![Version: 7.0.12](https://img.shields.io/badge/Version-7.0.12-informational?style=flat-square) [![Downloads](https://img.shields.io/github/downloads/zabbix-community/helm-zabbix/total?label=Downloads +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) ![Version: 7.1.0](https://img.shields.io/badge/Version-7.1.0-informational?style=flat-square) [![Downloads](https://img.shields.io/github/downloads/zabbix-community/helm-zabbix/total?label=Downloads )](https://somsubhra.github.io/github-release-stats/?username=zabbix-community&repository=helm-zabbix&page=1&per_page=500#) [![Releases ChangeLog](https://img.shields.io/badge/Changelog-8A2BE2 )](https://github.com/zabbix-community/helm-zabbix/releases) @@ -83,7 +83,7 @@ helm search repo zabbix-community/zabbix -l Set the helm chart version you want to use. Example: ```bash -export ZABBIX_CHART_VERSION='7.0.12' +export ZABBIX_CHART_VERSION='7.1.0' ``` Export default values of ``zabbix`` chart to ``$HOME/zabbix_values.yaml`` file: @@ -456,6 +456,9 @@ The following tables lists the configurable parameters of the chart and their de | zabbixAgent.ZBX_SERVER_HOST | string | `"0.0.0.0/0"` | Zabbix Server host | | zabbixAgent.ZBX_SERVER_PORT | int | `10051` | Zabbix Server port | | zabbixAgent.ZBX_TIMEOUT | int | `4` | The variable is used to specify timeout for processing checks. By default, value is 4. | +| zabbixAgent.daemonSetHostIPC | bool | `false` | allows the pod to share the host's IPC namespace in DaemonSet mode (e.g., shared memory) | +| zabbixAgent.daemonSetHostPID | bool | `false` | allows the pod to see the processes on the host system in DaemonSet mode | +| zabbixAgent.daemonSetUpdateStrategy | object | `{"rollingUpdate":{"maxUnavailable":5},"type":"RollingUpdate"}` | Configures the parallelism of the zabbixAgent rollouts when deployed as DaemonSet daemonSetUpdateStrategy: null type: RollingUpdate rollingUpdate: maxUnavailable: 5 # you can also use a percentage | | zabbixAgent.enabled | bool | `true` | Enables use of **Zabbix Agent** | | zabbixAgent.extraContainers | list | `[]` | Additional containers to start within the Zabbix Agent pod | | zabbixAgent.extraDaemonSetAnnotations | object | `{}` | Annotations to add to the daemonSet | @@ -535,7 +538,7 @@ The following tables lists the configurable parameters of the chart and their de | zabbixBrowserMonitoring.webdriver.port2 | int | `7900` | WebDriver container port 2 | | zabbixBrowserMonitoring.webdriver.replicaCount | int | `1` | Number of replicas of ``zabbixWebDriver`` module | | zabbixBrowserMonitoring.webdriver.resources | object | `{}` | Requests and limits of pod resources. See: [https://kubernetes.io/docs/concepts/configuration/manage-resources-containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers) | -| zabbixImageTag | string | `"ubuntu-7.0.16"` | Zabbix components (server, agent, web frontend, ...) image tag to use. This helm chart is compatible with non-LTS version of Zabbix, that include important changes and functionalities. But by default this helm chart will install the latest LTS version (example: 7.0.x). See more info in [Zabbix Life Cycle & Release Policy](https://www.zabbix.com/life_cycle_and_release_policy) page When you want use a non-LTS version (example: 7.4.x), you have to set this yourself. You can change version here or overwrite in each component (example: zabbixserver.image.tag, etc). | +| zabbixImageTag | string | `"ubuntu-7.0.23"` | Zabbix components (server, agent, web frontend, ...) image tag to use. This helm chart is compatible with non-LTS version of Zabbix, that include important changes and functionalities. But by default this helm chart will install the latest LTS version (example: 7.0.x). See more info in [Zabbix Life Cycle & Release Policy](https://www.zabbix.com/life_cycle_and_release_policy) page When you want use a non-LTS version (example: 7.4.x), you have to set this yourself. You can change version here or overwrite in each component (example: zabbixserver.image.tag, etc). | | zabbixJavaGateway.ZABBIX_OPTIONS | string | `""` | Additional arguments for Zabbix Java Gateway. Useful to enable additional libraries and features. | | zabbixJavaGateway.ZBX_DEBUGLEVEL | int | `3` | The variable is used to specify debug level, from 0 to 5 | | zabbixJavaGateway.ZBX_JAVAGATEWAY | string | `"zabbix-java-gateway"` | | @@ -770,7 +773,6 @@ The following tables lists the configurable parameters of the chart and their de | zabbixWebService.replicaCount | int | `1` | Number of replicas of ``zabbixWebService`` module | | zabbixWebService.resources | object | `{}` | Requests and limits of pod resources. See: [https://kubernetes.io/docs/concepts/configuration/manage-resources-containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers) | | zabbixWebService.securityContext | object | `{}` | Security Context configurations. Reference: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ | -| zabbixWebService.service | object | `{"annotations":{},"clusterIP":null,"port":10053,"type":"ClusterIP"}` | Set the IgnoreURLCertErrors configuration setting of Zabbix Web Service ignoreURLCertErrors=1 | | zabbixWebService.service.annotations | object | `{}` | Annotations for the Zabbix Web Service | | zabbixWebService.service.clusterIP | string | `nil` | clusterIP is the IP address of the service and is usually assigned randomly. If an address is specified manually, is in-range (as per system configuration), and is not in use, it will be allocated to the service. | | zabbixWebService.service.port | int | `10053` | Port of service in Kubernetes cluster | diff --git a/charts/zabbix/README.md.gotmpl b/charts/zabbix/README.md.gotmpl index 4e9b65c..18857d0 100644 --- a/charts/zabbix/README.md.gotmpl +++ b/charts/zabbix/README.md.gotmpl @@ -1,6 +1,6 @@ # Helm chart for Zabbix -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) ![Version: 7.0.12](https://img.shields.io/badge/Version-7.0.12-informational?style=flat-square) [![Downloads](https://img.shields.io/github/downloads/zabbix-community/helm-zabbix/total?label=Downloads +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) ![Version: {{ template "chart.version" . }}](https://img.shields.io/badge/Version-{{ template "chart.version" . }}-informational?style=flat-square) [![Downloads](https://img.shields.io/github/downloads/zabbix-community/helm-zabbix/total?label=Downloads )](https://somsubhra.github.io/github-release-stats/?username=zabbix-community&repository=helm-zabbix&page=1&per_page=500#) [![Releases ChangeLog](https://img.shields.io/badge/Changelog-8A2BE2 )](https://github.com/zabbix-community/helm-zabbix/releases) diff --git a/charts/zabbix/artifacthub-pkg.yml b/charts/zabbix/artifacthub-pkg.yml index d61c6a6..8af385b 100644 --- a/charts/zabbix/artifacthub-pkg.yml +++ b/charts/zabbix/artifacthub-pkg.yml @@ -5,13 +5,13 @@ # https://github.com/kedacore/external-scalers/blob/main/artifacthub/azure-cosmos-db/0.1.0/artifacthub-pkg.yml # https://artifacthub.io/packages/keda-scaler/keda-official-external-scalers/external-scaler-azure-cosmos-db?modal=install -version: 7.0.12 # helm chart version +version: 7.1.0 # helm chart version # LTS Zabbix version by default due to stability. See: https://www.zabbix.com/life_cycle_and_release_policy -appVersion: 7.0.16 # zabbix version +appVersion: 7.0.23 # zabbix version name: zabbix category: monitoring, networking, metrics displayName: Zabbix - The Enterprise-Class Open Source Network Monitoring Solution -createdAt: 2025-07-01T09:44:43Z # Command Linux: date +%Y-%m-%dT%TZ +createdAt: 2026-07-05T03:40:01Z # Command Linux: date +%Y-%m-%dT%TZ description: Zabbix is a mature and effortless enterprise-class open source monitoring solution for network monitoring and application monitoring of millions of metrics. logoURL: https://assets.zabbix.com/img/logo/zabbix_logo_500x131.png license: Apache-2.0 @@ -53,7 +53,7 @@ install: | Set the helm chart version you want to use. Example: ```bash - export ZABBIX_CHART_VERSION='7.0.12' + export ZABBIX_CHART_VERSION='7.1.0' ``` Export default values of ``zabbix`` chart to ``$HOME/zabbix_values.yaml`` file: diff --git a/charts/zabbix/docs/example/kind/values.yaml b/charts/zabbix/docs/example/kind/values.yaml index c9a0d81..eac5cfc 100644 --- a/charts/zabbix/docs/example/kind/values.yaml +++ b/charts/zabbix/docs/example/kind/values.yaml @@ -5,7 +5,7 @@ # mylabel: "my-value" # Custom values for zabbix. -zabbixImageTag: alpine-7.4.0 +zabbixImageTag: alpine-7.4.11 zabbixServer: enabled: true @@ -18,10 +18,10 @@ zabbixServer: # Postgresql Docker image name: chose one of "postgres" or "timescale/timescaledb" repository: postgres #repository: timescale/timescaledb - # -- Tag of Docker image of Postgresql server, choice "17" for postgres "2.19.3-pg17" for timescaledb + # -- Tag of Docker image of Postgresql server, choice "18" for postgres "2.28.2-pg18" for timescaledb # (Zabbix supports TimescaleDB. More info: https://www.zabbix.com/documentation/7.4/en/manual/installation/requirements) - tag: 17 - #tag: 2.19.3-pg17 + tag: 18 + #tag: 2.28.2-pg18 service: type: NodePort port: 10051 @@ -63,10 +63,10 @@ postgresql: # Postgresql Docker image name: chose one of "postgres" or "timescale/timescaledb" repository: postgres #repository: timescale/timescaledb - # -- Tag of Docker image of Postgresql server, choice "17" for postgres "2.17.2-pg16" for timescaledb + # -- Tag of Docker image of Postgresql server, choice "18" for postgres "2.28.2-pg18" for timescaledb # (Zabbix supports TimescaleDB7. More info: https://www.zabbix.com/documentation/7.0/en/manual/installation/requirements) - tag: 17 - #tag: 2.17.2-pg16 + tag: 18 + #tag: 2.28.2-pg18 max_connections: 100 persistence: enabled: true diff --git a/charts/zabbix/docs/requirements.md b/charts/zabbix/docs/requirements.md index 2056f3d..9d59c92 100644 --- a/charts/zabbix/docs/requirements.md +++ b/charts/zabbix/docs/requirements.md @@ -78,7 +78,7 @@ Reference: https://asdf-vm.com/guide/introduction.html Execute these commands to install helm. ```bash -VERSION="3.18.1" +VERSION="3.21.2" asdf plugin list all | grep helm asdf plugin add helm https://github.com/Antiarchitect/asdf-helm.git @@ -118,7 +118,7 @@ The documentation generated by ``helm-docs`` is based on the contents of the ``v Simple shell function for Kubectl installation in Linux 64 bits. Copy and paste this code: ```bash -VERSION_OPTION_1="1.33.1" +VERSION_OPTION_1="1.36.2" asdf plugin list all | grep kubectl asdf plugin add kubectl https://github.com/asdf-community/asdf-kubectl.git diff --git a/charts/zabbix/values.yaml b/charts/zabbix/values.yaml index 5e5f72a..a470042 100644 --- a/charts/zabbix/values.yaml +++ b/charts/zabbix/values.yaml @@ -20,7 +20,7 @@ global: # See more info in [Zabbix Life Cycle & Release Policy](https://www.zabbix.com/life_cycle_and_release_policy) page # When you want use a non-LTS version (example: 7.4.x), you have to set this yourself. You can change version # here or overwrite in each component (example: zabbixserver.image.tag, etc). -zabbixImageTag: ubuntu-7.0.16 +zabbixImageTag: ubuntu-7.0.23 # **Zabbix Postgresql access / credentials** configurations # with this dict, you can set unified PostgreSQL access credentials, IP and so on for both Zabbix Server and Zabbix web frontend @@ -294,6 +294,7 @@ postgresql: # claim_access_mode: "ReadWriteOnce" # -- Storage PVC storageclass to use # storageClass: my-storage-class + service: # -- Type of service to expose the application. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. # More details: https://kubernetes.io/docs/concepts/services-networking/service/ @@ -456,7 +457,7 @@ zabbixAgent: # -- Its is a default mode. Zabbix-agent will run as sidecar in zabbix-server and zabbix-proxy pods. Disable this mode if you want to run zabbix-agent as daemonSet runAsSidecar: true # -- Enable this mode if you want to run zabbix-agent as daemonSet. The 'zabbixAgent.runAsSidecar' option must be false. - runAsDaemonSet: true + runAsDaemonSet: false # -- Configures the parallelism of the zabbixAgent rollouts when deployed as DaemonSet #daemonSetUpdateStrategy: null # type: RollingUpdate @@ -498,6 +499,7 @@ zabbixAgent: ZBX_TIMEOUT: 4 # -- If set, this item will be used to dynamically determine the agent hostname instead of using the Kubernetes node name. Example: "system.hostname" # ZBX_HOSTNAMEITEM: "system.hostname" + service: # -- Type of service to expose the application. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. # More details: https://kubernetes.io/docs/concepts/services-networking/service/ @@ -618,7 +620,8 @@ zabbixWeb: # -- Secret name containing certificates for SAML configuration. Example: zabbix-web-samlcerts samlCertsSecretName: "" # -- Secret name containing certificates for TLS. Example: zabbix-web-tlscerts. Must include dhparam.pem, ssl.crt and ssl.key. - tlsCertsSecretName: "" + tlsCertsSecretName: "" + service: # -- Type of service to expose the application. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. # More details: https://kubernetes.io/docs/concepts/services-networking/service/ @@ -741,6 +744,7 @@ zabbixWebService: pullSecrets: [] # -- Set the IgnoreURLCertErrors configuration setting of Zabbix Web Service # ignoreURLCertErrors=1 + service: # -- Type of service to expose the application. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. # More details: https://kubernetes.io/docs/concepts/services-networking/service/