外部prometheus+grafana监控k8s(附所需文件资源)——保姆级教程

背景:我们在上一篇讲的部署好普罗米修斯后得到一个监控k8s集群的需求,但因为prometheus是用docker部署在k8s外部,所以无法直接获取k8s的内部pod信息,这时候我们有2种办法来取得监控k8s。

普罗米修斯部署文档链接docker部署prometheus和grafana监控容器和主机-优快云博客

第一种:使用集成的kube-state-metrics部署到k8s内部,获取pod信息,对接prometheus

第二种:通过授权,Cadvisor内置在kubelet当中,通过kubelet暴露的api去访问的,2种办法我都会讲,但是推荐使用第一种,简洁方便。

第一种:部署kube-state-metrics

准备文件和镜像:

yaml文件下载地址:kube-state-metrics/examples/standard at main · kubernetes/kube-state-metrics · GitHub

这里你们不用下载,我下面直接配置好给你们,在服务器上vim保存就行

kube-state-metrics最新版镜像下载地址:

链接: https://caiyun.139.com/m/i?2jexBsdYH3Em9  提取码:zd7r  

编写配置文件

1.    vim cluster-role.yaml文件

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    app.kubernetes.io/component: exporter
    app.kubernetes.io/name: kube-state-metrics
    app.kubernetes.io/version: 2.12.0
  name: kube-state-metrics
rules:
- apiGroups:
  - ""
  resources:
  - configmaps
  - secrets
  - nodes
  - pods
  - services
  - serviceaccounts
  - resourcequotas
  - replicationcontrollers
  - limitranges
  - persistentvolumeclaims
  - persistentvolumes
  - namespaces
  - endpoints
  verbs:
  - list
  - watch
- apiGroups:
  - apps
  resources:
  - statefulsets
  - daemonsets
  - deployments
  - replicasets
  verbs:
  - list
  - watch
- apiGroups:
  - batch
  resources:
  - cronjobs
  - jobs
  verbs:
  - list
  - watch
- apiGroups:
  - autoscaling
  resources:
  - horizontalpodautoscalers
  verbs:
  - list
  - watch
- apiGroups:
  - authentication.k8s.io
  resources:
  - tokenreviews
  verbs:
  - create
- apiGroups:
  - authorization.k8s.io
  resources:
  - subjectaccessreviews
  verbs:
  - create
- apiGroups:
  - policy
  resources:
  - poddisruptionbudgets
  verbs:
  - list
  - watch
- apiGroups:
  - certificates.k8s.io
  resources:
  - certificatesigningrequests
  verbs:
  - list
  - watch
- apiGroups:
  - discovery.k8s.io
  resources:
  - endpointslices
  verbs:
  - list
  - watch
- apiGroups:
  - storage.k8s.io
  resources:
  - storageclasses
  - volumeattachments
  verbs:
  - list
  - watch
- apiGroups:
  - admissionregistration.k8s.io
  resources:
  - mutatingwebhookconfigurations
  - validatingwebhookconfigurations
  verbs:
  - list
  - watch
- apiGroups:
  - networking.k8s.io
  resources:
  - networkpolicies
  - ingressclasses
  - ingresses
  verbs:
  - list
  - watch
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  verbs:
  - list
  - watch
- apiGroups:
  - rbac.authorization.k8s.io
  resources:
  - clusterrolebindings
  - clusterroles
  - rolebindings
  - roles
  verbs:
  - list
  - watch

2.  vim  cluster-role-binding.yaml文件

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    app.kubernetes.io/component: exporter
    app.kubernetes.io/name: kube-state-metrics
    app.kubernetes.io/version: 2.12.0
  name: kube-state-metrics
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kube-state-metrics
subjects:
- kind: ServiceAccount
  name: kube-state-metrics
  namespace: kube-system

3.  vim  deployment.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/component: exporter
    app.kubernetes.io/name: kube-state-metrics
    app.kubernetes.io/version: 2.12.0
  name: kube-state-metrics
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: kube-state-metrics
  template:
    metadata:
      labels:
        app.kubernetes.io/component: exporter
        app.kubernetes.io/name: kube-state-metrics
        app.kubernetes.io/version: 2.12.0
    spec:
      automountServiceAccountToken: true
      containers:
      - image: 172.22.16.20:8080/kubesphere/kube-state-metrics:latest
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 5
          timeoutSeconds: 5
        name: kube-state-metrics
        ports:
        - containerPort: 8080
          name: http-metrics
        - containerPort: 8081
          name: telemetry
        readinessProbe:
          httpGet:
            path: /
            port: 8081
          initialDelaySeconds: 5
          timeoutSeconds: 5
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop:
            - ALL
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 65534
          seccompProfile:
            type: RuntimeDefault
      nodeSelector:
        kubernetes.io/os: linux
      serviceAccountName: kube-state-metrics

