k3s v1.32.2+k3s1でtraefikのtracingを有効にする

k3s
traefik

2025-03-06

#はじめに

k3s v1.32.2+k3s1がリリースされました。
このリリースノートで、traefikがv3系にアップグレードされたので、tracingでOpenTelemetryを使えるようになりました。
実際にアップグレードして、tracingを有効にする手順を紹介します。

#手順

#k3sのアップグレード

手動アップグレードします。

curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=latest <EXISTING_K3S_ENV> sh -s - <EXISTING_K3S_ARGS>
手動アップグレード | K3s
K3sをアップグレードするには、インストールスクリプトを使用するか、希望するバージョンのバイナリを手動でインストールすることができます。
手動アップグレード | K3s favicon docs.k3s.io

私の環境では、traefik,traefik-crdのJobが完了せず、traefikが正常に動作しない現象が発生しました。

kubectl get all -n kube-system
~ 省略 ~
NAME                                          STATUS     COMPLETIONS   DURATION   AGE
job.batch/helm-install-nvidia-device-plugin   Complete   1/1           13s        58m
job.batch/helm-install-traefik                Running    0/1           12m        12m
job.batch/helm-install-traefik-crd            Running    0/1           58m        58m

podにも現れなかったのでなぜRunningからCompleteにならないのか確認できていませんが、とりあえず削除したら、再度インストールできました。

kubectl delete job.batch/helm-install-traefik-crd -n kube-system
# 確認
kubectl get all -n kube-system
~ 省略 ~
NAME                                          STATUS     COMPLETIONS   DURATION   AGE
job.batch/helm-install-nvidia-device-plugin   Complete   1/1           13s        108m
job.batch/helm-install-traefik                Complete   1/1           7s         42m
job.batch/helm-install-traefik-crd            Complete   1/1           9s         44m

#traefikのtracingを有効にする

traefikではv3からtracingがサポートされています。

https://doc.traefik.io/traefik/migration/v2-to-v3-details/#tracing
https://doc.traefik.io/traefik/migration/v2-to-v3-details/#tracing favicon doc.traefik.io

OTLP Endpointを指定することができるようです。すでにOpenTelemetry Collectorを使っている場合は、そのエンドポイントを指定することで、tracingを有効にすることができます。

  • traefik-config.yamlを作成します。
# https://docs.k3s.io/helm#customizing-packaged-components-with-helmchartconfig
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  # https://github.com/traefik/traefik-helm-chart/blob/master/traefik/values.yaml
  valuesContent: |-
    logs:
      access:
        # アクセスログを有効にする
        enabled: true
        format: json
        fields:
          defaultmode: keep
          headers:
            defaultmode: keep
            names:
              Authorization: redact
    metrics:
      prometheus:
        service:
          enabled: true
        serviceMonitor:
          enabled: true
          additionalLabels:
            release: "kube-prometheus-stack"
    tracing:
      otlp:
        enabled: true
        http:
          enabled: true
          endpoint: "http://opentelemetry-collector.monitoring.svc.cluster.local:4318/v1/traces"
          tls:
            insecureSkipVerify: true

ポイントはtracing.otlpの部分です。
そのため、opentelemetry-collectorをすでに動かしていたので、endpointhttp://opentelemetry-collector.monitoring.svc.cluster.local:4318/v1/tracesを指定しました。

k3sに適用します。

kubectl apply -f traefik-config.yaml

opentelemetry-collectorのhelm chartはこちらを使っています。

opentelemetry-helm-charts/charts/opentelemetry-collector at main · open-telemetry/opentelemetry-helm-charts
OpenTelemetry Helm Charts. Contribute to open-telemetry/opentelemetry-helm-charts development by creating an account on GitHub.
opentelemetry-helm-charts/charts/opentelemetry-collector at main · open-telemetry/opentelemetry-helm-charts favicon github.com
opentelemetry-helm-charts/charts/opentelemetry-collector at main · open-telemetry/opentelemetry-helm-charts

#動作確認

opentelemetry-collectorのexporterにはtempoを設定しているので、grafana経由でtempoのデータを確認します。

tempo

画像には含めていませんが、span attributesなどもきちんと情報が入っていることが確認できました。

sampling rateなどの設定があるかわかりませんが、おそらくデフォルトだと100%サンプリングと推測されます。
prometheusの負荷も少し上がったので、場合によってはtracingが不要なサービスは除外したり、サンプリングレートを下げる工夫をするのが良さそうです。

#まとめ

今回は、k3s v1.32.2+k3s1でtraefikのtracingを有効にする手順を紹介しました。
traefikのtracingはv3からサポートされているので、これを機に導入してみるのも良いかもしれません。
個人的には、待ちに待っていた機能だったので、アップグレードできて嬉しいです。