如何为Kubernetes监控设置TOBS(可观察性堆栈)

来自菜鸟教程
跳转至:导航、​搜索

介绍

TOBS 是 The Observability Stack 的缩写,是监控工具和仪表板界面的预打包发行版,可以安装到任何现有的 Kubernetes 集群中。 它包括许多以 Prometheus 和 Grafana 为基准的最流行的开源可观察性工具,包括 Promlens、TimescaleDB、Alertmanager 等。 它们共同提供了一个简单、可维护的解决方案,用于分析服务器流量并识别大规模部署中的任何潜在问题。

TOBS 使用标准 Kubernetes Helm 图表 来配置和更新部署。 它可以安装到任何 Kubernetes 集群中,但是如果您运行 kubectl 从本地机器而不是远程节点管理集群,它可以更有效地演示。 DigitalOcean 的 Managed Kubernetes 默认会为你提供这样的配置。

在本教程中,您将把 TOBS 安装到现有的 Kubernetes 集群中,并学习如何更新、配置和浏览其组件仪表板。

先决条件

要遵循本教程,您将需要:

第 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 集群。