Passer au contenu principal
Version 2.x du chart uniquementLa fonctionnalité additionalManifests est disponible uniquement dans le chart Helm v2.x basé sur des sous-charts.
La valeur additionalManifests vous permet de déployer des objets Kubernetes arbitraires avec le chart ClickStack. Utilisez-la pour les ressources que le chart ne prend pas en charge nativement, comme NetworkPolicy, HorizontalPodAutoscaler, ServiceAccount, PodMonitor, des objets Ingress personnalisés ou tout autre objet de l’API Kubernetes.

Fonctionnement

Chaque entrée dans additionalManifests est une définition complète de ressource Kubernetes. Le chart :
  1. Parcourt chaque entrée de la liste
  2. Convertit l’entrée en YAML (toYaml)
  3. Évalue les expressions de template dans ce YAML à l’aide de tpl dans Helm
Les expressions de template peuvent faire référence à :
  • .Release.Name, .Release.Namespace
  • include "clickstack.fullname" . et les autres helpers du chart
  • .Values.*
additionalManifests:
  - apiVersion: v1
    kind: ConfigMap
    metadata:
      name: '{{ include "clickstack.fullname" . }}-custom'
    data:
      release: '{{ .Release.Name }}'

Contraintes des fichiers values

additionalManifests se configure dans un fichier values, et les fichiers values sont analysés comme du YAML avant l’exécution de tpl.
  • Toute occurrence de {{ ... }} dans un fichier values doit se trouver dans une chaîne entre guillemets
  • Les blocs de template structurels ne sont pas valides dans un YAML de fichier values (par exemple, {{- include ... | nindent ... }} seul)
  • Pour les champs non textuels (par exemple, les ports numériques), utilisez des valeurs littérales ou des ports nommés
  • Si vous avez besoin de templating structurel, utilisez le template d’un wrapper chart plutôt qu’un fichier values brut
# Valid in values.yaml
name: '{{ include "clickstack.fullname" . }}-app'

# Invalid in values.yaml (unquoted template expression)
name: {{ include "clickstack.fullname" . }}-app

# Invalid in values.yaml (structural template block)
labels:
  {{- include "clickstack.labels" . | nindent 2 }}

Helpers de chart disponibles

Ces helpers sont définis dans templates/_helpers.tpl :
HelperDescriptionUtilisation dans le fichier values
clickstack.nameNom du chart (tronqué à 63 caractères)Sans risque dans les scalaires entre guillemets
clickstack.fullnameNom qualifié par la releaseSans risque dans les scalaires entre guillemets
clickstack.chartNom du chart + versionSans risque dans les scalaires entre guillemets
clickstack.selectorLabelsBloc de labels du selectorUniquement dans les templates de wrapper chart
clickstack.labelsBloc de labels standardUniquement dans les templates de wrapper chart
clickstack.mongodb.fullnameNom de la CR MongoDBSans risque dans les scalaires entre guillemets
clickstack.clickhouse.fullnameNom de la CR ClickHouseSans risque dans les scalaires entre guillemets
clickstack.otel.fullnameNom du collector OTelSans risque dans les scalaires entre guillemets

Exemples

ServiceAccount

additionalManifests:
  - apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: '{{ include "clickstack.fullname" . }}'
      namespace: '{{ .Release.Namespace }}'
      labels:
        app.kubernetes.io/name: '{{ include "clickstack.name" . }}'
        app.kubernetes.io/instance: '{{ .Release.Name }}'
      annotations:
        eks.amazonaws.com/role-arn: "arn:aws:iam::123456789:role/my-role"

NetworkPolicy

Limitez le trafic entrant à destination des pods HyperDX :
additionalManifests:
  - apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: '{{ include "clickstack.fullname" . }}-allow-ingress'
    spec:
      podSelector:
        matchLabels:
          app.kubernetes.io/name: '{{ include "clickstack.name" . }}'
          app.kubernetes.io/instance: '{{ .Release.Name }}'
      policyTypes:
        - Ingress
      ingress:
        - from:
            - namespaceSelector:
                matchLabels:
                  kubernetes.io/metadata.name: ingress-nginx
          ports:
            - protocol: TCP
              port: 3000
            - protocol: TCP
              port: 8000

