中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用prometheus監控traefik、redis、k8s集群各節點、各節點kubelet

發布時間:2020-07-23 00:40:02 來源:網絡 閱讀:1073 作者:dongyali521521 欄目:云計算

1、Prometheus的數據指標是通過一個公開的 HTTP(S) 數據接口獲取到的,我們不需要單獨安裝監控的 agent,只需要暴露一個 metrics 接口,Prometheus 就會定期去拉取數據;對于一些普通的 HTTP 服務,我們完全可以直接重用這個服務,添加一個/metrics接口暴露給 Prometheus
2、有一些服務即使沒有原生集成該接口,也完全可以使用一些 exporter 來獲取到指標數據,比如 mysqld_exporter、node_exporter,redis-exporter,這些 exporter 就有點類似于傳統監控服務中的 agent,用來收集目標服務的指標數據然后直接暴露給 Prometheus。

監控自帶metric接口的Traefik
1、修改其配置文件traefik.toml,增加如下內容,開啟metirc接口

[metrics]
  [metrics.prometheus]
    entryPoint = "traefik"
    buckets = [0.1, 0.3, 1.2, 5.0]

2、然后更新traefik configmap及traefik pod
$ kubectl get configmap -n kube-system
traefik-conf 1 83d
$ kubectl delete configmap traefik-conf -n kube-system
$ kubectl create configmap traefik-conf --from-file=traefik.toml -n kube-system
$ kubectl apply -f traefik.yaml
$ kubectl get svc -n kube-system |grep traefik
traefik-ingress-service NodePort 10.100.222.78 <none> 80:31657/TCP,8080:31572/TCP
$ curl 10.100.222.78:8080/metrics
$ curl 192.168.1.243:31572/metrics
3、更新prometheus的配置文件,增加job

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: kube-ops
data:
  prometheus.yml: |
    global:
      scrape_interval: 30s
      scrape_timeout: 30s

    scrape_configs:
    - job_name: 'prometheus'
      static_configs:
        - targets: ['localhost:9090']

    - job_name: 'traefik'
      static_configs:
        - targets: ['traefik-ingress-service.kube-system.svc.cluster.local:8080']

$ kubectl apply -f prome-cm.yaml #更新prometheus configemap文件
由于我們這里 Traefik 對應的 servicename 是traefik-ingress-service,并且在 kube-system 這個 namespace 下面,所以我們這里的targets的路徑配置則需要使用FQDN的形式:traefik-ingress-service.kube-system.svc.cluster.local
$ kubectl get svc -n kube-ops |grep prometheus
prometheus NodePort 10.102.197.83 <none> 9090:32619/TCP
$ curl -X POST "http://192.168.1.243:32619/-/reload" #使配置生效,可能需要一段時間,使用reload命令不用更新prometheus pod即可使配置生效

使用redis-exporter來監控 redis 服務
redis-exporter以sidecar的形式和redis部署在同一個pod內
1、構建pod及svc
$ docker pull redis:4
$ docker pull oliver006/redis_exporter:latest

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: redis
  namespace: kube-ops
spec:
  template:
    metadata:
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9121"
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis:4
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379
      - name: redis-exporter
        image: oliver006/redis_exporter:latest
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 9121
---
kind: Service
apiVersion: v1
metadata:
  name: redis
  namespace: kube-ops
spec:
  selector:
    app: redis
  ports:
  - name: redis
    port: 6379
    targetPort: 6379
  - name: prom
    port: 9121
    targetPort: 9121

$ kubectl get svc -n kube-ops |grep redis
redis ClusterIP 10.105.241.59 <none> 6379/TCP,9121/TCP
$ curl 10.105.241.59:9121/metrics #查看是否能監控到
2、增加job并更新prometheus configmap配置文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: kube-ops
data:
  prometheus.yml: |
    global:
      scrape_interval: 30s
      scrape_timeout: 30s
    scrape_configs:
    - job_name: 'prometheus'
      static_configs:
      - targets: ['localhost:9090']
    - job_name: 'traefik'
      static_configs:
      - targets: ['traefik-ingress-service.kube-system.svc.cluster.local:8080']
    - job_name: 'redis'
      static_configs:
      - targets: ['redis:9121']

由于我們這里的 redis 服務和 Prometheus 處于同一個 namespace,所以我們直接使用 servicename
$ kubectl apply -f prometheus-cm.yaml #更新配置
$ kubectl get svc -n kube-ops |grep prometheus
prometheus NodePort 10.102.197.83 <none> 9090:32619/TCP
$ curl -X POST "http://10.102.197.83:9090/-/reload" #使配置生效
http://http://192.168.1.243:32619/targets

使用node-exporter監控k8s集群中的所有節點及每個節點的kubelet
1、部署node-exporter
通過 DaemonSet 控制器來部署該服務,這樣每一個節點都會自動運行一個這樣的 Pod

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: node-exporter
  namespace: kube-ops
  labels:
    name: node-exporter
