如何为Kubernetes监控设置TOBS(可观察性堆栈)
介绍
TOBS 是 The Observability Stack 的缩写,是监控工具和仪表板界面的预打包发行版,可以安装到任何现有的 Kubernetes 集群中。 它包括许多以 Prometheus 和 Grafana 为基准的最流行的开源可观察性工具,包括 Promlens、TimescaleDB、Alertmanager 等。 它们共同提供了一个简单、可维护的解决方案,用于分析服务器流量并识别大规模部署中的任何潜在问题。
TOBS 使用标准 Kubernetes Helm 图表 来配置和更新部署。 它可以安装到任何 Kubernetes 集群中,但是如果您运行 kubectl
从本地机器而不是远程节点管理集群,它可以更有效地演示。 DigitalOcean 的 Managed Kubernetes 默认会为你提供这样的配置。
在本教程中,您将把 TOBS 安装到现有的 Kubernetes 集群中,并学习如何更新、配置和浏览其组件仪表板。
先决条件
要遵循本教程,您将需要:
- 启用了 基于角色的访问控制 (RBAC) 的 Kubernetes 集群。 此设置将使用 DigitalOcean Kubernetes 集群,但您可以使用 另一种方法 自由创建集群。 您的 Kubernetes 版本应匹配 支持的 TOBS 版本。
kubectl
命令行工具安装在您的本地机器上并配置为连接到您的集群。 您可以在官方文档中阅读更多关于安装kubectl
的信息。 如果您使用的是 DigitalOcean Kubernetes 集群,请参考 如何连接到 DigitalOcean Kubernetes 集群 了解如何使用kubectl
连接到您的集群。
第 1 步 — 验证您的 Kubernetes 配置
为了安装 TOBS,您应该首先使用 kubectl
设置有效的 Kubernetes 配置,您可以从中 ping 您的工作节点。 您可以通过运行 kubectl get nodes
来测试它:
kubectl get nodes
如果 kubectl
能够连接到您的 Kubernetes 集群并且它按预期启动并运行,则此命令将返回具有 Ready
状态的节点列表:
OutputNAME STATUS ROLES AGE VERSION pool-uqv8a47h0-ul5a7 Ready <none> 22m v1.21.5 pool-uqv8a47h0-ul5am Ready <none> 21m v1.21.5 pool-uqv8a47h0-ul5aq Ready <none> 21m v1.21.5
如果成功,您可以继续 Step 2。 如果没有,您应该查看配置详细信息是否有任何问题。
默认情况下,kubectl
将在 ~/.kube/config
中查找文件以了解您的环境。 为了验证这个文件存在并且包含有效的 YAML 语法,你可以在它上面运行 head
来查看它的前几行,我:
head ~/.kube/config
OutputapiVersion: v1 clusters: - cluster: certificate-authority-data: …
如果该文件不存在,请确保您以与配置 Kubernetes 的用户相同的用户身份登录。 ~/
路径反映了各个用户的主目录,Kubernetes 配置默认为每个用户保存。
如果您使用的是 DigitalOcean 的托管 Kubernetes,请确保您在设置集群后已运行 doctl kubernetes cluster kubeconfig save
命令,以便您的本地机器可以对其进行身份验证。 这将创建一个 ~/.kube/config
文件:
doctl kubernetes cluster kubeconfig save your-cluster-name
如果您使用本机访问多个集群,您应该查看 Kubernetes 文档 关于使用环境变量和多个配置文件以避免冲突。 配置 kubectl
环境后,您可以继续下一步安装 TOBS。
第 2 步 — 安装 TOBS 并测试您的端点
TOBS 包括以下组件:
- Prometheus 是一个时间序列数据库和监控工具,它通过轮询指标端点并抓取和处理这些端点公开的数据来工作。 它允许您使用时间序列数据查询语言 PromQL 来查询这些数据。
- Alertmanager,通常与 Prometheus 一起部署,形成堆栈的警报层,处理 Prometheus 生成的警报,并对它们进行重复数据删除、分组和路由到电子邮件或 PagerDuty 等集成。 要了解有关 Alertmanager 的更多信息,请参阅有关警报 的 Prometheus 文档。
- Grafana 是一种数据可视化和分析工具,可让您为指标数据构建仪表板和图表。
- kube-state-metrics 是一个附加代理,它监听 Kubernetes API 服务器并生成有关 Kubernetes 对象(如 Deployment 和 Pod)状态的指标。 这些指标在 HTTP 端点上以明文形式提供,并由 Prometheus 使用。
- 最后是 node-exporter,一个运行在集群节点上的 Prometheus 导出器,并为 Prometheus 提供操作系统和硬件指标,例如 CPU 和内存使用情况。 这些指标也作为 HTTP 端点上的明文提供,并由 Prometheus 使用。
为了安装 TOBS,您首先需要在您的控制平面上运行 TOBS 安装程序。 这将设置 tobs
命令和配置目录。 如先决条件中所述,tobs
命令仅设计用于 Linux/macOS/BSD 系统(如官方 Kubernetes 二进制文件),因此如果您到目前为止一直在使用 Windows,那么您应该在适用于 Linux 环境的 Windows 子系统。
检索并运行 TOBS 安装程序:
curl --proto '=https' --tlsv1.2 -sSLf https://tsdb.co/install-tobs-sh |sh
Outputtobs 0.7.0 was successfully installed 🎉 Binary is available at /root/.local/bin/tobs.
您现在可以将 TOBS 推送到您的 Kubernetes 集群。 这是通过使用您新提供的 tobs
命令的单行代码完成的:
tobs install
这将产生几行输出,可能需要一些时间。 根据您的 Kubernetes 的确切版本,输出中可能会有多个警告,但您可以忽略这些警告,只要您最终收到 Welcome to tobs
消息:
OutputWARNING: Using a generated self-signed certificate for TLS access to TimescaleDB. This should only be used for development and demonstration purposes. To use a signed certificate, use the "--tls-timescaledb-cert" and "--tls-timescaledb-key" flags when issuing the tobs install command. Creating TimescaleDB tobs-certificate secret Creating TimescaleDB tobs-credentials secret skipping to create TimescaleDB s3 backup secret as backup option is disabled. 2022/01/10 11:25:34 Transport: unhandled response frame type *http.http2UnknownFrame 2022/01/10 11:25:35 Transport: unhandled response frame type *http.http2UnknownFrame 2022/01/10 11:25:35 Transport: unhandled response frame type *http.http2UnknownFrame Installing The Observability Stack 2022/01/10 11:25:37 Transport: unhandled response frame type *http.http2UnknownFrame W0110 11:25:55.438728 75479 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ W0110 11:25:55.646392 75479 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ … 👋🏽 Welcome to tobs, The Observability Stack for Kubernetes …
从此时开始的输出将包含在浏览器中连接到 Prometheus、TimescaleDB、PromLens 和 Grafana 的每个 Web 端点的说明。 全文转载如下,以供参考:
Output############################################################################### 🔥 PROMETHEUS NOTES: ############################################################################### Prometheus can be accessed via port 9090 on the following DNS name from within your cluster: tobs-kube-prometheus-prometheus.default.svc.cluster.local Get the Prometheus server URL by running these commands in the same shell: tobs prometheus port-forward The Prometheus alertmanager can be accessed via port 9093 on the following DNS name from within your cluster: tobs-kube-prometheus-alertmanager.default.svc.cluster.local Get the Alertmanager URL by running these commands in the same shell: export POD_NAME=$(kubectl get pods --namespace default -l "app=alertmanager,alertmanager=tobs-kube-prometheus-alertmanager" -o jsonpath="{.items[0].metadata.name}") kubectl --namespace default port-forward $POD_NAME 9093 WARNING! Persistence is disabled on AlertManager. You will lose your data when the AlertManager pod is terminated. ############################################################################### 🐯 TIMESCALEDB NOTES: ############################################################################### TimescaleDB can be accessed via port 5432 on the following DNS name from within your cluster: tobs.default.svc.cluster.local To get your password for superuser run: tobs timescaledb get-password -U <user> To connect to your database, chose one of these options: 1. Run a postgres pod and connect using the psql cli: tobs timescaledb connect -U <user> 2. Directly execute a psql session on the master node tobs timescaledb connect -m ############################################################################### 🧐 PROMLENS NOTES: ############################################################################### PromLens is a PromQL query builder, analyzer, and visualizer. You can access PromLens via a local browser by executing: tobs promlens port-forward Then you can point your browser to http://127.0.0.1:8081/. ############################################################################### 📈 GRAFANA NOTES: ############################################################################### 1. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster: tobs-grafana.default.svc.cluster.local You can access grafana locally by executing: tobs grafana port-forward Then you can point your browser to http://127.0.0.1:8080/. 2. The 'admin' user password can be retrieved by: tobs grafana get-password 3. You can reset the admin user password with grafana-cli from inside the pod. tobs grafana change-password <password-you-want-to-set>
每个都提供了集群内部的 DNS 名称,以便可以从任何工作节点访问它们,例如 普罗米修斯的 tobs-kube-prometheus-alertmanager.default.svc.cluster.local
。 此外,还为每个配置了一个端口转发命令,允许您从本地 Web 浏览器访问它们。
在新终端中,运行 tobs prometheus port-forward
:
tobs prometheus port-forward
只要端口转发过程处于活动状态,这将占用终端。 当您想停止转发端口时,您可以按 Ctrl+C
优雅地退出诸如此的阻塞进程。 接下来,在 Web 浏览器中,转到 URL http://127.0.0.1:9090/
。 您应该会看到完整的 Prometheus 界面正在运行并从您的集群中生成指标:
您可以对 Grafana 执行相同的操作,只要端口转发在另一个进程中处于活动状态,就可以在 http://127.0.0.1:8080/
上访问它。 首先,您需要使用安装程序输出提供的 get-password
命令:
tobs grafana get-password
Outputyour-grafana-password
然后,您可以使用此密码登录 Grafana 界面,方法是运行其端口转发命令并在浏览器中打开 http://127.0.0.1:8080/
。
tobs grafana port-forward
现在,您的 Kubernetes 集群中运行了一个有效的 TOBS 堆栈。 您可以参考各个组件的文档以了解它们各自的功能。 在本教程的最后一步中,您将学习如何更新 TOBS 配置本身。
第 3 步 — 编辑 TOBS 配置和升级
TOBS 的配置包含堆栈中各个应用程序的一些参数,以及 TOBS 部署本身的一些参数。 它被生成并存储为 Kubernetes Helm 图表 。 您可以通过运行 tobs helm show-values
输出当前配置。 但是,这会将整个长配置输出到您的终端,这可能难以阅读。 您可以改为将输出重定向到扩展名为 .yaml
的文件,因为 Helm 图表都是有效的 YAML 语法:
tobs helm show-values > values.yaml
文件内容将如下所示:
~/values.yaml
2022/01/10 11:56:37 Transport: unhandled response frame type *http.http2UnknownFrame # Values for configuring the deployment of TimescaleDB # The charts README is at: # https://github.com/timescale/timescaledb-kubernetes/tree/master/charts/timescaledb-single # Check out the various configuration options (administration guide) at: # https://github.com/timescale/timescaledb-kubernetes/blob/master/charts/timescaledb-single/admin-guide.md cli: false # Override the deployment namespace namespaceOverride: "" …
您可以通过阅读 TOBS 文档 查看可用于 TOBS 配置的其他参数
如果您曾经修改此文件以更新您的部署,您可以使用更新的配置重新安装 TOBS。 只需将 -f
选项传递给 tobs install
命令,并将 YAML 文件作为附加参数:
tobs install -f values.yaml
最后,您可以使用以下命令升级 TOBS:
tobs upgrade
这通过获取最新的上游图表来执行相当于 helm upgrade
的操作。
结论
在本教程中,您学习了在现有 Kubernetes 集群上部署和配置 TOBS(可观察性堆栈)。 TOBS 特别有用,因为它无需单独维护每个应用程序的配置详细信息,同时为集群上运行的应用程序提供标准化监控。
接下来,您可能想了解如何使用 Cert-Manager 处理 HTTPS 进入 Kubernetes 集群。