k3s v1.32.2+k3s1でtraefikのtracingを有効にする
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>
私の環境では、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がサポートされています。
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をすでに動かしていたので、endpoint
にhttp://opentelemetry-collector.monitoring.svc.cluster.local:4318/v1/traces
を指定しました。
k3sに適用します。
kubectl apply -f traefik-config.yaml
opentelemetry-collectorのhelm chartはこちらを使っています。
#動作確認
opentelemetry-collectorのexporterにはtempoを設定しているので、grafana経由でtempoのデータを確認します。
画像には含めていませんが、span attributes
などもきちんと情報が入っていることが確認できました。
sampling rateなどの設定があるかわかりませんが、おそらくデフォルトだと100%サンプリングと推測されます。
prometheusの負荷も少し上がったので、場合によってはtracingが不要なサービスは除外したり、サンプリングレートを下げる工夫をするのが良さそうです。
#まとめ
今回は、k3s v1.32.2+k3s1でtraefikのtracingを有効にする手順を紹介しました。
traefikのtracingはv3からサポートされているので、これを機に導入してみるのも良いかもしれません。
個人的には、待ちに待っていた機能だったので、アップグレードできて嬉しいです。
