如何在GKE集群上部署Prometheus

380 阅读4分钟

各位读者大家好,我将介绍如何在GKE集群上部署Prometheus的细节。

场景

在一个GKE集群中,有一个应用程序正在运行,该应用程序需要被监控。

普罗米修斯

普罗米修斯是一个开源的系统监控和警报工具集,由SoundCloud创建。
自2012年推出以来,Prometheus已经被一些企业和组织使用,该项目拥有一个繁荣的开发者和用户社区。
它现在是一个自主的开源项目,不受任何特定企业的维护。
普罗米修斯是继Kubernetes之后的第二个托管项目,在2016年加入了云原生计算基金会,以强调这一点,并使项目的治理结构清晰。

普罗米修斯以时间序列数据的形式收集和存储其指标,这意味着有关指标的信息与捕获它的时间戳和称为标签的可选键值对一起保存。

前提条件

创建一个K8s集群

  1. 在创建你的集群后,你需要获得认证凭证来与集群互动
  2. 一个部署在k8s引擎上的应用程序,它已经暴露了Prometheus度量。
gcloud container clusters get-credentials <clustername>

在k8s集群上部署应用程序

让我们创建一个名为app.yaml的清单文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: prom-example
  labels:
    app: prom-example
spec:
  selector:
    matchLabels:
      app: prom-example
  replicas: 3
  template:
    metadata:
      labels:
        app: prom-example
    spec:
      nodeSelector:
        kubernetes.io/os: linux
        kubernetes.io/arch: amd64
      containers:
      - image: nilebox/prometheus-example-app@sha256:dab60d038c5d6915af5bcbe5f0279a22b95a8c8be254153e22d7cd81b21b84c5
        name: prom-example
        ports:
        - name: metrics
          containerPort: 1234
        command:
        - "/main"
        - "--process-metrics"
        - "--go-metrics"

使用命令应用该yml文件

kubectl apply -f apps.yaml

使用命令检查部署情况

kubectl get deployment

获取Helm存储库信息

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

helm repo update

现在安装Prometheus operator的Helm图表(Prometheus-operator是命名空间的名称)。

helm install prometheus prometheus-community/kube-prometheus-stack -n=prometheus-operator --create-namespace

检查命名空间的状态。

kubectl get namespace

然后你可以使用kubectl describe crd来获得CRD的描述。当然还有kubectl get crd -o yaml来获得CRD的完整定义。

现在,通过端口转发到5000来检查应用程序的指标。

 kubectl port-forward deployment/prom-example 5000:1234

在你的浏览器上打开一个新标签,然后输入

http://localhost:5000/metrics

应用程序的度量

为应用程序创建服务文件

命名清单文件applicationervice.yaml

apiVersion: v1
kind: Service
metadata:
  name: applicationservice
  labels:
    name: applicationservice
    
spec:
  selector:
    app: prom-example
  ports:
  - port: 5000
    targetPort: 1234
    name: port-name

使用命令应用该清单文件

kubectl apply -f applicationservice.yaml

创建集群角色、角色绑定和服务账户

普罗米修斯服务器需要访问Kubernetes API,以便搜刮目标和到达Alertmanager集群。因此,为了允许访问这些资源,必须创建一个服务账户,并与ClusterRole链接。

命名清单文件 rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus
  namespace: default
rules:
- apiGroups: [""]
  resources:
  - nodes
  - nodes/metrics
  - services
  - endpoints
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources:
  - configmaps
  verbs: ["get"]
- apiGroups:
  - networking.k8s.io
  resources:
  - ingresses
  verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
  verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus
  namespace: default

使用命令应用该清单文件

kubectl apply -f rbac.yaml
  • 检查该角色是否已创建并与ServiceAccount绑定。
kubectl describe clusterrolebinding prometheus

创建服务监视器资源

创建包含以下内容的文件 service-monitor.yaml,以添加一个 ServiceMonitor,从而使 Prometheus 服务器仅刮取其自身的度量指标端点。

将清单文件命名为 service-monitor.yaml

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: prometheus
  labels:
    name: prometheus
spec:
  selector:
    matchLabels: 
      name: applicationservice  
  endpoints:
    - port: port-name

    

使用命令应用此清单文件

kubectl apply -f service-monitor.yaml

创建 Prometheus 自定义资源

创建Prometheus ServiceAccount并赋予其对Kubernetes API的访问权后,我们可以部署Prometheus实例。

创建mainfest文件prometheus.yaml

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: prometheus
spec:
  serviceAccountName: prometheus
  
  serviceMonitorSelector: 
    matchLabels:
      name: prometheus
  resources:
    requests:
      memory: 400Mi

使用命令应用这个清单文件

kubectl apply -f prometheus.yaml

Grafana仪表板

使用命令转发访问Grafana仪表板的端口

kubectl port-forward svc/prometheus-grafana 9000:80 --namespace=prometheus-operator
  • 在浏览器中输入127.0.0.1:9000
  • 在终端上输入这些命令以获取用户名和密码
kubectl get secrets -n prometheus-operator
kubectl get secrets prometheus-grafana --namespace=prometheus-operator -o yaml

使用命令对用户名和密码进行解码

echo cHJvbS1vcGVyYXRvcg== | base64 --decode

最后打开grafana的仪表盘,并按照给定的步骤操作。

  1. 进入设置
  2. 点击 "数据源
  3. 点击 "添加数据源"
  4. 名称:普罗米修斯
  5. URL:设置适当的Prometheus服务器URL
  6. 根据需要调整其他数据源设置(例如,选择正确的访问方法)。点击 "Save & Test "来保存新的数据源。

总结

总之,这篇文章解释了如何在GKE集群上部署[Prometheus]。我希望你喜欢这个实用的指导。