在本教程的前兩部分,我們分別了解和學(xué)習(xí)了Prometheus 和 Grafana 的基本概念和使用的前提條件,以及使用 Helm 在 Kubernetes 上安裝 Prometheus。
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-814404.html
在今天的教程中,我們將為你介紹以下內(nèi)容:
?
- 安裝 Grafana;
- 集成 Prometheus 和 Grafana,Grafana 將使用 Prometheus 作為數(shù)據(jù)源;
- 使用 Grafana 創(chuàng)建用于監(jiān)控和觀察 Kubernetes 集群的控制面板。
?
安裝 Grafana
安裝時(shí),我們遵循與安裝 Prometheus 相同的步驟:
?
搜索 Grafana Helm Chart
要搜索 Prometheus Helm Chart,請(qǐng)運(yùn)行以下命令:
?
helm search hub grafana
?
您還可以訪問(wèn) ArtifactHub 存儲(chǔ)庫(kù)并搜索官方 Grafana Helm Chart,如下圖所示:
?
?
要獲取此 Grafana Helm Chart,請(qǐng)運(yùn)行以下命令:
?
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
?
輸出結(jié)果:
?
?
在 Kubernetes 集群上安裝 Grafana Helm Chart
運(yùn)行此 helm install
命令:
?
helm install grafana grafana/grafana
?
輸出結(jié)果:
?
?
現(xiàn)在,我們已經(jīng)在 Kubernetes 集群上安裝了 Grafana。我們可以通過(guò)端口 80 訪問(wèn) Grafana 服務(wù)器。下一步是訪問(wèn)并啟動(dòng) Grafan 應(yīng)用程序。您將使用 Grafana 的 Kubernetes 服務(wù)訪問(wèn)該應(yīng)用程序。要獲取 Grafana 的所有 Kubernetes 服務(wù),請(qǐng)運(yùn)行以下命令:
?
kubectl get service
?
輸出結(jié)果:
?
?
我們將使用 grafana
Kubernetes 服務(wù)來(lái)訪問(wèn) Grafana 應(yīng)用程序。grafana
Kubernetes 服務(wù)也是 ClusterIP
類型。您只能從 Kubernetes 集群內(nèi)部訪問(wèn)它。我們需要公開(kāi)這個(gè) Kubernetes 服務(wù),以便在 Kubernetes 集群外部訪問(wèn)它。
?
公開(kāi) grafana Kubernetes 服務(wù)
kubectl expose service grafana --type=NodePort --target-port=3000 --name=grafana-ext
?
此命令會(huì)將 ClusterIP
類型轉(zhuǎn)換為 NodePort
類型。這樣grafana
可以通過(guò)端口 3000
在 Kubernetes 集群外部訪問(wèn)?,F(xiàn)在我們已經(jīng)公開(kāi)了grafana
Kubernetes 服務(wù)。讓我們使用以下命令訪問(wèn) grafana
應(yīng)用程序:
?
minikube service grafana-ext
?
該命令生成以下 URL:
?
?
URL 可能需要一些時(shí)間才能可用。您需要在瀏覽器上重試幾次,直到使用此 URL 訪問(wèn) Grafana Kubernetes 應(yīng)用程序。您還需要保持終端打開(kāi)并運(yùn)行命令,以便繼續(xù)訪問(wèn)服務(wù)。
?
?
上圖顯示的是 Grafana 登錄頁(yè)面。要獲取 admin 的密碼,請(qǐng)?jiān)谛陆K端上運(yùn)行以下命令。
?
kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
?
注意:您需要打開(kāi)一個(gè)新終端來(lái)運(yùn)行此過(guò)程,以便 Grafana 保持運(yùn)行。
?
登錄 Grafana
要登錄 Grafana,請(qǐng)輸入 admin
作為用戶名和生成的密碼。它將啟動(dòng) Welcome to Grafana
主頁(yè),如下所示:
?
?
要將 Prometheus 添加為數(shù)據(jù)源,請(qǐng)按照以下步驟操作:
?
- 在歡迎頁(yè)面上,單擊
Add your first data source
:
?
?
- 選擇
Prometheus
作為數(shù)據(jù)源:
?
?
- 然后,添加運(yùn)行 Prometheus 應(yīng)用程序的 URL。這是我們之前運(yùn)行
minikube service prometheus-server-ext
時(shí)顯示的第一個(gè) URL(集群內(nèi)部)。
?
?
- 點(diǎn)擊 "Save & test "保存更改。
?
這樣,您就完成了在 Kubernetes 上將 Prometheus 和 Grafana 與 Helm 集成的工作。
?
最后一步,是創(chuàng)建 Grafana 控制面板。這將幫助我們可視化 Kubernetes 集群指標(biāo)。
?
Grafana 控制面板
如前所述,您可以選擇從頭開(kāi)始創(chuàng)建控制面板。您還可以導(dǎo)入 Grafana 已經(jīng)提供模板。在本節(jié)中,我們將導(dǎo)入一個(gè) Grafana Dashborad。
?
要導(dǎo)入 Grafana 控制面板,請(qǐng)按照以下步驟操作:
?
- 從 Grafana 公共控制面板庫(kù)中獲取 Grafana 控制面板 ID
?
?
- 在此網(wǎng)頁(yè)上,搜索 Kubernetes:
?
?
- 滾動(dòng)直到找到 Kubernetes 集群監(jiān)控(通過(guò) Prometheus)控制面板:
?
?
- 選擇控制面板并復(fù)制控制面板 ID:
?
?
- 回到Grafana,點(diǎn)擊左上角Home:
?
?
- 在菜單上,單擊
Dashboards
:
?
?
- 單擊
New
:
?
?
屏幕上會(huì)顯示三個(gè)選項(xiàng): New Dashboard
, New Folder
和Import
。
?
- 單擊
Import
:
?
?
- 添加 Grafana ID:添加已復(fù)制的 Grafana ID,然后單擊
Load
。Grafana ID 是 315。
?
?
- 選擇 Promethues 數(shù)據(jù)源并單擊
Import
:
?
?
- 它將啟動(dòng)如下所示的控制面板:
?
?
您可以使用此控制面板來(lái)監(jiān)視和觀察 Kubernetes 集群指標(biāo)。它顯示以下 Kubernetes 集群指標(biāo):
?
- 網(wǎng)絡(luò) I/O 壓力
- 集群 CPU 使用率
- 集群內(nèi)存使用情況
- 集群文件系統(tǒng)使用情況
- Pod CPU 使用率
?
附加步驟
將 Prometheus 和 Grafana 部署到 Azure Kubernetes 服務(wù) (AKS) 等基于云的生產(chǎn)集群時(shí),需要執(zhí)行以下操作。
?
為 Prometheus 創(chuàng)建持久卷
持久卷資源用于管理集群中的持久和永久存儲(chǔ)。管理員提供一個(gè)持久卷以明確存儲(chǔ)數(shù)據(jù)。它可以將數(shù)據(jù)存儲(chǔ)在:
?
- 本地計(jì)算機(jī)
- 網(wǎng)絡(luò)共享
- 云供應(yīng)商提供的 block 存儲(chǔ)卷
?
無(wú)論 Kubernetes 應(yīng)用程序、pod、應(yīng)用程序容器甚至 kubernetes 集群本身的生命周期/狀態(tài)如何,持久卷數(shù)據(jù)都會(huì)持續(xù)保存。下面的示例代碼展示了如何創(chuàng)建持久卷以保留應(yīng)用程序數(shù)據(jù):
?
apiVersion: v1
kind: PersistentVolume
metadata:
name: pvc-prometheus-migration-prometheus-0
spec:
accessModes:
- ReadWriteOnce
azureDisk:
cachingMode: None
diskName: pvc-prometheus-migration-prometheus-0
diskURI: /subscriptions/f5125d82-2622-4c50-8d25-3f7ba3e9ac4b/resourceGroups/sample-migration-resource-group/providers/Microsoft.Compute/disks/pvc-prometheus-migration-prometheus-0
fsType: ""
kind: Managed
readOnly: false
capacity:
storage: 1Gi
persistentVolumeReclaimPolicy: Delete
storageClassName: prometheus
volumeMode: Filesystem
?
您將創(chuàng)建一個(gè)新的 .yaml
文件并添加上面的代碼,此代碼將在服務(wù)重新啟動(dòng)之間保留您的數(shù)據(jù)。
?
要將持久卷添加到集群,請(qǐng)運(yùn)行以下命令:
?
kubectl apply -f prometheus-persistent-volume.yaml
?
用于 Prometheus 的 PVC
PVC(Persistent Volume Claim)表示 pod 為獲得實(shí)際塊存儲(chǔ)而提出的數(shù)據(jù)存儲(chǔ)請(qǐng)求。PVC 消耗 Persistent Volume 數(shù)據(jù)資源。
?
PVC 可以請(qǐng)求特定的數(shù)據(jù)大小和訪問(wèn)模式。下面的示例代碼顯示了如何創(chuàng)建持久卷請(qǐng)求以訪問(wèn)持久卷:
?
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app.kubernetes.io/name: prometheus
prometheus: prometheus-migration-prometheus
name: prometheus-prometheus-migration-prometheus-db-prometheus-prometheus-migration-prometheus-0
namespace: monitoring
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: prometheus
volumeMode: Filesystem
volumeName: pvc-prometheus-migration-prometheus-0
?
要將 PVC 添加到群集,請(qǐng)運(yùn)行此命令:
?
kubectl apply -f prometheus-persistent-volume-claim.yaml
?
為 Grafana 創(chuàng)建持久卷和 PVC
以下示例代碼將為 Grafana 創(chuàng)建持久卷:
?
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-grafana-storage
namespace: monitoring
labels:
type: nfs
spec:
storageClassName: managed-nfs
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
server: (your Production prometheus)
path: "/mnt/nfs/grafana-storage"
?
要將 PVC 添加到集群,請(qǐng)運(yùn)行以下命令:
?
kubectl apply -f grafana-persistent-volume-claim.yaml
?
配置 Prometheus RBAC 權(quán)限
在將 Prometheus 和 Grafana 部署到生產(chǎn)環(huán)境之前,您將使用 ClusterRole 配置 RBAC 權(quán)限。然后,使用 ClusterRoleBinding 對(duì)象將此 ClusterRole 綁定到 ServiceAccount。
?
配置 Prometheus RBAC 權(quán)限的示例 yaml
代碼
?
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: prometheus
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/v1beta1
kind: ClusterRoleBinding
metadata:
name: prometheus
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: prometheus
subjects:
- kind: ServiceAccount
name: prometheus
namespace: default
?
要將 RBAC 權(quán)限添加到集群,請(qǐng)運(yùn)行以下命令:
?
kubectl apply -f rbac-permissions.yaml
?
創(chuàng)建 Prometheus Kubernetes 服務(wù)
Prometheus Kubernetes 服務(wù)將公開(kāi)正在運(yùn)行的 Prometheus 應(yīng)用程序,以允許外部訪問(wèn)。
?
創(chuàng)建 Prometheus Kubernetes 服務(wù)的 YAML 示例:
?
apiVersion: v1
kind: Service
metadata:
name: prometheus
labels:
app: prometheus
spec:
ports:
- name: web
port: 9090
targetPort: 80
selector:
app.kubernetes.io/name: prometheus
sessionAffinity: ClientIP
?
要將 Prometheus 服務(wù)添加到集群,請(qǐng)運(yùn)行以下命令:
?
kubectl apply -f prometheus-service.yaml
?
創(chuàng)建 Grafana Kubernetes 服務(wù)
Prometheus Kubernetes 服務(wù)將公開(kāi)正在運(yùn)行的 Grafana 應(yīng)用程序,以允許外部訪問(wèn) Grafana 控制面板。
?
用于創(chuàng)建 Grafana Kubernetes 服務(wù)的示例 YAML:
?
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: monitoring
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '3000'
spec:
selector:
app: grafana
type: NodePort
ports:
- port: 3000
targetPort: 80
nodePort: 32000
?
要將 Grafana 服務(wù)添加到集群,請(qǐng)運(yùn)行以下命令:
?
kubectl apply -f grafana-service.yaml
?
完成這些附加步驟后,您就可以在生產(chǎn)中運(yùn)行 Prometheus 和 Grafana 了。
?
總結(jié)
在本期教程中,我們帶您一起學(xué)習(xí)了如何使用 Helm 在 Kubernetes 上集成 Prometheus 和 Grafana。此外,還詳細(xì)介紹了如何在 Grafana 上創(chuàng)建一個(gè)簡(jiǎn)單的控制面板,以便跟蹤 Kubernetes 集群上的資源和性能指標(biāo)。為了更好地跟蹤 Kubernetes 集群和微服務(wù)性能,監(jiān)控至關(guān)重要。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-814404.html
到了這里,關(guān)于如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 3的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!