{"id":21030571,"url":"https://github.com/workfloworchestrator/gnmic-cluster-chart","last_synced_at":"2025-12-26T17:53:49.237Z","repository":{"id":261014262,"uuid":"869355707","full_name":"workfloworchestrator/gnmic-cluster-chart","owner":"workfloworchestrator","description":"A Helm chart to deploy a highly scalable gNMIc cluster on Kubernetes","archived":false,"fork":false,"pushed_at":"2024-11-04T07:19:54.000Z","size":69,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-02-25T05:34:52.981Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Smarty","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/workfloworchestrator.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-08T06:52:07.000Z","updated_at":"2025-01-20T04:16:49.000Z","dependencies_parsed_at":"2024-11-04T08:24:33.393Z","dependency_job_id":"e5169d23-fba0-431f-88e8-a978ea97039f","html_url":"https://github.com/workfloworchestrator/gnmic-cluster-chart","commit_stats":null,"previous_names":["workfloworchestrator/gnmic-cluster-chart"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/workfloworchestrator%2Fgnmic-cluster-chart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/workfloworchestrator%2Fgnmic-cluster-chart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/workfloworchestrator%2Fgnmic-cluster-chart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/workfloworchestrator%2Fgnmic-cluster-chart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/workfloworchestrator","download_url":"https://codeload.github.com/workfloworchestrator/gnmic-cluster-chart/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243466988,"owners_count":20295310,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-19T12:19:16.304Z","updated_at":"2025-12-26T17:53:49.228Z","avatar_url":"https://github.com/workfloworchestrator.png","language":"Smarty","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gNMIc Cluster\nThis project enables users to run an autoscaling [gNMIc](https://gnmic.openconfig.net/) cluster on kubernetes. [gNMIc](https://gnmic.openconfig.net/) is an openconfig project\nthat allows users to stream telemetry from gNMI enabled routers.\n\nThis project was co-funded by [GEANT](https://geant.org) in the GN5-1 WP6 Incubator.\n## Telemetry pipeline architecture\n\n![Telemetry Architecture](Architecture.drawio.png)\n\n\n## Prerequisites\n\n- Kubernetes cluster\n- A strimzi operator and kafka cluster deployment within your k8s cluster [Strimzi](https://strimzi.io/downloads/)\n- Minimum CPU and RAM for 300 Routers and subscription to all metrics for processing +/- 2 billion events per day\n\n\n    | CPU | Memory| Storage (90 days retention) |\n    |---|---| --- |\n    | 20 | 160Gi  | 3Ti |\n\n\n\n## Installation\n\n```bash\nhelm repo add gnmic-cluster-chart https://workfloworchestrator.org/gnmic-cluster-chart/\nhelm repo update\nhelm upgrade --install gnmic-cluster gnmic-cluster-chart/gnmic-cluster\n```\n\n\n# Helm Chart Documentation\n# gnmic-cluster\n\n![Version: 0.1.17](https://img.shields.io/badge/Version-0.1.17-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.38.3](https://img.shields.io/badge/AppVersion-v0.38.3-informational?style=flat-square)\n\nThis chart deploys a gNMIc cluster. This application enables users to stream telemetry from gNMI capable routers.\n\n**Homepage:** \u003chttps://workfloworchestrator/gnmic-cluster-chart\u003e\n\n## Maintainers\n\n| Name | Email | Url |\n| ---- | ------ | --- |\n| Workflow Orchestrator Programme | \u003cworkfloworchestrator.board@commonsconservancy.org\u003e | \u003chttps://workfloworchestrator.org\u003e |\n\n## Source Code\n\n* \u003chttps://github.com/workfloworchestrator/gnmic-cluster-chart/tree/main/charts/gnmic\u003e\n\n## Requirements\n\n| Repository | Name | Version |\n|------------|------|---------|\n| https://emberstack.github.io/helm-charts | reflector | 7.1.288 |\n| oci://registry-1.docker.io/bitnamicharts | redis | 20.1.5 |\n\n## Values\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| affinity | object | `{}` | Affinity for the k8s scheduler, this is a mapping per collector and relay |\n| autoscaling | object | `{\"enabled\":true,\"locker\":\"consul\",\"maxReplicas\":30,\"minReplicas\":4,\"targetCPUUtilizationPercentage\":80}` | Autscaling configuration, enabled by default to maximise the efficiency of collection. |\n| autoscaling.enabled | bool | `true` | Autoscaling enabled |\n| autoscaling.locker | string | `\"consul\"` | 'consul' or 'k8s' |\n| autoscaling.maxReplicas | int | `30` | Autoscaling upper bound |\n| autoscaling.minReplicas | int | `4` | Autoscaling lower bound |\n| autoscaling.targetCPUUtilizationPercentage | int | `80` | targetCPUUtilizationPercentage or targetMemoryUtilizationPercentage |\n| config | object | `{\"collector\":{},\"global\":{\"api-server\":{\"address\":\":7890\",\"debug\":false,\"enable-metrics\":true},\"debug\":false,\"encoding\":\"proto\",\"format\":\"event\",\"gzip\":false,\"password\":\"${GNMIC_PASSWORD}\",\"skip-verify\":true,\"username\":\"${GNMIC_USERNAME}\"},\"relay\":{}}` | gNMIc configuration |\n| config.collector | object | `{}` | Collector configuration, must be provided in yaml by following the instructions here: https://gnmic.openconfig.net/user_guide/subscriptions/ |\n| config.global | object | `{\"api-server\":{\"address\":\":7890\",\"debug\":false,\"enable-metrics\":true},\"debug\":false,\"encoding\":\"proto\",\"format\":\"event\",\"gzip\":false,\"password\":\"${GNMIC_PASSWORD}\",\"skip-verify\":true,\"username\":\"${GNMIC_USERNAME}\"}` | Global gNMIc Configuration extra keys can be added or removed according to: https://gnmic.openconfig.net/user_guide/configuration_file/#global-flags |\n| config.global.password | string | `\"${GNMIC_PASSWORD}\"` | An example of using environment value variables |\n| config.global.username | string | `\"${GNMIC_USERNAME}\"` | An example of using environment value variables |\n| config.relay | object | `{}` | Relay configuration, must be provided in yaml by following the instructions here: https://gnmic.openconfig.net/user_guide/outputs/ |\n| cronjob.annotations | object | `{}` | Extra annotations for the Cronjob |\n| cronjob.schedule | string | `\"* * * * *\"` | Cronjob schedule |\n| fullnameOverride | string | `\"\"` | Fullname override |\n| image.pullPolicy | string | `\"Always\"` | Image pull policy. |\n| image.repository | string | `\"ghcr.io/openconfig/gnmic\"` | Image repository. |\n| image.tag | string | `\"latest\"` | Overrides the image tag whose default is the chart appVersion. |\n| imagePullSecrets | list | `[]` | Required for private image repository |\n| ingress.annotations | object | `{}` | Ingress annotations |\n| ingress.className | string | `\"\"` | The ingress class name |\n| ingress.enabled | bool | `false` | The ingress for the Api |\n| ingress.hosts | list | `[]` | The ingress host rules |\n| ingress.tls | list | `[]` | TLS rules |\n| kafka | object | `{\"bootstrap_server\":\"\",\"cluster\":\"\",\"enabled\":true,\"group\":\"gnmic-collector\",\"kafka_namespace\":\"\",\"topic\":{\"config\":{},\"name\":\"gnmic-telemetry\",\"partitions\":15,\"patternType\":\"literal\",\"replicas\":3},\"user\":{\"mechanism\":\"scram-sha-512\",\"name\":\"gnmic\"}}` | Requires a Strimzi Operator inside the cluster and an active Kafka deployment https://strimzi.io/documentation/ |\n| kafka.bootstrap_server | string | `\"\"` | Kafka Bootstrap address: fqdn + port. eg: kafka-bootstrap.production.svc.cluster.local:9094 |\n| kafka.cluster | string | `\"\"` | The name of the cluster inside the |\n| kafka.enabled | bool | `true` | Enabling this will create the strimzi artefacts to create the kafka objects in K8s. This will also configure the secret reflector so the kafka user secret can be |\n| kafka.group | string | `\"gnmic-collector\"` | The kafka user group |\n| kafka.kafka_namespace | string | `\"\"` | The namespace where the kafka manifests need to be installed so the operator can create the user topics and rolebindings |\n| kafka.topic | object | `{\"config\":{},\"name\":\"gnmic-telemetry\",\"partitions\":15,\"patternType\":\"literal\",\"replicas\":3}` | Kafka topic configuration |\n| kafka.topic.config | object | `{}` | Kafka Topic configuration |\n| kafka.topic.name | string | `\"gnmic-telemetry\"` | Topic name |\n| kafka.topic.partitions | int | `15` | Minumum number of partitions (cruise control may scale to more) |\n| kafka.topic.patternType | string | `\"literal\"` | Literal or Prefix |\n| kafka.topic.replicas | int | `3` | Minimum number of replicas ( num(replicas) =\u003c num(kafka_nodes) |\n| kafka.user | object | `{\"mechanism\":\"scram-sha-512\",\"name\":\"gnmic\"}` | The kafka user configuration |\n| nameOverride | string | `\"\"` | Name override |\n| podAnnotations | object | `{}` | Any extra pod annotations |\n| podLabels | object | `{}` | Any extra pod annotations |\n| podSecurityContext | object | `{}` | The Custom security context written in Yaml |\n| redis | object | `{\"enabled\":false}` | Optional deployment of redis inside the namespace. This |\n| redis.enabled | bool | `false` | Enable or disable usage of the Bitnami redis |\n| reflector | object | `{\"enabled\":false}` | Optional deployment of the secret reflector. This is necesarry when running the |\n| replicaCount | int | `3` | Number of replicas for the Collector and Relay statefulset. This will be overridden when autoscaling is activated |\n| resources.collector | object | `{}` | Resources for the collector, mandatory for functional autoscaling |\n| resources.consul | object | `{}` | Resources for the consul deployment |\n| resources.relay | object | `{}` | Resources for the relay, mandatory for functional autoscaling |\n| secrets | object | `{\"name\":\"gnmic-secret\",\"opaque\":{\"enabled\":false,\"items\":{}},\"secret_provider\":{\"config\":{\"keyvault\":\"\",\"nodePublishSecretRefName\":\"\",\"provider\":\"\",\"tenantId\":\"\"},\"enabled\":false,\"objects\":[]}}` | Secret configuration |\n| secrets.name | string | `\"gnmic-secret\"` | Name of the secret |\n| secrets.opaque | object | `{\"enabled\":false,\"items\":{}}` | Usimg an opaque secret inside kubernets |\n| secrets.opaque.enabled | bool | `false` | Whether it is enabled |\n| secrets.opaque.items | object | `{}` | Secret items |\n| secrets.secret_provider | object | `{\"config\":{\"keyvault\":\"\",\"nodePublishSecretRefName\":\"\",\"provider\":\"\",\"tenantId\":\"\"},\"enabled\":false,\"objects\":[]}` | Using a secret provider allows the user to inject secrets from a vault or cloud provider |\n| secrets.secret_provider.config | object | `{\"keyvault\":\"\",\"nodePublishSecretRefName\":\"\",\"provider\":\"\",\"tenantId\":\"\"}` | K8s secret provider configuration |\n| secrets.secret_provider.config.keyvault | string | `\"\"` | Name of the keyvault |\n| secrets.secret_provider.config.nodePublishSecretRefName | string | `\"\"` | Secret with credentials to access the keyvault |\n| secrets.secret_provider.config.provider | string | `\"\"` | eg: azure |\n| secrets.secret_provider.config.tenantId | string | `\"\"` | Tenant id |\n| secrets.secret_provider.enabled | bool | `false` | Secret provider enabled |\n| secrets.secret_provider.objects | list | `[]` | List of objects to retrieve from the keyvault. These objects will be mapped to enviroment variables inside the containers |\n| server | object | `{\"cache\":{\"type\":\"redis\"},\"enabled\":true,\"port\":57400}` | gNMI server capabilities: https://gnmic.openconfig.net/user_guide/gnmi_server/ |\n| server.cache | object | `{\"type\":\"redis\"}` | Override of the default cache |\n| server.cache.type | string | `\"redis\"` | Supports a cache Structure as defined here: https://gnmic.openconfig.net/user_guide/caching/ Default is redis |\n| server.enabled | bool | `true` | Whether the server is enabled |\n| server.port | int | `57400` | Default port |\n| service.annotations | object | `{}` | The extra service annotations to be compatible with clouds |\n| service.externalTrafficPolicy | string | `\"Cluster\"` | The ExternalTrafficPolicy |\n| service.port | int | `7890` | The port being exposed |\n| service.type | string | `\"ClusterIP\"` | The type of service |\n| serviceAccount.annotations | object | `{}` | Annotations to add to the service account |\n| serviceAccount.automount | bool | `true` | Automatically mount a ServiceAccount's API credentials? |\n| serviceAccount.create | bool | `true` | Specifies whether a service account should be created, must be set to true when using the k8s locker |\n| serviceAccount.name | string | `\"\"` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template |\n| servicemonitor.enabled | bool | `false` | For monitoring by Prometheus |\n| tolerations | object | `{}` | Tolerations for the k8s scheduler, this is a mapping per collector and relay |\n\n----------------------------------------------\nAutogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)\n\n\n\n# Updating documentation\nThe Helm chart and readme are documented separately.\n\n### Helm\nThe Helm chart is documented use `helm-docs` [Link](https://github.com/norwoodj/helm-docs)\nRun it as follows:\n\n```bash\nhelm-docs .\n```\n\n### Readme generation\nThe README generation is done by editing the `README.md.tpl` file. and running the command\n\n```bash\nmd_incl README.md.tpl README.md\n```\n\nThis assumes you have `md_incl` installed. [link](https://pypi.org/project/md-incl/)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fworkfloworchestrator%2Fgnmic-cluster-chart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fworkfloworchestrator%2Fgnmic-cluster-chart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fworkfloworchestrator%2Fgnmic-cluster-chart/lists"}