メインコンテンツへスキップ
メインコンテンツへスキップ

Helm 追加マニフェスト

Chart version 2.x のみ

additionalManifests 機能は、サブチャートベースの v2.x Helm チャートでのみ使用できます。

additionalManifests を使うと、ClickStack チャートとあわせて任意の Kubernetes オブジェクトをデプロイできます。これは、NetworkPolicyHorizontalPodAutoscalerServiceAccountPodMonitor、カスタム Ingress オブジェクトなど、チャートが標準ではテンプレート化していないリソースや、そのほかの Kubernetes API オブジェクトに使用します。

仕組み

additionalManifests の各エントリは、完全な Kubernetes リソース定義です。このチャートでは、次の処理を行います。

  1. リスト内の各エントリを順に処理します
  2. エントリを YAML に変換します (toYaml)
  3. Helm の tpl を使用して、その YAML 内のテンプレート式を評価します

テンプレート式では、次を参照できます。

  • .Release.Name, .Release.Namespace
  • include "clickstack.fullname" . とその他のチャートヘルパー
  • .Values.*
additionalManifests:
  - apiVersion: v1
    kind: ConfigMap
    metadata:
      name: '{{ include "clickstack.fullname" . }}-custom'
    data:
      release: '{{ .Release.Name }}'

Values ファイルの制約

additionalManifests は values ファイルで設定します。values ファイルは、tpl の実行前に YAML として解析されます。

  • values ファイル内の {{ ... }} は、必ず引用符で囲まれた文字列内に記述する必要があります
  • 構造的なテンプレートブロックは、有効な values YAML ではありません (例: {{- include ... | nindent ... }} 単体)
  • 非文字列フィールド (例: 数値のポート) には、リテラル値または名前付きポートを使用します
  • 構造的なテンプレート処理が必要な場合は、生の values ファイルではなく、ラッパーチャートのテンプレートを使用します
# 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 }}

利用可能な チャート ヘルパー

これらのヘルパーは templates/_helpers.tpl で定義されています。

Helper説明Values ファイルでの使用
clickstack.nameチャート 名 (63 文字に切り詰め)クォート付きスカラーで安全に使用可能
clickstack.fullnameリリース修飾付きの名前クォート付きスカラーで安全に使用可能
clickstack.chartチャート 名 + バージョンクォート付きスカラーで安全に使用可能
clickstack.selectorLabelsセレクターラベルのブロックラッパーチャート のテンプレートでのみ使用
clickstack.labels標準ラベルのブロックラッパーチャート のテンプレートでのみ使用
clickstack.mongodb.fullnameMongoDB CR 名クォート付きスカラーで安全に使用可能
clickstack.clickhouse.fullnameClickHouse CR 名クォート付きスカラーで安全に使用可能
clickstack.otel.fullnameOTel collector 名クォート付きスカラーで安全に使用可能

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

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

AWS ALB イングレス

AWS Load Balancer Controllerを使用する場合は、チャートに組み込まれた nginx イングレスを無効にし、独自の ALB イングレスを定義します:

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

内部 OTel collector 用イングレスと HPA を含む完全な ALB 設定例については、ALB example valuesを参照してください。

TargetGroupBinding

TargetGroupBinding リソースを明示的に必要とする ALB の構成では、

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

応用: ラッパーチャートのテンプレート

include "clickstack.labels" . | nindent 4 のような構造に関するヘルパーが必要な場合は、それらのブロックを values ファイルに直接記述するのではなく、ラッパーチャートのテンプレート (templates/*.yaml) でレンダリングしてください。

ラッパーチャートテンプレートのスニペット例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "clickstack.fullname" . }}-extra
  labels:
    {{- include "clickstack.labels" . | nindent 4 }}
data:
  appPort: "{{ .Values.hyperdx.ports.app }}"

ヒント

Helm フック

additionalManifests エントリは、それぞれ独立した YAML ドキュメントとしてレンダリングされます。インストール/アップグレード時の適用順序を制御するには、Helm フックのアノテーションを追加します。

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"]

CRD の順序

追加マニフェストにカスタムリソース (たとえば PodMonitor) が含まれている場合、インストールまたはアップグレードを実行する前に、それらの CRD があらかじめクラスタ内に存在している必要があります。

複数のリソースを組み合わせる

additionalManifests はリストです。各エントリはリストの順序でレンダリングされ、それぞれが独立した YAML ドキュメントになります。

次のステップ