ステータス: 廃止予定
この記事は廃止予定であり、もはやメンテナンスされていません。
理由
TOBS インストーラーは上流で廃止予定になりました。
代わりに以下を参照してください
公式の TOBS ドキュメント。
はじめに
TOBS、The Observability Stack の略称です。これは、既存の Kubernetes クラスターにインストールできる監視ツールとダッシュボードインターフェースの事前パッケージ化されたディストリビューションです。Prometheus と Grafana をベースにした Promlens、TimescaleDB、Alertmanager など、最も人気のあるオープンソースの観測可能性ツールの多くが含まれています。これらを併用することで、サーバートラフィックの分析や非常に大規模な展開の問題を特定するための簡単で維持可能なソリューションを提供します。
TOBSは、デプロイメントの構成と更新のために標準のKubernetes Helmチャートを利用します。これは任意のKubernetesクラスタにインストールできますが、リモートノードではなくローカルマシンからクラスタを管理するためにkubectl
を実行している場合に効果的にデモンストレーションできます。デジタルオーシャンのマネージドKubernetesは、デフォルトでこのような構成を提供します。
このチュートリアルでは、既存のKubernetesクラスタにTOBSをインストールし、そのコンポーネントのダッシュボードを更新、構成、および参照する方法を学びます。
前提条件
このチュートリアルに従うには、次のものが必要です:
-
ロールベースのアクセス制御(RBAC)が有効になっているKubernetesクラスタ。このセットアップではDigitalOcean Kubernetesクラスタを使用しますが、別の方法でクラスタを作成しても構いません。KubernetesのバージョンはサポートされているTOBSのバージョンに一致する必要があります。
-
ローカルマシンにインストールされ、クラスタに接続するように構成された
kubectl
コマンドラインツール。kubectl
のインストールについては、公式ドキュメントを参照してください公式ドキュメント。DigitalOcean Kubernetesクラスタを使用している場合は、kubectl
を使用してクラスタに接続する方法については、DigitalOcean Kubernetesクラスタに接続する方法を参照してください。
ステップ1 — Kubernetes構成の確認
TOBSをインストールするには、まずkubectl
を使用してワーカーノードにpingできる有効なKubernetes構成をセットアップする必要があります。これをテストするには、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
を実行できます。i:
OutputapiVersion: v1
clusters:
- cluster:
certificate-authority-data:
…
ファイルが存在しない場合は、Kubernetesを構成したときと同じユーザーとしてログインしていることを確認してください。~/
パスは個々のユーザーのホームディレクトリを反映し、Kubernetes構成はデフォルトでユーザーごとに保存されます。
デジタルオーシャンのマネージドKubernetesを使用している場合は、クラスターをセットアップした後にdoctl kubernetes cluster kubeconfig save
コマンドを実行して、ローカルマシンが認証できるようにする必要があります。これにより、~/.kube/config
ファイルが作成されます:
このマシンを使用して複数のクラスターにアクセスする場合は、環境変数と複数の構成ファイルを使用して競合を回避する方法について、Kubernetesのドキュメントを確認する必要があります。 kubectl
環境を構成した後は、次のステップでTOBSをインストールできます。
ステップ2 — TOBSのインストールとエンドポイントのテスト
TOBSには次のコンポーネントが含まれています:
- Prometheusは、メトリクスのエンドポイントをポーリングし、これらのエンドポイントで公開されているデータをスクレイピングおよび処理する時系列データベースおよびモニタリングツールです。これにより、PromQLという時系列データクエリ言語を使用してこのデータをクエリできます。
- Alertmanagerは通常、Prometheusと一緒に展開され、スタックのアラートレイヤーを形成し、Prometheusによって生成されたアラートを処理し、重複排除、グループ化、およびEメールやPagerDutyなどの統合にルーティングします。Alertmanagerについて詳しくは、Prometheusのアラートに関するドキュメントを参照してください。
- Grafanaは、データの視覚化および分析ツールであり、メトリクスデータのダッシュボードやグラフを構築できます。
- kube-state-metricsは、Kubernetes APIサーバーをリッスンし、DeploymentsやPodsなどのKubernetesオブジェクトの状態に関するメトリクスを生成するアドオンエージェントです。これらのメトリクスはHTTPエンドポイントでプレーンテキストとして提供され、Prometheusによって消費されます。
- 最後に、node-exporterは、クラスターノード上で実行され、CPUやメモリ使用率などのOSおよびハードウェアのメトリクスをPrometheusに提供する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の正確なバージョンに応じて、出力にいくつかの警告が表示される場合がありますが、最終的に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の各ウェブエンドポイントに接続するための手順が含まれます。参照のために、以下に完全に再現されています:
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
です。さらに、それぞれのポートフォワーディングコマンドが設定されており、ローカルのウェブブラウザからアクセスできるようになっています。
新しいターミナルで、tobs prometheus port-forward
を実行してください。
これにより、ポートフォワーディングプロセスがアクティブな限り、そのターミナルは占有されます。ポートの転送を停止したい場合は、Ctrl+C
を押してください。次に、ウェブブラウザでURLhttp://127.0.0.1:9090/
にアクセスしてください。クラスタからメトリクスを生成する、完全なPrometheusインターフェースが表示されるはずです。
Grafanaについても同様に行うことができます。ポートの転送が別のプロセスでアクティブな間、これはhttp://127.0.0.1:8080/
でアクセス可能です。まず、インストーラの出力から提供されるget-password
コマンドを使用する必要があります。
Outputyour-grafana-password
次に、このパスワードを使用して、Grafanaインターフェースにログインできます。そのためには、ポートフォワーディングコマンドを実行し、ブラウザでhttp://127.0.0.1:8080/
を開いてください。
これで、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を再インストールできます。単にtobs install
コマンドに-f
オプションを追加の引数として渡して、YAMLファイルを指定します。
最後に、以下のコマンドを使用して TOBS をアップグレードできます:
これにより、最新のアップストリーム チャートを取得して、helm upgrade
相当の操作が実行されます。
結論
このチュートリアルでは、既存の Kubernetes クラスターに TOBS(The Observability Stack)を展開および構成する方法を学びました。TOBS は特に役立ちます。なぜなら、各アプリケーションの構成詳細を個別に管理する必要がなく、クラスター上で実行されているアプリケーションに対して標準化されたモニタリングを提供するからです。
次に、Kubernetes クラスターへの HTTPS イングレスを処理するために Cert-Manager の使用方法を学ぶことができます。