HelmでKubernetesにOBIをデプロイする

KubernetesにHelmチャートとしてOBIをデプロイする方法を学ぶ

目次

Helm から OBI をデプロイする

まず、OpenTelemetry Helm リポジトリを Helm に追加する必要があります。

helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts

次のコマンドは、obi 名前空間にデフォルト設定の OBI DaemonSet をデプロイします。

helm install obi -n obi --create-namespace open-telemetry/opentelemetry-ebpf-instrumentation

OBI のデフォルト設定は次のようになっています。

  • Pod HTTP ポート 9090/metrics パスで Prometheus メトリクスとしてメトリクスをエクスポートします。
  • クラスター内のすべてのアプリケーションを計装しようとします。
  • デフォルトではアプリケーションレベルのメトリクスのみを提供し、ネットワークレベルのメトリクスは除外します。
  • k8s.namespace.namek8s.pod.name などの Kubernetes メタデータラベルでメトリクスを装飾するよう OBI を設定します。

OBI の設定

OBI のデフォルト設定をオーバーライドしたい場合があります。 たとえば、Prometheus のかわりに OpenTelemetry としてメトリクスやスパンをエクスポートしたり、計装するサービス数を制限したりする場合です。

デフォルトの OBI 設定オプション を独自の値でオーバーライドできます。

たとえば、カスタム設定を含む helm-obi.yml ファイルを作成します。

config:
  data:
    # 実際の OBI 設定ファイルの内容
    discovery:
      instrument:
        - k8s_namespace: demo
        - k8s_namespace: blog
    routes:
      unmatched: heuristic

config.data セクションには OBI 設定ファイルが含まれており、OBI 設定オプションのドキュメントに記載されています。

次に、-f フラグを使用してオーバーライドされた設定を helm コマンドに渡します。 たとえば、このようなコマンドを実行します。

helm install obi open-telemetry/opentelemetry-ebpf-instrumentation -f helm-obi.yml

または、OBI チャートが以前にデプロイされていた場合は次のようにします。

helm upgrade obi open-telemetry/opentelemetry-ebpf-instrumentation -f helm-obi.yml

OBI メタデータの設定

OBI が Prometheus エクスポーターを使用してデータをエクスポートしている場合、Prometheus スクレイパーが OBI を検出できるように OBI Pod アノテーションをオーバーライドする必要がある場合があります。 次のセクションをサンプルの helm-obi.yml ファイルに追加できます。

podAnnotations:
  prometheus.io/scrape: 'true'
  prometheus.io/path: '/metrics'
  prometheus.io/port: '9090'

同様に、Helm チャートでは、サービスアカウント、クラスターロール、セキュリティコンテキストなど、OBI のデプロイに関わる複数のリソースの名前、ラベル、アノテーションをオーバーライドできます。 OBI Helm チャートドキュメントには、各種設定オプションが記載されています。

Helm 設定へのシークレットの提供

OpenTelemetry エンドポイント経由でメトリクスとトレースをオブザーバビリティバックエンドに直接送信する場合、OTEL_EXPORTER_OTLP_HEADERS 環境変数を通じてクレデンシャルを提供する必要がある場合があります。

推奨される方法は、このような値を Kubernetes Secret に保存し、Helm 設定からそれを参照する環境変数を指定することです。

たとえば、次の Secret をデプロイします。

apiVersion: v1
kind: Secret
metadata:
  name: obi-secret
type: Opaque
stringData:
  otlp-headers: 'Authorization=Basic ....'

次に、envValueFrom セクションを使用して、helm-config.yml ファイルからそれを参照します。

env:
  OTEL_EXPORTER_OTLP_ENDPOINT: '<...your OTLP endpoint URL...>'
envValueFrom:
  OTEL_EXPORTER_OTLP_HEADERS:
    secretKeyRef:
      key: otlp-headers
      name: obi-secret