← 文章 / 云原生与基础设施
signoz 3天前 · 2026-11-06 14:08:26 · 7 阅读

K8s 无服务器(EKS Fargate)- OpenTelemetry 操作员

本指南通过 OpenTelemetry Operator 运行 EKS Fargate 采集代理(Collection Agent)。Foundry 会为每个 Collector 生成一个 OpenTelemetryCollector 资源,Operator 则根据该资源创建部署工作负载和 Service。对于 Sidecar 模式,Operator 的 Webhook 会向带有 sidecar.opentelemetry.io/inject 注解的 Pod 模板中注入 Collector。

前提条件

  • 一个 EKS 集群,其中包含一个 Fargate 配置,用于选择 Collector 所在命名空间及应用所在命名空间。
  • kubectl 已配置为可访问该集群,且同一台机器上已安装 AWS CLI 和 Helm 3,以便管理 Fargate 配置和 cert-manager。
  • 一个用于发送数据的 SigNoz 实例:SigNoz Cloud 或自托管的 SigNoz。

安装采集代理

什么是 Foundry?

Foundry 是一款开源 CLI 工具,用于以代码形式运行自托管的可观测性技术栈。只需一份声明式配置文件,即可在裸机、容器或 Kubernetes 上完成基础设施配置、安装 SigNoz 后端并设置 OpenTelemetry 数据采集。了解Foundry的更多详情。

步骤 1:安装 OpenTelemetry Operator

安装 OpenTelemetry Operator,该组件负责协调(reconcile)Foundry 为各 Collector 生成的 OpenTelemetryCollector 资源;同时安装 cert-manager,用于签发 Operator 准入 Webhook 的证书。请在已安装 AWS CLI 和 Helm 3 的机器上执行以下命令:

  1. 添加一个 Fargate 配置,选中 cert-manager 和 opentelemetry-operator-system 命名空间:

    Copy
    aws eks create-fargate-profile --cluster-name <cluster-name> \
      --fargate-profile-name opentelemetry-operator \
      --pod-execution-role-arn <pod-execution-role-arn> \
      --selectors namespace=cert-manager namespace=opentelemetry-operator-system

    请确认以下参数值:

    • <cluster-name>:您的 EKS 集群名称。
    • <pod-execution-role-arn>:其他 Fargate 配置所使用的 Pod 执行角色的 ARN。
  2. 安装 cert-manager,需要把它的 webhook 端口改为 10260,因为 Fargate 上 kubelet 占用了默认的 10250 端口,具体可参考 cert-manager 的 AWS Fargate 说明:

    Copy
    helm install cert-manager oci://quay.io/jetstack/charts/cert-manager \
      --version v1.21.2 \
      --namespace cert-manager \
      --create-namespace \
      --set crds.enabled=true \
      --set webhook.securePort=10260
  3. 等待 cert-manager 的 webhook 就绪,以便接受 operator 的证书:

    Copy
    kubectl -n cert-manager rollout status deploy/cert-manager-webhook
  4. 安装 operator v0.139.0(与 Foundry 锁定的 OpenTelemetry Collector 0.139.0 版本一致)及其 CRD:

    Copy
    kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/download/v0.139.0/opentelemetry-operator.yaml
  5. 检查 operator 状态,当 READY 显示 1/1 即表示就绪:

    Copy
    kubectl get deployment opentelemetry-operator-controller-manager -n opentelemetry-operator-system

步骤 2:安装 foundryctl

在你使用 kubectl 的机器上执行:

Copy
curl -fsSL https://signoz.io/foundry.sh | bash

如需手动安装(Windows PowerShell、离线环境等)或配置 PATH,请参考 Foundry 入门指南。

步骤 3:创建 casting.yaml

创建一个 casting.yaml 文件,其中包含《工作原理》中所述 deployment collector 的一个文档,并通过 collector.kind: deployment 来选中它:

每个文档必须包含:控制器注解

foundry.signoz.io/kubernetes-collector-controller: opentelemetry-operator 将该控制器设定为 OpenTelemetry Operator。Foundry 随后会为 Operator 生成一个用于调和的 OpenTelemetryCollector 资源,而非在未添加该注解时生成的普通 Deployment 和 sidecar 容器。参考Foundry 示例中的注解表格。

使用自建 SigNoz?

大多数步骤完全相同。要适配本指南,请更新端点并按云端到自建所示移除 ingestion key。

casting.yaml
apiVersion: v1alpha1
kind: CollectionAgent
metadata:
  name: signoz
  annotations:
    foundry.signoz.io/kubernetes-collector-controller: opentelemetry-operator
