【问题标题】:Accessing dogstatsd (datadog) Pod from adjecent Kubernetes Pods从相邻的 Kubernetes Pod 访问 dogstatsd (datadog) Pod
【发布时间】:2017-07-15 10:22:00
【问题描述】:

我在 Google Container Engine (gke) 上的 kubernetes 内运行许多 Python 应用程序作为副本集。除了它们,我还创建了 Datadog DaemonSet,它在集群中的每个节点上启动一个 dd-agent。

现在我想使用代理 dogstatsd 从 python 应用程序记录指标,并尝试新的 Datadog APM。 如果我只是安装 ddtrace python 包并像记录的那样使用它,它会填满我的日志

[2017-02-24 14:09:15,199] [5] [ddtrace.writer] [ERROR] cannot send spans: [Errno 110] Connection timed out
[2017-02-24 14:11:23,660] [5] [ddtrace.writer] [ERROR] cannot send spans: [Errno 110] Connection timed out

显然它没有神奇的方法来猜测如何访问 ddagent pod 的端口 8126/7777。

我尝试创建一个暴露端口的服务:

---
apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: 'true'
  labels:
    app: datadog-statsd
  name: datadog-statsd
spec:
  ports:
  - name: dogstatsd
    port: 8125
    targetPort: dogstatsdport
    protocol: UDP
  - name: ddapm
    port: 8126
    targetPort: ddtraceport
    protocol: TCP
  selector:
    app: dd-agent

但我的 python pod 似乎仍然无法访问,例如 os.environ['DATADOG_STATSD_PORT_8126_TCP_ADDR'].._PORT。 它们都已定义,我仍然只是连接超时。如果我连接到 dd-agent pod 并启用 tcpdump,我也看不到端口 8126 等上的任何流量。

dd-agent DaemonSet 的定义如下:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: dd-agent
spec:
  template:
    metadata:
      labels:
        app: dd-agent
      name: dd-agent
    spec:
      containers:
      - image: datadog/docker-dd-agent:latest
        imagePullPolicy: Always
        name: dd-agent
        ports:
          - containerPort: 8125
            name: dogstatsdport
            protocol: UDP
          - containerPort: 8126
            name: ddtraceport
            protocol: TCP
        env:
          - name: API_KEY
            value: .....
          - name: KUBERNETES
            value: "yes"
          - name: SD_BACKEND
            value: docker
          - name: DD_APM_ENABLED
            value: "true"
        volumeMounts:
          - name: dockersocket
            mountPath: /var/run/docker.sock
          - name: procdir
            mountPath: /host/proc
            readOnly: true
          - name: cgroups
            mountPath: /host/sys/fs/cgroup
            readOnly: true
      volumes:
        - hostPath:
            path: /var/run/docker.sock
          name: dockersocket
        - hostPath:
            path: /proc
          name: procdir
        - hostPath:
            path: /sys/fs/cgroup
          name: cgroups

【问题讨论】:

  • kubectl get endpoints/datadog-statsd -n <my-namespace> 是否显示任何端点?它应该与部署守护程序集的节点数量相同。
  • 确实如此。我想我终于想通了

标签: python kubernetes google-kubernetes-engine datadog


【解决方案1】:

因此,在尝试调试时,我删除了部署 + dameonset 和服务并重新创建了它。后来就成功了……

【讨论】:

  • 是删除并重新创建“修复”它的 DaemonSet 和服务的行为,还是您尝试过的其他方法?有类似的问题。
  • 据我所知@Intelekshual,修复它的是删除/重新创建
  • 我遇到了同样的问题,我想更好地了解您是如何创建服务的 - 您没有为集群中的每个 dd-agent(节点)创建一个,是吗? ?
【解决方案2】:

您看过Discovering Services 文档吗?我建议使用 DNS 而不是环境变量来进行服务发现,因为环境变量要求服务以特定顺序出现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-07
    • 2018-11-16
    • 2020-03-23
    • 2019-05-02
    • 2023-04-07
    • 1970-01-01
    • 2020-07-06
    • 2022-01-15
    相关资源
    最近更新 更多