【发布时间】:2021-05-15 15:55:42
【问题描述】:
我使用 prometheus-client 包在 Python 中创建了一个自定义导出器。然后创建必要的工件以在部署在 Kubernetes 上的 Prometheus 中找到作为目标的指标。
但尽管遵循了所有可用说明,但我无法将指标视为目标。 感谢您帮助找出问题。
这是我所做的总结。
- 使用 Helm 在命名空间中的 K8s 集群上安装 Prometheus prometheus
- 使用 prometheus-client 包创建了一个 python 程序来创建一个指标
- 在 dockerhub 中创建并部署了导出器的映像
- 在命名空间 prom-test 中针对指标图像创建了部署
- 创建了一个服务、ServiceMonitor 和一个 ServiceMonitorSelector
- 创建了服务帐户、角色和绑定以启用对端点的访问
以下是代码。
服务与部署
apiVersion: v1
kind: Service
metadata:
name: test-app-exporter
namespace: prom-test
labels:
app: test-app-exporter
spec:
type: ClusterIP
selector:
app: test-app-exporter
ports:
- name: http
protocol: TCP
port: 6000
targetPort: 5000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-app-exporter
namespace: prom-test
spec:
selector:
matchLabels:
app: test-app-exporter
template:
metadata:
labels:
app: test-app-exporter
spec:
#serviceAccount: test-app-exporter-sa
containers:
- name: test-app-exporter
image: index.docker.io/cbotlagu/test-app-exporter:2
imagePullPolicy: Always
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- name: http
containerPort: 5000
imagePullSecrets:
- name: myregistrykey
服务帐号和角色绑定
apiVersion: v1
kind: ServiceAccount
metadata:
name: test-app-exporter-sa
namespace: prom-test
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: test-app-exporter-binding
subjects:
- kind: ServiceAccount
name: test-app-exporter-sa
namespace: prom-test
roleRef:
kind: ClusterRole
name: test-app-exporter-role
apiGroup: rbac.authorization.k8s.io
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: test-app-exporter-role
rules:
- apiGroups: [""]
resources:
- nodes
- nodes/metrics
- services
- endpoints
- pods
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources:
- configmaps
verbs: ["get"]
- apiGroups:
- networking.k8s.io
resources:
- ingresses
verbs: ["get", "list", "watch"]
服务监视器和选择器
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: test-app-exporter-sm
namespace: prometheus
labels:
app: test-app-exporter
release: prometheus
spec:
selector:
matchLabels:
# Target app service
app: test-app-exporter
endpoints:
- port: http
interval: 15s
path: /metrics
namespaceSelector:
matchNames:
- default
- prom-test
#any: true
---
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: service-monitor-selector
namespace: prometheus
spec:
serviceAccountName: test-app-exporter-sa
serviceMonitorSelector:
matchLabels:
app: test-app-exporter-sm
release: prometheus
resources:
requests:
memory: 400Mi
【问题讨论】:
-
您能否将服务类型更改为例如 LoadBalancer 或 NodePort - 阅读更多:kubernetes.io/docs/concepts/services-networking/service? ClusterIP 服务只能在集群内访问。
-
感谢您的意见。我试过了,但到目前为止没有运气。
标签: kubernetes prometheus