Prometheus+Grafana (externo) monitora cluster Kubernetes (K8s) (baseado em containerd)

1. Ambiente experimental


1. Ambiente k8s

Versão v1.26.5
binária instalação cluster Kubernetes (K8s) (baseado em containerd) — tutorial de instalação do zero (com certificado)

Nome da CPU PI versão do sistema instalar serviço
mestre01 10.10.10.21 rhel7.5 nginx、etcd、api-server、scheduler、controller-manager、kubelet、proxy
mestre02 10.10.10.22 rhel7.5 nginx、etcd、api-server、scheduler、controller-manager、kubelet、proxy
mestre03 10.10.10.23 rhel7.5 nginx、etcd、api-server、scheduler、controller-manager、kubelet、proxy
nó01 10.10.10.24 rhel7.5 nginx, kubelet, proxy
nó02 10.10.10.25 rhel7.5 nginx, kubelet, proxy

2. Ambiente Prometheus + Grafana

Sistema de monitoramento Prometheus+Grafana

Nome da CPU PI versão do sistema
Jenkins 10.10.10.10 rhel7.5

3. Método de implantação do Prometheus

  • Prometheus dentro do kubernetes monitora cluster k8s
    • O monitoramento interno do Prometheus K8S é implantar o Prometheus no cluster K8S, como implantá-lo no namespace de monitoramento do cluster K8S, porque o K8S cria automaticamente uma serviceAccount e o segredo correspondente em todos os namespaces com seu próprio token e ca para acessar a API K8S Portanto, não há necessidade de criar manualmente serviceAccount e Secret.
  • Prometheus monitorando k8s fora do Kubernetes
    • O Prometheus externo ao kubernetes monitora o K8S externo implantando o Prometheus em uma máquina virtual. Você precisa especificar manualmente o endereço da API, ca e token no Prometheus.yaml.

4. Correspondência de versão

https://github.com/kubernetes/kube-state-metrics

Insira a descrição da imagem aqui

5. Método de coleta

  • Exportador: É uma ferramenta que converte indicadores de componentes de terceiros em um formato que o Prometheus possa reconhecer e os exponha como alvos de rastreamento. No Kubernetes, existem muitos componentes de terceiros (como Etcd, Kube-proxy, Node exporter, etc.) que também geram importantes indicadores de monitoramento.

  • kube-state-metrics: é um componente independente usado para expor os indicadores de status de vários recursos (como pod, serviço, implantação, etc.) no cluster Kubernetes. É mais conveniente de usar. Aqui usamos este método

2. Configurar métricas de estado do kube


https://github.com/kubernetes/kube-state-metrics/tree/v2.9.2/examples/standard

1. Download de arquivo

[root@master01 kube-state-metrics]# ls
cluster-role-binding.yaml  cluster-role.yaml  deployment.yaml  service-account.yaml  service.yaml
[root@master01 kube-state-metrics]# cat 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.9.2
  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
[root@master01 kube-state-metrics]# cat 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.9.2
  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
[root@master01 kube-state-metrics]# cat 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.9.2
  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.9.2
    spec:
      automountServiceAccountToken: true
      containers:
      - image: bitnami/kube-state-metrics:2.9.2
        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
[root@master01 kube-state-metrics]# cat 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.9.2
  name: kube-state-metrics
  namespace: kube-system
[root@master01 kube-state-metrics]# cat 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.9.2
  name: kube-state-metrics
  namespace: kube-system
spec:
  type: NodePort
  ports:
  - name: http-metrics
    port: 8080
    targetPort: 8080
    nodePort: 32080
    protocol: TCP
  - name: telemetry
    port: 8081
    targetPort: 8081
    nodePort: 32081
    protocol: TCP
  selector:
    app.kubernetes.io/name: kube-state-metrics

2. Instale métricas de estado do kube

Expondo portas usando NodePort

[root@master01 kube-state-metrics]# kubectl apply -f ./
[root@master01 kube-state-metrics]# kubectl  get po -n kube-system -o wide | grep kube-state-metrics
kube-state-metrics-57ddc8c4ff-krsh2   1/1     Running   0             9m5s   10.0.3.1      master02   <none>           <none>

[root@master01 kube-state-metrics]# kubectl get svc -n kube-system | grep kube-state-metrics
kube-state-metrics   NodePort    10.97.38.90     <none>        8080:32080/TCP,8081:32081/TCP   9m17s

3. Resultados do teste

Verificou-se que ele foi implantado no master02, que é 10.10.10.22

[root@master01 kube-state-metrics]# curl http://10.97.38.90:8080/healthz -w '\n'
OK

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

3. Configurar o Prometheus


1. Modifique prometheus.yml

[root@jenkins ~]# cat Prometheus/prometheus.yml
  - job_name: "kube-state-metrics"
    static_configs:
      - targets: ["10.10.10.22:32080"]

  - job_name: "kube-state-telemetry"
    static_configs:
      - targets: ["10.10.10.22:32081"]

2. Reinicie o Prometheus

[root@jenkins ~]# docker ps -a
CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS                       PORTS                    NAMES
a0497377cd82        grafana/grafana-enterprise          "/run.sh"                13 days ago         Up 3 minutes                 0.0.0.0:3000->3000/tcp   grafana
3e0e4270bd92        prom/prometheus                     "/bin/prometheus --c…"   13 days ago         Up 3 minutes                 0.0.0.0:9090->9090/tcp   prometheus

[root@jenkins ~]# docker restart 3e0e4270bd92

3. Faça login para ver os resultados

Insira a descrição da imagem aqui

4. Configurar o Grafana


Modelos recomendados: 13332, 13824, 14518

1. Importar modelo

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

2. Veja os resultados

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/Dream_ya/article/details/131023805
Recomendado
Clasificación