重点注意:

这里的image:地址必须是服务器本地的私有仓库地址,即后面我们上传的kube-state-metrics地址,不然镜像拉取不到

4. vim service-account.yaml文件

apiVersion: v1
automountServiceAccountToken: false
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/component: exporter
    app.kubernetes.io/name: kube-state-metrics
    app.kubernetes.io/version: 2.12.0
  name: kube-state-metrics
  namespace: kube-system

5.  vim  service.yaml 文件

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: exporter
    app.kubernetes.io/name: kube-state-metrics
    app.kubernetes.io/version: 2.12.0
  name: kube-state-metrics
  namespace: kube-system
spec:
  type: NodePort
  ports:
  - name: http-metrics
    port: 8080
    targetPort: 8080
    nodePort: 31666
  - name: telemetry
    port: 8081
    targetPort: 8081
  selector:
    app.kubernetes.io/name: kube-state-metrics

上传kube-state-metrics 镜像

将下载好的kube-state-metrics.tar上传至服务器

加载镜像

$ docker load -i kube-state-metrics.tar

将镜像上传至本地私有仓库(这里自己找一下自己的本地仓库),这里必须先上传到仓库,否则部署会显示镜像拉取失败。即

  docker login 172.22.16.20:8080   #登录自己私有仓库
  docker images 
  docker tag bitnami/kube-state-metrics:latest 172.22.16.20:8080/kubesphere/kube-state-metrics:latest  #tag镜像
  docker images
  docker push 172.22.16.20:8080/kubesphere/kube-state-metrics:latest #上传镜像

#注意将这里的地址换成自己的仓库地址

部署kube-state-metrics

pwd
~/kube-state-metrics
[K8S@k8s-master kube-state-metrics]$ kubectl apply -f ./

[K8S@k8s-master kube-state-metrics]$ kubectl get all -n kube-system  #查看部署结果

验证

访问Service暴露的31666端口,能成功返回,或者curl 能返回结果

配置普罗米修斯数据源对接k8s

vim  prometheus.yml

scrape_configs:
  - job_name: 'kube-state-metrics'
    static_configs:
      - targets: ['<kube-state-metrics-service-ip>:<kube-state-metrics-service-port>']

访问prometheus,验证结果

配置grafana对接显示

,这里很简单就不多说了,忘了的看完上一篇文章https://blog.youkuaiyun.com/weixin_47531290/article/details/144538170

第二种

!!!太累了,第二种方式后面更新,更新后链接会放在这里

PrometheusGrafana是一对强大的监控工具,可以用于监控Kubernetes集群。下面是一种常见的部署方式: 1. 在Kubernetes集群内部部署Prometheus: - 将Prometheus部署在Kubernetes集群的monitoring命名空间下。 - 由于Kubernetes在所有命名空间下自动创建了serviceAccount和对应的Secret,其中包含访问Kubernetes API的token和ca证书,因此不需要手动创建serviceAccount和Secret。 - 在Prometheus的配置文件(prometheus.yaml)中,可以使用Kubernetes的服务发现功能来自动发现和监控Kubernetes集群中的各个组件。 2. 在Kubernetes集群外部部署Prometheus: - 将Prometheus部署在虚拟机上。 - 需要手动在Prometheus的配置文件中指定Kubernetes API的地址、ca证书和token,以便Prometheus能够访问Kubernetes集群。 无论是内部部署还是外部部署,Prometheus都可以通过抓取目标(exporter)来获取Kubernetes集群的监控指标。在Kubernetes中,有很多第三方组件(如Etcd、Kube-proxy、Node exporter等)也会产生重要的监控指标,这些指标可以通过exporter将其转换为Prometheus可识别的格式,并暴露Prometheus进行抓取。 Grafana是一个用于可视化监控数据的工具,可以与Prometheus集成,通过查询Prometheus的数据来生成各种图表和仪表盘。可以使用Grafana的界面来创建自定义的监控仪表盘,展示Kubernetes集群的各项指标,并进行实时监控和告警。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值