spec:
  deployment:
    platform: aws
    mode: kubernetes-serverless
    flavor: kustomize
  collector:
    kind: deployment
    spec:
      env:
        SIGNOZ_INGESTION_ENDPOINT: https://ingest.<region>.signoz.cloud:443
        SIGNOZ_INGESTION_KEY: <your-ingestion-key>
        K8S_CLUSTER_NAME: <CLUSTER_NAME>
        OTEL_RESOURCE_ATTRIBUTES: deployment.environment=<DEPLOYMENT_ENVIRONMENT>
      config:
        data:
          collector/deployment/deployment.yaml: |
            exporters:
              otlphttp/signoz:
                headers:
                  signoz-ingestion-key: ${env:SIGNOZ_INGESTION_KEY}

请核对这些值:

  • <region>:您的 SigNoz Cloud 区域。
  • <your-ingestion-key>:您的 SigNoz Cloud ingestion key。
  • <CLUSTER_NAME>:该集群的名称。在发送至同一 SigNoz 实例的所有集群中必须唯一,它将作为 k8s.cluster.name 属性,并在 SigNoz 的 Kubernetes 视图中用于标识该集群。
  • <DEPLOYMENT_ENVIRONMENT>:你的部署环境,例如 staging 或 production,它会作为 deployment.environment 出现在采集到的遥测数据中。

此 casting 的全部可配置项,请参阅 EKS Fargate Kustomize 示例。

修改命名空间

metadata 下的 foundry.signoz.io/kubernetes-namespace 注解用于指定 deployment collector 部署到的命名空间。Fargate profile 必须选中该命名空间,否则 deployment collector 的 Pod 会一直处于 Pending 状态。默认值如下:

Copy
metadata:
  name: signoz
  annotations:
    foundry.signoz.io/kubernetes-collector-controller: opentelemetry-operator
    foundry.signoz.io/kubernetes-namespace: signoz   # 要部署到的命名空间,由 apply 创建

命名空间默认取 metadata.name,详见示例中的注解说明表。

步骤 4:部署

在包含 casting.yaml 的目录下运行:

Copy
foundryctl cast -f casting.yaml

该命令会:

  • 生成 kustomize 根目录 pours/collectionagent/collector/deployment;
  • 使用 kubectl apply -k 将其部署到当前 kubectl context 对应的集群;
  • 首次部署时创建 collector 的命名空间(此处为 casting.yaml 中 metadata.name 定义的 signoz)。该根目录包含命名空间本身、collector 的 ServiceAccount 和 RBAC,以及名为 signoz-collector-deployment 的 OpenTelemetryCollector 资源。

随后 Operator 会根据该资源创建 collector 的工作负载和 Service(signoz-collector-deployment-collector)。修改 casting.yaml 后再次运行同一命令即可应用变更。

自行运行 kubectl

如果想直接运行 kubectl,可以先生成 kustomize 根目录,再手动应用。在包含 casting.yaml 的目录下运行:

Copy
foundryctl forge -f casting.yaml   # writes the kustomize root under pours/collectionagent/collector/deployment
kubectl apply -k pours/collectionagent/collector/deployment

应用前查看生成的清单,可运行 kubectl kustomize pours/collectionagent/collector/deployment。

步骤 5:验证 Collection Agent

在运行 kubectl 的机器上执行以下命令,确认部署的 collector pod 正运行在 Fargate 节点上,且位于 metadata.name 指定的命名空间中:

Copy
kubectl get pods -n signoz -o wide

输出结果应类似下方示例:有一个 signoz-collector-deployment-collector pod 运行在名称以 fargate- 开头的节点上。Operator 会根据其 OpenTelemetryCollector 资源命名工作负载,并附加 -collector 后缀。Pod 后缀、IP 地址和节点名称会因环境而异:

Copy
NAME                                                     READY   STATUS    RESTARTS   AGE   IP           NODE                                 NOMINATED NODE   READINESS GATES
signoz-collector-deployment-collector-6d9c7b8f5c-k2x9p   1/1     Running   0          2m    10.0.12.34   fargate-ip-10-0-12-34.ec2.internal   <none>           <none>

在 SigNoz 中,打开Kubernetes 监控视图(位于基础设施监控下)。集群视图会显示你设置的 <CLUSTER_NAME> 对应的集群,随着数据到达,Pod 和节点视图将逐步填充内容。查看日志探索器以确认 Kubernetes 事件正在正常流转。

为工作负载添加 Sidecar

Sidecar 有独立的 casting.yaml,存放于应用的 kustomize 目录中。

步骤 1:创建 casting.yaml

Sidecar 的资源文档包含与部署型 collector 相同的注释:foundry.signoz.io/kubernetes-collector-controller: opentelemetry-operator。

创建一个名为 casting.yaml 的文件,内容如下:

使用自托管(Self-Hosted)的 SigNoz?

大部分步骤完全相同。要适配本指南,只需按Cloud → Self-Hosted 中的说明修改 endpoint,并移除 ingestion key。

casting.yaml
apiVersion: v1alpha1
kind: CollectionAgent
metadata:
  name: signoz
  annotations:
    foundry.signoz.io/kubernetes-collector-controller: opentelemetry-operator
spec:
  deployment:
    platform: aws
    mode: kubernetes-
原始来源: signoz

评论 (0)