HorizontalPodAutoscaler

additionalManifests:
  - apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: '{{ include "clickstack.fullname" . }}-hpa'
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: '{{ include "clickstack.fullname" . }}-app'
      minReplicas: 2
      maxReplicas: 10
      metrics:
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: 75

PodMonitor (Prometheus Operator)

additionalManifests:
  - apiVersion: monitoring.coreos.com/v1
    kind: PodMonitor
    metadata:
      name: '{{ include "clickstack.fullname" . }}'
      labels:
        release: prometheus
    spec:
      selector:
        matchLabels:
          app.kubernetes.io/name: '{{ include "clickstack.name" . }}'
          app.kubernetes.io/instance: '{{ .Release.Name }}'
      podMetricsEndpoints:
        - port: app
          interval: 30s

Ingress ALB sur AWS

Si vous utilisez l’AWS Load Balancer Controller, désactivez l’Ingress nginx intégré au chart et définissez un Ingress ALB personnalisé :
hyperdx:
  ingress:
    enabled: false

additionalManifests:
  - apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: '{{ include "clickstack.fullname" . }}-alb'
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/target-type: ip
        alb.ingress.kubernetes.io/certificate-arn: "arn:aws:acm:us-east-1:123456789:certificate/abc-123"
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
        alb.ingress.kubernetes.io/ssl-redirect: "443"
        alb.ingress.kubernetes.io/group.name: clickstack
        alb.ingress.kubernetes.io/healthcheck-path: /api/health
    spec:
      ingressClassName: alb
      rules:
        - host: clickstack.example.com
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: '{{ include "clickstack.fullname" . }}-app'
                    port:
                      name: app
Pour un exemple complet de configuration ALB, y compris l’Ingress interne du collecteur OTel et le HPA, consultez les valeurs d’exemple ALB.

TargetGroupBinding

Pour les scénarios ALB nécessitant des ressources TargetGroupBinding explicites :
additionalManifests:
  - apiVersion: elbv2.k8s.aws/v1beta1
    kind: TargetGroupBinding
    metadata:
      name: '{{ include "clickstack.fullname" . }}-tgb'
    spec:
      serviceRef:
        name: '{{ include "clickstack.fullname" . }}-app'
        port: app
      targetGroupARN: "arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-tg/abc123"
      targetType: ip

Avancé : templates de wrapper chart

Si vous avez besoin d’helpers structurels comme include "clickstack.labels" . | nindent 4, générez-les à partir d’un template de wrapper chart (templates/*.yaml) au lieu de placer directement ces blocs dans les fichiers values. Exemple d’extrait de template de wrapper chart :
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "clickstack.fullname" . }}-extra
  labels:
    {{- include "clickstack.labels" . | nindent 4 }}
data:
  appPort: "{{ .Values.hyperdx.ports.app }}"

Astuces

Hooks de Helm

Chaque entrée additionalManifests est générée sous forme de document YAML distinct. Vous pouvez ajouter des annotations de hook Helm pour contrôler l’ordre d’installation et de mise à niveau :
additionalManifests:
  - apiVersion: batch/v1
    kind: Job
    metadata:
      name: post-install-job
      annotations:
        helm.sh/hook: post-install
        helm.sh/hook-delete-policy: hook-succeeded
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: migrate
              image: my-migration-image:latest
              command: ["./migrate.sh"]

Ordre des CRD

Si vos manifests supplémentaires incluent des ressources personnalisées (par exemple, PodMonitor), les CRD doivent déjà exister dans le cluster avant l’installation ou la mise à niveau.

Combiner plusieurs ressources

additionalManifests est une liste. Les éléments sont rendus dans l’ordre de la liste, et chaque élément devient un document YAML distinct.

Étapes suivantes

Dernière modification le 25 juin 2026