spec:
  template:
    metadata:
      labels:
        name: node-exporter
    spec:
      hostPID: true
      hostIPC: true
      hostNetwork: true
      containers:
      - name: node-exporter
        image: prom/node-exporter:v0.16.0
        ports:
        - containerPort: 9100
        resources:
          requests:
            cpu: 0.15
        securityContext:
          privileged: true
        args:
        - --path.procfs
        - /host/proc
        - --path.sysfs
        - /host/sys
        - --collector.filesystem.ignored-mount-points
        - '"^/(sys|proc|dev|host|etc)($|/)"'
        volumeMounts:
        - name: dev
          mountPath: /host/dev
        - name: proc
          mountPath: /host/proc
        - name: sys
          mountPath: /host/sys
        - name: rootfs
          mountPath: /rootfs
      tolerations:
      - key: "node-role.kubernetes.io/master"
        operator: "Exists"
        effect: "NoSchedule"
      volumes:
        - name: proc
          hostPath:
            path: /proc
        - name: dev
          hostPath:
            path: /dev
        - name: sys
          hostPath:
            path: /sys
        - name: rootfs
          hostPath:
            path: /

由于我們要獲取到的數據是主機的監控指標數據,而我們的 node-exporter 是運行在容器中的,所以我們在 Pod 中需要配置一些 Pod 的安全策略,這里我們就添加了hostPID: true、hostIPC: true、hostNetwork: true3個策略,用來使用主機的 PID namespace、IPC namespace 以及主機網絡,這些 namespace 就是用于容器隔離的關鍵技術,要注意這里的 namespace 和集群中的 namespace 是兩個完全不相同的概念。
由于指定了hostNetwork=true,所以在每個節點上就會綁定一個端口 9100,我們可以通過這個端口去獲取到監控指標數據
$ curl 127.0.0.1:9100/metrics
$ curl 127.0.0.1:10255/metrics #通過10255端口監控kubelet
2、增加job,更新prometheus配置

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: kube-ops
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s
      scrape_timeout: 15s
    scrape_configs:
    - job_name: 'prometheus'
      static_configs:
      - targets: ['localhost:9090']
    - job_name: 'traefik'
      static_configs:
      - targets: ['traefik-ingress-service.kube-system.svc.cluster.local:8080']
    - job_name: 'redis'
      static_configs:
      - targets: ['redis:9121']
    - job_name: 'kubernetes-nodes'
      kubernetes_sd_configs:
      - role: node
      relabel_configs:
      - source_labels: [__address__]
        regex: '(.*):10250'
        replacement: '${1}:9100'
        target_label: __address__
        action: replace
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
    - job_name: 'kubernetes-kubelet'
      kubernetes_sd_configs:
      - role: node
      relabel_configs:
      - source_labels: [__address__]
        regex: '(.*):10250'
        replacement: '${1}:10255'
        target_label: __address__
        action: replace
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)

在 Kubernetes 下,Promethues 通過與 Kubernetes API 集成,目前主要支持5種服務發現模式,分別是:Node、Service、Pod、Endpoints、Ingress。
kubelet默認監聽的端口,分別為 10250 、10255、10248
$ vim /var/lib/kubelet/config.yaml
healthzPort: 10248
port: 10250
readOnlyPort: 10255
prometheus 去發現 Node 模式的服務的時候,訪問的端口默認是10250,而現在該端口下面已經沒有了/metrics指標數據了,現在 kubelet 只讀的數據接口統一通過10255端口進行暴露了,所以我們應該去替換掉這里的端口,但是我們是要替換成10255端口嗎?不是的,因為我們是要去配置上面通過node-exporter抓取到的節點指標數據,而我們上面是不是指定了hostNetwork=true,所以在每個節點上就會綁定一個端口9100,所以我們應該將這里的10250替換成9100
$ kubectl apply -f prometheus-cm.yaml
$ kubectl get svc -n kube-ops |grep prometheus
prometheus NodePort 10.102.197.83 <none> 9090:32619/TCP
$ curl -X POST "http://10.102.197.83:9090/-/reload" #使配置生效

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昭平县| 聂荣县| 吕梁市| 海安县| 大余县| 鸡东县| 武胜县| 黄石市| 延长县| 抚顺县| 通城县| 阿拉尔市| 漯河市| 滦平县| 苍梧县| 靖州| 临泉县| 凤山县| 米泉市| 石楼县| 嵩明县| 永定县| 颍上县| 平潭县| 苍南县| 临颍县| 饶河县| 清徐县| 克拉玛依市| 礼泉县| 信阳市| 通化市| 朝阳区| 城市| 沐川县| 仙游县| 额尔古纳市| 无极县| 阳朔县| 克什克腾旗| 阆中市|