使用Helm在k3s上安装Prometheus
我最近正在搭建一个用于学习的k3s集群,并尝试使用Helm安装Prometheus。我正在尝试使用kube-prometheus-stack,并且对kube-prometheus-stack和Prometheus Operator之间的关系不太了解。
1.软件构建
在AWS上建立了一个由4个实例组成的k3s集群的配置
Debian GNU/Linux 11
k3s版本v1.23.8+k3s1 (53f2d4e7)
go版本go1.17.5
Longhorn版本v1.3.0
2. 引入程序
我将添加prometheus-community的存储库。
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
获取values文件。
helm inspect values prometheus-community/kube-prometheus-stack > prometheus_values.yaml
根据您的偏好修改values文件(详见后文)。
修改values文件后,创建命名空间后执行helm install。
kubectl create ns prometheus
helm install prometheus -f .\prometheus_values.yaml prometheus-community/kube-prometheus-stack -n prometheus
3.values文件的更改点
这次,我试着做了以下更改。
首先,我取消了以下三处的注释,改用了longhorn来实现数据持久化。
alertmanager:
alertmanagerSpec:
storage:
volumeClaimTemplate:
spec:
storageClassName: longhorn
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
#selector: {}
prometheus:
prometheusSpec:
## Prometheus StorageSpec for persistent data
## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/user-guides/storage.md
##
storageSpec:
## Using PersistentVolumeClaim
##
volumeClaimTemplate:
spec:
storageClassName: longhorn
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
#selector: {}
thanosRuler:
thanosRulerSpec:
storage:
volumeClaimTemplate:
spec:
storageClassName: longhorn
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
#selector: {}
另外,我們可以通過指定標籤(label)來選擇nodeSelector,以便將pod放置在合適的節點上。由於剛好我們指定了名為longhorn-node的節點,因此我們直接使用了它。但實際上,或許為了prometheus配置,我們應該提前創建一個不同的標籤(label)。
nodeSelector:
longhorn-node: 'true'
此外,在提取的values文件中并没有grafana和kube-state-metrics用于nodeSelector的选项。尽管如此,根据链接的问题所述,“如果添加了这些选项,它将正常工作”,因此我会进行添加。
grafana:
#add nodeSelector
nodeSelector:
longhorn-node: 'true'
kube-state-metrics:
#add nodeSelector
nodeSelector:
longhorn-node: 'true'
四、访问用户界面(UI)

grafana:
adminPassword: prom-operator
但是Lens很方便啊。
总结
我使用kube-prometheus-stack将Prometheus、Grafana等整套工具引入了k3s。为了数据持久化,我选择使用了Longhorn。同时,我还尝试使用nodeSelector来指定运行Prometheus等的节点。在界面访问方面,我尝试通过使用Lens来轻松实现。
然而,我对于 Prometheus 或者 k3s 中应该查看哪些参数并不清楚。看来我还需要更多的学习,作为一个初学者,我想以这样一句话来结束这篇文章。