介紹
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
来测试这一点:
如果 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和內存使用率等OS和硬件指標給Prometheus。這些指標也以純文本形式在HTTP端點上提供並被Prometheus消費。
為了安裝TOBS,您首先需要在您的控制平面上運行TOBS安裝程序。這將設置tobs
命令和配置目錄。如先決條件中所述,tobs
命令僅設計用於Linux/macOS/BSD系統(例如官方Kubernetes二進制文件),因此如果您到目前為止一直在使用Windows,您應該在Windows子系統的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 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
:
這將佔用終端,只要端口轉發過程處於活動狀態。當您想要停止轉發端口時,您可以按下 Ctrl+C
以優雅地退出像這樣的阻塞進程。接下來,在網絡瀏覽器中,前往 URL http://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 chart。您可以通过运行 tobs helm show-values
来输出当前配置。但是,这将在您的终端上输出整个长配置,可能很难阅读。您可以将输出重定向到一个具有 .yaml
扩展名的文件中,因为 Helm charts 都是有效的 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 入口。