各位读者大家好,我将介绍如何在GKE集群上部署Prometheus的细节。
场景
在一个GKE集群中,有一个应用程序正在运行,该应用程序需要被监控。
普罗米修斯
普罗米修斯是一个开源的系统监控和警报工具集,由SoundCloud创建。
自2012年推出以来,Prometheus已经被一些企业和组织使用,该项目拥有一个繁荣的开发者和用户社区。
它现在是一个自主的开源项目,不受任何特定企业的维护。
普罗米修斯是继Kubernetes之后的第二个托管项目,在2016年加入了云原生计算基金会,以强调这一点,并使项目的治理结构清晰。
普罗米修斯以时间序列数据的形式收集和存储其指标,这意味着有关指标的信息与捕获它的时间戳和称为标签的可选键值对一起保存。
前提条件
创建一个K8s集群
- 在创建你的集群后,你需要获得认证凭证来与集群互动
- 一个部署在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的仪表盘,并按照给定的步骤操作。
- 进入设置
- 点击 "数据源
- 点击 "添加数据源"
- 名称:普罗米修斯
- URL:设置适当的Prometheus服务器URL
- 根据需要调整其他数据源设置(例如,选择正确的访问方法)。点击 "Save & Test "来保存新的数据源。
总结
总之,这篇文章解释了如何在GKE集群上部署[Prometheus]。我希望你喜欢这个实用的指导。