我正在学习Prometheus项目的操作符:https://github.com/prometheus-operator/kube-prometheus
当我的服务/部署处于与prometheus相同的“监视”命名空间中时,我就可以成功地可视化度量。示例:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: caixa-app
namespace: monitoring
labels:
app.kubernetes.io/name: kube-caixa
app.kubernetes.io/part-of: kube-prometheus
spec:
endpoints:
- interval: 15s
port: http
selector:
matchLabels:
app: caixa
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: caixa-deployment
namespace: monitoring
spec:
replicas: 2
selector:
matchLabels:
app: caixa-pod
template:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: /metrics
prometheus.io/port: "80"
labels:
app: caixa-pod
spec:
containers:
- name: caixa
image: 'REGISTRY-NAME/caixa:1.0'
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
imagePullSecrets:
- name: regcred
---
apiVersion: v1
kind: Service
metadata:
name: caixa-svc
namespace: monitoring
labels:
app: caixa
spec:
selector:
app: caixa-pod
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 80
type: ClusterIP按照上面提到的方式,我在同一个名称空间“监视”中取得了成功。

然而,我需要我的Prometheus-运算符从我将要创建的其他名称空间中收集度量。所以我使用了参数"namespaceSelector“。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: caixa-app
namespace: monitoring
labels:
app.kubernetes.io/name: kube-caixa
app.kubernetes.io/part-of: kube-prometheus
spec:
endpoints:
- interval: 15s
port: http
namespaceSelector:
matchNames:
- shop
selector:
matchLabels:
app: caixa
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: caixa-deployment
namespace: shop
spec:
replicas: 2
selector:
matchLabels:
app: caixa-pod
template:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: /metrics
prometheus.io/port: "80"
labels:
app: caixa-pod
spec:
containers:
- name: caixa
image: 'REGISTRY-NAME/caixa:1.0'
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
imagePullSecrets:
- name: regcred
---
apiVersion: v1
kind: Service
metadata:
name: caixa-svc
namespace: shop
labels:
app: caixa
spec:
selector:
app: caixa-pod
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 80
type: ClusterIP这样,度量标准就不会出现在prometheus中,而是在我的Prometheus配置中。

- job_name: serviceMonitor/monitoring/caixa-app/0
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
follow_redirects: true
enable_http2: true
relabel_configs:
....
kubernetes_sd_configs:
- role: endpoints
kubeconfig_file: ""
follow_redirects: true
enable_http2: true
namespaces:
own_namespace: false
names:
- shop我需要添加更多的元素吗?这样服务监视器就可以从其他名称空间收集度量标准了?
我已经在我的ClusterRole和Prometheus操作符中验证了名称空间中的所有权限。
发布于 2022-10-11 14:50:46
问题解决了!
在中,默认情况下它映射名称空间:(默认,kube,监视)
要添加特定的名称空间,我们必须编辑两个文件: prometheus-roleSpecificNamespaces.yaml
- apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
labels:
app.kubernetes.io/component: prometheus
app.kubernetes.io/instance: k8s
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 2.38.0
name: prometheus-k8s
namespace: loja
rules:
- apiGroups:
- ""
resources:
- services
- endpoints
- pods
verbs:
- get
- list
- watch
- apiGroups:
- extensions
resources:
- ingresses
verbs:
- get
- list
- watch
- apiGroups:
- networking.k8s.io
resources:
- ingresses
verbs:
- get
- list
- watch- apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
labels:
app.kubernetes.io/component: prometheus
app.kubernetes.io/instance: k8s
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 2.38.0
name: prometheus-k8s
namespace: loja
rules:
- apiGroups:
- ""
resources:
- services
- endpoints
- pods
verbs:
- get
- list
- watch
- apiGroups:
- extensions
resources:
- ingresses
verbs:
- get
- list
- watch
- apiGroups:
- networking.k8s.io
resources:
- ingresses
verbs:
- get
- list
- watchprometheus-roleBindingSpecificNamespaces.yaml
- apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
app.kubernetes.io/component: prometheus
app.kubernetes.io/instance: k8s
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 2.38.0
name: prometheus-k8s
namespace: loja
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: prometheus-k8s
subjects:
- kind: ServiceAccount
name: prometheus-k8s
namespace: monitoring添加所需的命名空间并应用yml之后,将添加ServiceMonitor。
https://stackoverflow.com/questions/73820521
复制相似问题