在我的关于混沌工程的介绍性文章中,我主要涵盖的一件事是了解您的工作 Kubernetes 集群的稳态的重要性。在您可以开始制造混沌之前,您需要知道集群在稳态下是什么样的。
本文将介绍如何使用 Prometheus 获取这些指标 和 Grafana。本教程还使用 Pop!_OS 20.04、Helm 3、Minikube 1.14.2 和 Kubernetes 1.19。
配置 Minikube
安装 Minikube,选择适合您环境的方式。如果您有足够的资源,我建议为您的虚拟机分配比默认内存和 CPU 功率更多的资源
$ minikube config set memory 8192
❗ These changes will take effect upon a minikube delete and then a minikube start
$ minikube config set cpus 6
❗ These changes will take effect upon a minikube delete and then a minikube start
然后启动并检查您的系统状态
$ minikube start
? minikube v1.14.2 on Debian bullseye/sid
? minikube 1.19.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.19.0
? To disable this notice, run: 'minikube config set WantUpdateNotification false'
✨ Using the docker driver based on user configuration
? Starting control plane node minikube in cluster minikube
? Creating docker container (CPUs=6, Memory=8192MB) ...
? Preparing Kubernetes v1.19.0 on Docker 19.03.8 ...
? Verifying Kubernetes components...
? Enabled addons: storage-provisioner, default-storageclass
? Done! kubectl is now configured to use "minikube" by default
$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
安装 Prometheus
集群设置完成后,开始安装。首先按照以下说明安装 Prometheus。
首先,在 Helm 中添加存储库
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
"prometheus-community" has been added to your repositories
然后安装您的 Prometheus Helm chart。您应该看到
$ helm install prometheus prometheus-community/prometheus
NAME: prometheus
LAST DEPLOYED: Sun May 9 11:37:19 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-server.default.svc.cluster.local
通过在同一 shell 中运行以下命令获取 Prometheus 服务器 URL
export POD_NAME=$(kubectl get pods --namespace default -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace default port-forward $POD_NAME 9090
您可以从集群内部通过此 DNS 名称上的端口 80 访问 Prometheus Alertmanager
prometheus-alertmanager.default.svc.cluster.local
通过在同一 shell 中运行以下命令获取 Alertmanager URL
export POD_NAME=$(kubectl get pods --namespace default -l "app=prometheus,component=alertmanager" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace default port-forward $POD_NAME 9093
#################################################################################
###### WARNING: Pod Security Policy has been moved to a global property. #####
###### use .Values.podSecurityPolicy.enabled with pod-based #####
###### annotations #####
###### (e.g. .Values.nodeExporter.podSecurityPolicy.annotations) #####
#################################################################################
您可以从集群内部通过此 DNS 名称上的端口 9091 访问 Prometheus PushGateway
prometheus-pushgateway.default.svc.cluster.local
通过在同一 shell 中运行以下命令获取 PushGateway URL
export POD_NAME=$(kubectl get pods --namespace default -l "app=prometheus,component=pushgateway" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace default port-forward $POD_NAME 9091
For more information on running Prometheus, visit:
https://prometheus.ac.cn/
检查以确认您的 Pod 正在运行
$ kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
prometheus-alertmanager-ccf8f68cd-hcrqr 2/2 Running 0 3m22s
prometheus-kube-state-metrics-685b975bb7-mhv54 1/1 Running 0 3m22s
prometheus-node-exporter-mfcwj 1/1 Running 0 3m22s
prometheus-pushgateway-74cb65b858-7ffhs 1/1 Running 0 3m22s
prometheus-server-d9fb67455-2g2jw 2/2 Running 0 3m22s
接下来,在 Prometheus 服务器 Pod 上公开您的端口,以便您可以看到 Prometheus Web 界面。为此,您需要服务名称和端口。您还需要想出一个名称,以便使用 Minikube 服务命令打开服务。
获取 prometheus-server
的服务名称
$ kubectl get svc -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13m
prometheus-alertmanager ClusterIP 10.106.68.12 <none> 80/TCP 8m22s
prometheus-kube-state-metrics ClusterIP 10.104.167.239 <none> 8080/TCP 8m22s
prometheus-node-exporter ClusterIP None <none> 9100/TCP 8m22s
prometheus-pushgateway ClusterIP 10.99.90.233 <none> 9091/TCP 8m22s
prometheus-server ClusterIP 10.103.195.104 <none> 9090/TCP 8m22s
将服务公开为 Node-port
类型。提供目标端口 9090
和您想要调用的服务器名称。节点端口是服务器监听端口。这是 Helm chart 的摘录
## Port for Prometheus Service to listen on
##
port: 9090
命令是
$ kubectl expose service prometheus-server --type=NodePort --target-port=9090 --name=prom-server
service/prom-server exposed
接下来,您需要 Minikube 打开服务和浏览器
jess@Athena:~$ minikube service prom-server
|-----------|-------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-------------|-------------|---------------------------|
| default | prom-server | 80 | http://192.168.49.2:32169 |
|-----------|-------------|-------------|---------------------------|
? Opening service default/prom-server in default browser...
您的浏览器应该打开并显示 Prometheus 服务。

(Jess Cherry, CC BY-SA 4.0)
恭喜!您现在已经在您的集群上安装了 Prometheus。
安装 Grafana
接下来,安装 Grafana 并将其配置为与 Prometheus 一起工作。按照以下步骤公开服务以配置 Grafana 并从 Prometheus 收集数据,以收集您的稳态。
首先获取您的 Helm chart
$ helm repo add grafana https://grafana.github.io/helm-charts
"grafana" has been added to your repositories
搜索您的 chart
$ helm search repo grafana
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/grafana 5.2.11 7.5.5 Grafana is an open source, feature rich metrics...
bitnami/grafana-operator 0.6.5 3.10.0 Kubernetes Operator based on the Operator SDK f...
grafana/grafana 6.9.0 7.5.5 The leading tool for querying and visualizing t...
stable/grafana 5.5.7 7.1.1 DEPRECATED - The leading tool for querying and ...
由于 stable/grafana 已被弃用,请安装 bitnami/grafana。然后安装您的 chart
helm install grafana bitnami/grafana
NAME: grafana
LAST DEPLOYED: Sun May 9 12:09:53 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **
- 通过运行以下命令获取应用程序 URL
echo "Browse to http://127.0.0.1:8080" kubectl port-forward svc/grafana 8080:3000 &
- 获取管理员凭据
echo "User: admin" echo "Password: $(kubectl get secret grafana-admin --namespace default -o jsonpath="{.data.GF_SECURITY_ADMIN_PASSWORD}" | base64 --decode)"
正如您在 Helm 安装输出中看到的那样,Grafana 的目标端口是 3000,因此您将使用该端口公开服务以查看 Grafana 的 Web 前端。在公开服务之前,请确认您的服务正在运行
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default grafana-6b84bbcd8f-xt6vd 1/1 Running 0 4m21s
公开服务
$ kubectl expose service grafana --type=NodePort --target-port=3000 --name=grafana-server
service/grafana-server exposed
启用服务以使用 Minikube 服务打开浏览器
jess@Athena:~$ minikube service grafana-server
|-----------|----------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|----------------|-------------|---------------------------|
| default | grafana-server | 3000 | http://192.168.49.2:30549 |
|-----------|----------------|-------------|---------------------------|
? Opening service default/grafana-server in default browser...
您将看到欢迎屏幕,您可以在其中登录。

(Jess Cherry, CC BY-SA 4.0)
使用 kubectl 设置凭据以登录 Grafana。命令出现在安装的输出中;以下是正在使用的命令
$ echo "User: admin"
User: admin
$ echo "Password: $(kubectl get secret grafana-admin --namespace default -o jsonpath="{.data.GF_SECURITY_ADMIN_PASSWORD}" | base64 --decode)"
Password: G6U5VeAejt
使用您的新凭据登录,您将看到 Grafana 仪表板。

(Jess Cherry, CC BY-SA 4.0)
恭喜!您现在已经在您的 Minikube 集群中安装了可工作的 Grafana,并且可以登录。下一步是将 Grafana 配置为与 Prometheus 一起工作,以收集数据并显示您的稳态。
使用 Prometheus 配置 Grafana
现在您可以登录到您的 Grafana 实例,您需要设置数据收集和仪表板。由于这是一个完全基于 Web 的配置,我将通过屏幕截图来介绍设置过程。首先添加您的 Prometheus 数据收集。单击显示屏左侧的齿轮图标以打开配置设置,然后选择数据源。

(Jess Cherry, CC BY-SA 4.0)
在下一个屏幕上,单击添加数据源。

(Jess Cherry, CC BY-SA 4.0)
选择 Prometheus。

(Jess Cherry, CC BY-SA 4.0)
由于您已将 Prometheus 实例配置为在端口 80 上公开,请使用服务名称 prometheus-server 和服务器端口 80。

(Jess Cherry, CC BY-SA 4.0)
滚动到屏幕底部,然后单击保存并测试,保存并测试您的新数据源。您应该看到一个绿色横幅,显示数据源工作正常。

(Jess Cherry, CC BY-SA 4.0)
返回页面顶部,然后单击仪表板。

(Jess Cherry, CC BY-SA 4.0)
导入所有三个仪表板选项。

(Jess Cherry, CC BY-SA 4.0)
单击左侧的放大镜图标以确认已导入所有三个仪表板。

(Jess Cherry, CC BY-SA 4.0)
现在一切都已配置完成,单击 Prometheus 2.0 Stats,您应该看到类似于这样的内容。

(Jess Cherry, CC BY-SA 4.0)
恭喜!您已经设置了从 Prometheus 收集有关您的集群的基本数据收集。
导入更多监控仪表板
您可以从 Grafana Labs 的 社区仪表板 集合中导入其他更详细的仪表板。我为这个快速教程选择了两个我最喜欢的仪表板:Dash-minikube 和 Kubernetes Cluster Monitoring。
要导入仪表板,您需要从仪表板集合中获取其 ID。首先,单击左侧的加号 (+) 以创建仪表板,然后单击下拉列表中的导入,并输入 ID。对于 Dash-minikube,其 ID 为 10219。

(Jess Cherry, CC BY-SA 4.0)

(Jess Cherry, CC BY-SA 4.0)
单击加载,然后在下一个屏幕上输入数据源。由于这使用 Prometheus,请输入您的 Prometheus 数据源。

(Jess Cherry, CC BY-SA 4.0)
单击导入,新的仪表板将出现。

(Jess Cherry, CC BY-SA 4.0)
现在您有了一个新的仪表板来跟踪您的 Minikube 统计信息。如果您使用 Kubernetes Cluster Monitoring(ID 2115)按照相同的步骤操作,您将看到一个更详细的监控仪表板。

(Jess Cherry, CC BY-SA 4.0)
现在您可以使用 Grafana 和 Prometheus 数据收集和可视化来跟踪您的稳态。
最终想法
借助这些开源工具,您可以收集集群的稳态并保持对其良好脉搏的掌握。这在混沌工程中非常重要,因为它允许您检查破坏性、不稳定状态下的所有内容,并使用该数据来测试您关于在中断期间其状态可能发生什么情况的假设。
评论已关闭。