从adjecent Kubernetes Pods

时间:2017-02-24 14:27:23

标签: python kubernetes google-kubernetes-engine datadog

我在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

2 个答案:

答案 0 :(得分:1)

因此,在尝试调试时,我删除了部署+ dameonset和服务并重新创建它。之后它起作用....

答案 1 :(得分:0)

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