从相邻的 Kubernetes Pods 访问 dogstatsd (datadog) Pod
Accessing dogstatsd (datadog) Pod from adjecent Kubernetes Pods
我 运行 一些 python 应用程序作为 Google 容器引擎 (gke) 上 kubernetes 内部的副本集。除了它们,我还创建了 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 的 8126/7777 端口 pods.
我试过创建一个公开端口的服务:
---
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 pods 似乎仍然无法访问,例如 os.environ['DATADOG_STATSD_PORT_8126_TCP_ADDR']
和 .._PORT
。
它们都已定义,我仍然连接超时。如果我连接到 dd-agent pods 并启用 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
因此,在尝试对此进行调试时,我删除了部署 + dameonset 和服务并重新创建了它。后来成功了....
您看过 Discovering Services 文档吗?我建议使用 DNS 而不是环境变量来进行服务发现,因为环境变量需要服务以特定顺序出现。
我 运行 一些 python 应用程序作为 Google 容器引擎 (gke) 上 kubernetes 内部的副本集。除了它们,我还创建了 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 的 8126/7777 端口 pods.
我试过创建一个公开端口的服务:
---
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 pods 似乎仍然无法访问,例如 os.environ['DATADOG_STATSD_PORT_8126_TCP_ADDR']
和 .._PORT
。
它们都已定义,我仍然连接超时。如果我连接到 dd-agent pods 并启用 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
因此,在尝试对此进行调试时,我删除了部署 + dameonset 和服务并重新创建了它。后来成功了....
您看过 Discovering Services 文档吗?我建议使用 DNS 而不是环境变量来进行服务发现,因为环境变量需要服务以特定顺序出现。