如何為Kubernetes監控設置TOBS,即可觀察堆棧

狀態:已棄用

本文已棄用,不再維護。

原因

TOBS 安裝程式已被上游棄用。

請參閱

官方的 TOBS 文件

介紹

TOBS,全稱為 The Observability Stack,是一個預打包的監控工具和儀表板界面的發行版,可安裝到任何現有的 Kubernetes 叢集中。它包括許多最流行的開源可觀測性工具,以 Prometheus 和 Grafana 為基礎,包括 Promlens、TimescaleDB、Alertmanager 等等。這些工具一起提供了一個直觀、可維護的解決方案,用於分析服務器流量,並識別部署中的任何潛在問題,甚至適用於非常大規模的部署。

TOBS 使用標準的 Kubernetes Helm 圖表來配置和更新部署。它可以安裝到任何 Kubernetes 叢集中,但如果您從本地機器而不是遠端節點運行 kubectl 來管理您的叢集,效果會更好。DigitalOcean 的受管 Kubernetes 將預設為您提供這樣的配置。

在本教程中,您將在現有的 Kubernetes 叢集中安裝 TOBS,並學習如何更新、配置和瀏覽其組件儀表板。

先決條件

要完成本教程,您需要:

  • 啟用了基於角色的訪問控制(RBAC)的 Kubernetes 叢集。此設置將使用 DigitalOcean Kubernetes 叢集,但您可以自由選擇使用其他方法來創建叢集。您的 Kubernetes 版本應與支持的 TOBS 版本匹配。

  • 在您的本地机器上安装并配置好与您的集群连接的kubectl命令行工具。您可以在官方文档中了解更多关于安装kubectl的信息。如果您正在使用DigitalOcean Kubernetes集群,请参考如何连接到DigitalOcean Kubernetes集群以了解如何使用kubectl连接到您的集群。

步骤1 — 验证您的Kubernetes配置

要安装TOBS,您首先需要设置一个有效的Kubernetes配置,其中包括kubectl,从中您可以ping通您的工作节点。您可以通过运行kubectl get nodes来测试这一点:

  1. kubectl get nodes

如果 kubectl 能夠連接到您的 Kubernetes 叢集並且按預期運行,此命令將返回具有 Ready 狀態的節點列表:

Output
NAME 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 來查看它的前幾行,即:

  1. head ~/.kube/config
Output
apiVersion: v1 clusters: - cluster: certificate-authority-data: …

如果該文件不存在,請確保您已以配置 Kubernetes 的相同用戶身份登錄。~/ 路徑反映個別用戶的主目錄,並且 Kubernetes 配置默認情況下保存在每個用戶中。

如果您正在使用 DigitalOcean 的受管 Kubernetes,請確保在設置叢集後運行 doctl kubernetes cluster kubeconfig save 命令,以便您的本地機器可以對其進行身份驗證。這將創建一個 ~/.kube/config 文件:

  1. 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 對象狀態(如部署和 Pod)的指標。這些指標作為純文本在 HTTP 端點上提供,並由 Prometheus 使用。
  • 最後是node-exporter,這是一個運行在集群節點上的Prometheus導出器,它提供了像CPU和內存使用率等OS和硬件指標給Prometheus。這些指標也以純文本形式在HTTP端點上提供並被Prometheus消費。

為了安裝TOBS,您首先需要在您的控制平面上運行TOBS安裝程序。這將設置tobs命令和配置目錄。如先決條件中所述,tobs命令僅設計用於Linux/macOS/BSD系統(例如官方Kubernetes二進制文件),因此如果您到目前為止一直在使用Windows,您應該在Windows子系統的Linux環境中工作。

檢索並運行TOBS安裝程序:

  1. curl --proto '=https' --tlsv1.2 -sSLf https://tsdb.co/install-tobs-sh |sh
Output
tobs 0.7.0 was successfully installed ? Binary is available at /root/.local/bin/tobs.

您現在可以將TOBS推送到您的Kubernetes集群。這可以通過一條新提供的tobs命令完成:

  1. tobs install

這將生成幾行輸出並可能需要一些時間。根據您的Kubernetes版本,輸出中可能會有一些警告,但只要最終收到歡迎使用tobs消息即可忽略這些警告:

Output
WARNING: 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 名稱,這樣它們就可以從任何工作節點訪問,例如 Prometheus 的 tobs-kube-prometheus-alertmanager.default.svc.cluster.local。此外,為每個配置了一個端口轉發命令,允許您從本地 Web 瀏覽器訪問它們。

在一個新的終端中運行 tobs prometheus port-forward:

  1. tobs prometheus port-forward

這將佔用終端,只要端口轉發過程處於活動狀態。當您想要停止轉發端口時,您可以按下 Ctrl+C 以優雅地退出像這樣的阻塞進程。接下來,在網絡瀏覽器中,前往 URL http://127.0.0.1:9090/。您應該可以看到完整的 Prometheus 介面正在運行,並從您的集群生成指標:

您可以對 Grafana 做相同的操作,只要端口轉發在另一個進程中處於活動狀態,就可以在 http://127.0.0.1:8080/ 訪問它。首先,您需要使用安裝程序輸出提供的 get-password 命令:

  1. tobs grafana get-password
Output
your-grafana-password

然後,您可以使用此密碼通過運行其端口轉發命令並在瀏覽器中打開 http://127.0.0.1:8080/ 來登錄 Grafana 介面。

  1. tobs grafana port-forward

現在,在您的 Kubernetes 集群中運行著一個可用的 TOBS 堆棧。您可以參考各個組件的文檔以了解它們各自的功能。在本教程的最後一步中,您將學習如何對 TOBS 配置進行更新。

步骤 3 — 编辑 TOBS 配置并升级

TOBS 的配置包含一些用于堆栈中各个应用程序的参数,以及一些用于 TOBS 部署本身的参数。它被生成并存储为 Kubernetes Helm chart。您可以通过运行 tobs helm show-values 来输出当前配置。但是,这将在您的终端上输出整个长配置,可能很难阅读。您可以将输出重定向到一个具有 .yaml 扩展名的文件中,因为 Helm charts 都是有效的 YAML 语法:

  1. tobs helm show-values > values.yaml

文件内容将如下所示:

~/values.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 文件作为附加参数传入:

  1. tobs install -f values.yaml

最後,您可以使用以下命令升級 TOBS:

  1. tobs upgrade

此操作相當於通過獲取最新的上游圖表來執行 helm upgrade

結論

在這個教程中,您學會了在現有的 Kubernetes 集群上部署和配置 TOBS,即可觀性堆棧。TOBS 特別有助於消除對每個應用程序進行個別維護配置細節的需要,同時為在您的集群上運行的應用程序提供標準化的監控。

接下來,您可能想要學習如何使用 Cert-Manager 來處理對您的 Kubernetes 集群的 HTTPS 入口。

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-tobs-the-observability-stack-for-kubernetes-monitoring