使用 Prometheus 和 Grafana 监控 AKS
部署任何类型的 Kubernetes 环境时,甚至在部署之前,就应该考虑制定监控和可观测性计划。这样,一旦环境中出现任何问题,您都能全面了解情况,并能以自动化、可重复的方式采取相应措施,必要时还可以手动操作。
在这篇博文中,您将学习如何在 Azure Kubernetes 服务 (AKS) 上设置两种最流行的监控和可观测性工具。
为什么需要监控和可观测性?
首先,我们来谈谈监控和可观测性之间的区别。监控是指您可以实时或根据工具/平台允许的时间范围来查看环境中正在发生的事情。您通常还可以根据监控阈值创建警报。例如,如果 CPU 使用率超过 90% 并持续五分钟。
可观测性的核心在于利用从环境中采集的数据采取行动。它分析日志、指标和追踪信息。例如,/metrics如果 Kubernetes 集群启用了 API,就可以采集数据。然后,如果日志、指标或追踪信息中出现异常,可观测性工具就可以采取行动。这些行动可以是像监控工具那样发出警报,也可以是采取自动化的方式。例如,如果三个工作节点几乎满负荷运转,可观测性工具可以检测到这一点,并自动扩展到四个节点,而无需您进行任何手动干预。
简而言之,监控是指实时查看数据,而可观测性是指在不必实时查看数据的情况下根据数据采取行动。
指标服务器
使用可观测性工具从 Kubernetes 收集指标时,需要注意的一点是确保指标服务器正在运行。默认情况下,指标服务器可能并未运行。例如,本地部署的 Kubernetes 集群可能需要手动启用它。而在 AKS 中,指标服务器默认开启,因此您无需担心。
设置 AKS
要部署 AKS 集群,您可以使用以下几种方法:
- 通过门户网站(手动)
- 一种基础设施即代码工具(自动化)
如果您没有 AKS 集群,可以使用此处的代码:https://github.com/AdminTurnedDevOps/Kubernetes-Quickstart-Environments/tree/main/azure/aks
上述 GitHub 仓库中的代码是用于创建 AKS 集群的 Terraform 配置。
如果您没有使用过 Terraform 并且不熟悉它,您可以使用 Azure UI 或其他自动化方法在 AKS 服务下创建 AKS 集群。
一旦您的 AKS 环境启动并运行,请确保使用以下命令连接到它,该命令会在本地启动 Kubeconfig,以便您可以在终端上访问 AKS 集群。
az aks get-credentials -n name_of_k8s_cluster -g resource_group_name
设置 Grafana 和 Prometheus
现在集群已经启动并运行,接下来需要安装 Grafana 和 Prometheus。安装方法有很多种,包括分别安装 Grafana 和 Prometheus,以及将它们安装在不同的服务器上,也可以使用适用于 Kubernetes 的 Prometheus-Operator。
在这种情况下,您将使用一种流行的方法,即 prometheus-community Helm Chart。
如果您还没有安装 Helm,可以从这里安装:https://helm.sh/docs/intro/install/
💡 我有一个关于 Helm 的在线培训课程,如果你有兴趣可以看看:https://www.oreilly.com/live-events/helm-charts-with-kubernetes/0636920074683/0636920074682/
首先,添加 Prometheus 和 Grafana 的 Helm 仓库。
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
接下来,请确保代码库是最新的。
helm repo update
最后一步是在名为 的新命名空间中安装 Helm Chart monitoring。
helm install prometheus \
prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace
你应该会看到类似下图的输出结果。
您可以通过运行以下命令来检查堆栈是否已部署。
kubectl get all -n monitoring
你应该看到以下输出。
NAME READY STATUS RESTARTS AGE
pod/alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 1 (39s ago) 71s
pod/prometheus-grafana-5fcf8745df-lnnn7 3/3 Running 0 98s
pod/prometheus-kube-prometheus-operator-78fdf6678c-xwxm9 1/1 Running 0 98s
pod/prometheus-kube-state-metrics-65997fd766-tbkdm 1/1 Running 0 98s
pod/prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 0 70s
pod/prometheus-prometheus-node-exporter-tbmm6 1/1 Running 0 98s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 71s
service/prometheus-grafana ClusterIP 10.0.44.237 <none> 80/TCP 98s
service/prometheus-kube-prometheus-alertmanager ClusterIP 10.0.242.19 <none> 9093/TCP 98s
service/prometheus-kube-prometheus-operator ClusterIP 10.0.84.154 <none> 443/TCP 98s
service/prometheus-kube-prometheus-prometheus ClusterIP 10.0.237.68 <none> 9090/TCP 98s
service/prometheus-kube-state-metrics ClusterIP 10.0.120.173 <none> 8080/TCP 98s
service/prometheus-operated ClusterIP None <none> 9090/TCP 70s
service/prometheus-prometheus-node-exporter ClusterIP 10.0.182.255 <none> 9100/TCP 98s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/prometheus-prometheus-node-exporter 1 1 1 1 1 <none> 98s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/prometheus-grafana 1/1 1 1 98s
deployment.apps/prometheus-kube-prometheus-operator 1/1 1 1 98s
deployment.apps/prometheus-kube-state-metrics 1/1 1 1 98s
NAME DESIRED CURRENT READY AGE
replicaset.apps/prometheus-grafana-5fcf8745df 1 1 1 98s
replicaset.apps/prometheus-kube-prometheus-operator-78fdf6678c 1 1 1 98s
replicaset.apps/prometheus-kube-state-metrics-65997fd766 1 1 1 98s
NAME READY AGE
statefulset.apps/alertmanager-prometheus-kube-prometheus-alertmanager 1/1 71s
statefulset.apps/prometheus-prometheus-kube-prometheus-prometheus 1/1 70s
登录 Grafana 和 Prometheus
Helm Chart 的功能之一是为 Grafana 和 Prometheus 创建 Kubernetes 服务。要访问它们,您需要在两个不同的终端中运行以下命令。
首先,揭露 Grafana。
kubectl port-forward svc/prometheus-grafana -n monitoring 4000:80
Grafana 的默认用户名/密码是 admin/prom-operator。
接下来,揭露普罗米修斯的真面目。
kubectl port-forward svc/prometheus-kube-prometheus-prometheus -n monitoring 4001:9090
一旦你能够访问这两个用户界面,点击看起来像四个方块的图标,进入 Grafana 控制面板。
接下来,点击 Pods 的仪表盘。
将命名空间更改为kube-system,您将看到在该命名空间中运行的所有 Pod。
部署应用程序
如上图所示,Grafana 显示的是开箱即用的 Pod 已被成功摄取数据,但未来部署的 Pod 呢?让我们来看看如何确认这一点。
部署以下 Kubernetes 清单,它将部署一个无状态的 Nginx Web 应用程序。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginxdeployment
replicas: 2
template:
metadata:
labels:
app: nginxdeployment
spec:
containers:
- name: nginxdeployment
image: nginx:latest
ports:
- containerPort: 80
接下来,返回到上一节中打开的 Pods 控制面板,但现在将命名空间更改为default.
几秒钟后,您会看到两个 Nginx Pod 出现。
恭喜!您已成功配置 Prometheus 和 Grafana。您还学习了如何通过确认 Pod 正在运行,来利用 Prometheus 指标确认应用数据导入是否正常工作。
文章来源:https://dev.to/thenjdevopsguy/monitoring-aks-with-prometheus-and-grafana-9o8







