首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >namespaceSelector在ServiceMonitor Kube-prometheus中的应用

namespaceSelector在ServiceMonitor Kube-prometheus中的应用
EN

Stack Overflow用户
提问于 2022-09-22 20:48:26
回答 1查看 170关注 0票数 0

我正在学习Prometheus项目的操作符:https://github.com/prometheus-operator/kube-prometheus

当我的服务/部署处于与prometheus相同的“监视”命名空间中时,我就可以成功地可视化度量。示例:

代码语言:javascript
复制
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“。

代码语言:javascript
复制
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配置中。

代码语言:javascript
复制
- 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操作符中验证了名称空间中的所有权限。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-11 14:50:46

问题解决了!

在中,默认情况下它映射名称空间:(默认,kube,监视)

要添加特定的名称空间,我们必须编辑两个文件: prometheus-roleSpecificNamespaces.yaml

代码语言:javascript
复制
- 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
    - watch

prometheus-roleBindingSpecificNamespaces.yaml

代码语言:javascript
复制
- 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73820521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档