介绍
TOBS,即 The Observability Stack,是一个预打包的监控工具和仪表板界面分发,可以安装到任何现有的 Kubernetes 集群中。它包括许多最受欢迎的开源可观测性工具,以 Prometheus 和 Grafana 作为基线,包括 Promlens、TimescaleDB、Alertmanager 等。这些工具一起提供了一个简单、可维护的解决方案,用于分析服务器流量并识别部署中的任何潜在问题,可扩展到非常大的规模。
TOBS利用标准的Kubernetes Helm图表来配置和更新部署。它可以安装到任何Kubernetes集群中,但如果您从本地机器而不是远程节点使用kubectl
管理您的集群,则可以更有效地演示。DigitalOcean的托管的Kubernetes将默认为您提供这样的配置。
在本教程中,您将把TOBS安装到现有的Kubernetes集群中,并学习如何更新、配置和浏览其组件仪表板。
先决条件
要完成本教程,您需要:
-
启用了基于角色的访问控制(RBAC)的Kubernetes集群。此设置将使用DigitalOcean Kubernetes集群,但您可以自由选择使用其他方法创建集群。您的Kubernetes版本应与支持的TOBS版本相匹配。
-
在您的本地计算机上安装并配置了连接到您集群的
kubectl
命令行工具。您可以在官方文档中了解更多关于安装kubectl
的信息。如果您正在使用DigitalOcean Kubernetes集群,请参考如何连接到DigitalOcean Kubernetes集群来学习如何使用kubectl
连接到您的集群。
第1步 — 验证您的Kubernetes配置
要安装TOBS,您应首先设置了一个有效的Kubernetes配置,其中包括能够ping通您的工作节点的kubectl
。您可以通过运行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
如果成功,您可以继续进行 第 2 步。如果不成功,您应该检查配置详细信息以查找任何问题。
默认情况下,kubectl
将在 ~/.kube/config
文件中查找以了解您的环境。为了验证该文件是否存在并包含有效的 YAML 语法,您可以运行 head
命令查看其前几行,如下所示:
OutputapiVersion: v1
clusters:
- cluster:
certificate-authority-data:
…
如果文件不存在,请确保您已登录为配置 Kubernetes 的相同用户。~/
路径反映了各个用户的主目录,并且默认情况下每个用户保存 Kubernetes 配置。
如果您正在使用 DigitalOcean 的托管 Kubernetes,请确保在设置集群后运行了 doctl kubernetes cluster kubeconfig save
命令,以便您的本地机器可以进行身份验证。这将创建一个 ~/.kube/config
文件:
如果您正在使用此计算机访问多个集群,则应查看 Kubernetes 文档,了解如何使用环境变量和多个配置文件以避免冲突。配置好您的 kubectl
环境后,您可以继续进行下一步安装 TOBS。
步骤 2 — 安装 TOBS 并测试您的端点
TOBS 包括以下组件:
- Prometheus 是一个时间序列数据库和监控工具,通过轮询指标端点并抓取和处理这些端点暴露的数据来工作。它允许您使用 PromQL,一种时间序列数据查询语言,查询这些数据。
- Alertmanager,通常与 Prometheus 一起部署,形成堆栈的警报层,处理 Prometheus 生成的警报,并对其进行重复消除、分组和路由到诸如电子邮件或 PagerDuty 等集成。要了解有关 Alertmanager 的更多信息,请参阅 Prometheus 警报文档。
- Grafana 是一个数据可视化和分析工具,允许您为您的指标数据构建仪表板和图形。
- kube-state-metrics 是一个附加代理,监听 Kubernetes API 服务器并生成有关 Kubernetes 对象(如部署和 Pod)状态的指标。这些指标以纯文本形式在 HTTP 端点上提供,并由 Prometheus 消耗。
- 最后是node-exporter,它是在集群节点上运行的 Prometheus 导出器,提供诸如 CPU 和内存使用率之类的操作系统和硬件指标给 Prometheus。这些指标也以纯文本形式在 HTTP 端点上提供,并被 Prometheus 消费。
要安装 TOBS,首先需要在控制平面上运行 TOBS 安装程序。这将设置tobs
命令和配置目录。如先决条件中所述,tobs
命令仅设计用于 Linux/macOS/BSD 系统(如官方 Kubernetes 二进制文件),因此如果你到目前为止一直在使用 Windows,你应该在Windows Subsystem for Linux环境中工作。
检索并运行 TOBS 安装程序:
Outputtobs 0.7.0 was successfully installed ?
Binary is available at /root/.local/bin/tobs.
现在,您可以通过一个一行命令将 TOBS 推送到您的 Kubernetes 集群。这是通过使用您新提供的tobs
命令完成的:
这将生成几行输出,可能需要一些时间。根据您的 Kubernetes 精确版本,输出中可能会有几个警告,但只要最终收到欢迎使用 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 网页端点的说明。以下是完整的指令,以供参考:
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
用于Prometheus。此外,还为每个配置了一个端口转发命令,允许您从本地Web浏览器访问它们。
在新的终端中运行tobs prometheus port-forward
:
这将占用终端,只要端口转发进程处于活动状态。当您想要停止转发端口时,您可以按Ctrl+C
以优雅地退出像这样的阻塞进程。接下来,在Web浏览器中,转到URLhttp://127.0.0.1:9090/
。您应该看到完整的Prometheus界面正在运行,并从您的集群生成指标:
您可以为Grafana执行相同的操作,只要另一个进程中的端口转发处于活动状态,它就可以在http://127.0.0.1:8080/
访问。首先,您需要使用安装程序输出提供的get-password
命令:
Outputyour-grafana-password
然后,您可以使用此密码通过运行其端口转发命令并在浏览器中打开http://127.0.0.1:8080/
来登录Grafana界面。
您现在在您的Kubernetes集群中运行着一个正常工作的TOBS堆栈。您可以参考各个组件的文档,以了解它们各自的功能。在本教程的最后一步中,您将学习如何更新TOBS配置本身。
步骤3 — 编辑 TOBS 配置并升级
TOBS 的配置包含了堆栈中各个应用程序的一些参数,以及 TOBS 部署本身的一些参数。它以 Kubernetes Helm 图表 的形式生成并存储。您可以通过运行 tobs helm show-values
命令输出当前的配置。然而,这将会在您的终端输出完整的长配置,阅读起来可能会有些困难。您可以将输出重定向到一个带有 .yaml
扩展名的文件中,因为 Helm 图表都是有效的 YAML 语法:
文件内容将如下所示:
2022/01/10 11:56:37 Transport: unhandled response frame type *http.http2UnknownFrame
# 用于配置 TimescaleDB 部署的值
# 图表的 README 位于:
# https://github.com/timescale/timescaledb-kubernetes/tree/master/charts/timescaledb-single
# 请查看各种配置选项(管理指南):
# https://github.com/timescale/timescaledb-kubernetes/blob/master/charts/timescaledb-single/admin-guide.md
cli: false
# 覆盖部署命名空间
namespaceOverride: ""
…
您可以通过阅读 TOBS 文档 来查看可用于 TOBS 配置的其他参数。
如果您修改了此文件以更新您的部署,您可以使用更新后的配置重新安装 TOBS。只需将 -f
选项传递给 tobs install
命令,并将 YAML 文件作为附加参数。
最后,您可以使用以下命令升级 TOBS:
这将执行相当于 helm upgrade
的操作,通过获取最新的上游图表。
结论
在本教程中,您学习了如何在现有的 Kubernetes 集群上部署和配置 TOBS(可观测性堆栈)。TOBS 特别有帮助,因为它消除了单独维护每个应用程序的配置细节的需要,同时为您集群中运行的应用程序提供了标准化的监控。
接下来,您可能想学习如何使用 Cert-Manager 处理 Kubernetes 集群的 HTTPS 入口。