Kubernetes 部署
我们提供了一个 OpenTelemetry Demo Helm chart 来帮助将演示部署到现有的 Kubernetes 集群。
使用此 chart 必须安装 Helm。请参考 Helm 的 文档开始。
先决条件
- Kubernetes 1.24+
- 6 GB 可用内存用于应用程序
- Helm 3.14+ (仅适用于 Helm 安装方法)
使用 Helm 安装 (推荐)
添加 OpenTelemetry Helm 仓库
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
要使用 my-otel-demo 作为 release 名称安装 chart,请运行以下命令
helm install my-otel-demo open-telemetry/opentelemetry-demo
OpenTelemetry Demo Helm chart 不支持从一个版本升级到另一个版本。如果需要升级 chart,必须先删除现有的 release,然后安装新版本。
执行以下所有用法方法都需要 OpenTelemetry Demo Helm chart 版本 0.11.0 或更高版本。
使用 kubectl 安装
以下命令会将演示应用程序安装到你的 Kubernetes 集群。
kubectl create --namespace otel-demo -f https://raw.githubusercontent.com/open-telemetry/opentelemetry-demo/main/kubernetes/opentelemetry-demo.yaml
OpenTelemetry Demo Kubernetes manifest 不支持从一个版本升级到另一个版本。如果需要升级演示,必须先删除现有资源,然后安装新版本。
这些 manifest 是从 Helm chart 生成的,仅为方便提供。建议使用 Helm chart 进行安装。
使用演示
为了使用演示应用程序,需要将其服务暴露到 Kubernetes 集群外部。你可以使用 kubectl port-forward 命令将服务暴露到本地系统,或者通过配置服务类型(例如:LoadBalancer)并可选部署 Ingress 资源来暴露。
使用 kubectl port-forward 暴露服务
要暴露 frontend-proxy 服务,请使用以下命令(将 default 替换为你的 Helm chart release 命名空间)
kubectl --namespace default port-forward svc/frontend-proxy 8080:8080
kubectl port-forward 会代理端口直到进程终止。你可能需要为每次使用 kubectl port-forward 创建单独的终端会话,并在完成后使用 Ctrl-C 终止进程。
设置了 frontend-proxy 端口转发后,你可以访问
- Web store: https://:8080/
- Grafana: https://:8080/grafana/
- Load Generator UI: https://:8080/loadgen/
- Jaeger UI: https://:8080/jaeger/ui/
- Flagd configurator UI: https://:8080/feature
使用服务或 Ingress 配置暴露演示组件
我们建议在安装 Helm chart 时使用 values 文件,以便指定额外的配置选项。
配置 Ingress 资源
Kubernetes 集群可能没有正确的底层组件来启用 LoadBalancer 服务类型或 Ingress 资源。在使用这些配置选项之前,请验证你的集群是否具有正确的支持。
每个演示组件(例如:frontend-proxy)都提供了一种配置其 Kubernetes 服务类型的方式。默认情况下,这些不会被创建,但你可以通过每个组件的 ingress 属性来启用和配置它们。
要将 frontend-proxy 组件配置为使用 Ingress 资源,你可以在 values 文件中指定以下内容
components:
frontend-proxy:
ingress:
enabled: true
annotations: {}
hosts:
- host: otel-demo.my-domain.com
paths:
- path: /
pathType: Prefix
port: 8080
某些 Ingress 控制器需要特殊的注解或服务类型。有关更多信息,请参阅你的 Ingress 控制器文档。
配置服务类型
每个演示组件(例如:frontend-proxy)都提供了一种配置其 Kubernetes 服务类型的方式。默认情况下,它们将是 ClusterIP,但你可以使用每个组件的 service.type 属性来更改它们。
要将 frontend-proxy 组件配置为使用 LoadBalancer 服务类型,你可以在 values 文件中指定以下内容
components:
frontend-proxy:
service:
type: LoadBalancer
配置浏览器遥测
为了正确收集来自浏览器的 span,你还需要指定 OpenTelemetry Collector 的暴露位置。frontend-proxy 定义了一个 collector 路由,其路径前缀为 /otlp-http。你可以通过在 frontend 组件上设置以下环境变量来配置 collector 端点
components:
frontend:
envOverrides:
- name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
value: http://otel-demo.my-domain.com/otlp-http/v1/traces
自带后端
你很可能想将 web store 作为演示应用程序,用于你已有的可观察性后端(例如:现有的 Jaeger、Zipkin 实例,或你选择的 供应商之一)。
OpenTelemetry Collector 的配置在 Helm chart 中公开。你进行的任何添加都将合并到默认配置中。你可以使用它来添加自己的 exporter,并将它们添加到所需的 pipeline 中。
opentelemetry-collector:
config:
exporters:
otlphttp/example:
endpoint: <your-endpoint-url>
service:
pipelines:
traces:
exporters: [spanmetrics, otlphttp/example]
当使用 Helm 合并 YAML values 时,对象会被合并,数组会被替换。如果覆盖了 traces pipeline,则 spanmetrics exporter 必须包含在 exporter 数组中。不包含此 exporter 将导致错误。
供应商后端可能要求你添加额外的认证参数,请检查他们的文档。某些后端需要不同的 exporter,你可以在 opentelemetry-collector-contrib/exporter 中找到它们及其文档。
要使用自定义 my-values-file.yaml values 文件安装 Helm chart,请使用
helm install my-otel-demo open-telemetry/opentelemetry-demo --values my-values-file.yaml