K8S 部署OpenTelemetry(用于 Kubernetes ≤ v1.22 )
作者:myluzh 分类: Kubernetes 长度:4258 阅读:246
0X01 前言
这边有个测试集群,Kubernetes 版本是 v1.21,经过测试需要安装兼容 v1alpha2
的 cert-manager
,然后 OpenTelemetry Operator 最高版本是 0.34.0
。
0x02 安装 OpenTelemetry Operator
安装 cert-manager(兼容 v1alpha2)
wget -O cert-manager-v0.16.1.yaml https://github.com/cert-manager/cert-manager/releases/download/v0.16.1/cert-manager.yaml
kubectl apply -f cert-manager-v0.16.1.yaml
kubectl get pod -n cert-manager
安装 OpenTelemetry Operator
wget -O opentelemetry-operator-v0.34.0.yaml https://github.com/open-telemetry/opentelemetry-operator/releases/download/v0.34.0/opentelemetry-operator.yaml
kubectl apply -f opentelemetry-operator-v0.34.0.yaml
kubectl get pod -n opentelemetry-operator-system
0x03 部署 Collector
1. 部署 Deployment 模式的 Collector
# center-collector.yaml
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
name: center
spec:
mode: deployment
# image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/otel/opentelemetry-collector:0.34.0
config: |
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
exporters:
logging:
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [logging]
部署中心 Collector 到 opentelemetry
命名空间:
kubectl apply -f center-collector.yaml -n opentelemetry
2. 部署 Sidecar 模式的 Collector
# sidecar-collector.yaml
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
name: sidecar
spec:
mode: sidecar
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/otel/opentelemetry-collector:0.34.0
config: |
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
exporters:
logging: {}
otlp:
endpoint: center-collector.opentelemetry.svc.cluster.local:4317
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [logging, otlp]
Sidecar Collector 应部署在与你的应用相同的命名空间中,以便自动注入:
kubectl apply -f sidecar-collector.yaml -n dev-test
3. 查看部署状态
Sidecar 代理依赖于应用程序启动,因此现在创建后并不会立即启动。需要我们创建一个应用程序并使用这个 sidecar 模式的 collector。
kubectl get opentelemetrycollectors -n opentelemetry
输出示例:
NAME MODE VERSION AGE
center deployment 0.34.0 27m
sidecar sidecar 0.34.0 14m
kubectl get all -n opentelemetry
输出示例:
NAME READY STATUS RESTARTS AGE
pod/center-collector-678854c96f-nd5z7 1/1 Running 0 19m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/center-collector ClusterIP 10.43.52.157 <none> 4317/TCP,4318/TCP 26m
service/center-collector-headless ClusterIP None <none> 4317/TCP,4318/TCP 26m
service/center-collector-monitoring ClusterIP 10.43.173.126 <none> 8888/TCP 26m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/center-collector 1/1 1 1 26m
0x04 应用埋点
在某些版本的 OpenTelemetry Operator 中(比如 v0.34.0),你可以 不依赖 Instrumentation CRD,直接通过设置注解:
sidecar.opentelemetry.io/inject: "true"
来实现 Sidecar Collector 自动注入。
你可以在你的 Pod 或 Deployment YAML 中添加该注解,例如:
metadata:
annotations:
sidecar.opentelemetry.io/inject: "true"
这样在 Pod 创建时会自动注入对应的 Sidecar Collector 容器。
k8s kubernetes OpenTelemetry 观测