序章

TOBS は、Observability Stackの略で、既存のKubernetesクラスターにインストールできる監視ツールとダッシュボードインターフェイスのパッケージ済みのディストリビューションです。 これには、Promlens、TimescaleDB、Alertmanagerなど、PrometheusとGrafanaをベースラインとする最も人気のあるオープンソースの可観測性ツールの多くが含まれています。 これらを組み合わせることで、サーバートラフィックを分析し、非常に大規模な展開で発生する可能性のある問題を特定するための、簡単で保守可能なソリューションが提供されます。

TOBSは、デプロイメントを構成および更新するために、標準のKubernetesヘルムチャートを利用します。 これは任意のKubernetesクラスターにインストールできますが、kubectlを実行して、リモートノードではなくローカルマシンからクラスターを管理している場合は、より効果的にデモンストレーションできます。 DigitalOceanのManagedKubernetes は、デフォルトでこのような構成を提供します。

このチュートリアルでは、TOBSを既存のKubernetesクラスターにインストールし、そのコンポーネントダッシュボードを更新、構成、参照する方法を学習します。

前提条件

このチュートリアルに従うには、次のものが必要です。

ステップ1—Kubernetes構成を確認する

TOBSをインストールするには、最初にkubectlを使用して有効なKubernetes構成を設定し、そこからワーカーノードに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オブジェクトの状態に関する指標を生成するアドオンエージェントです。 これらのメトリックは、HTTPエンドポイントでプレーンテキストとして提供され、Prometheusによって使用されます。
  • 最後に、 node-exporter は、クラスターノードで実行され、CPUやメモリ使用量などのOSおよびハードウェアメトリックをPrometheusに提供するPrometheusエクスポーターです。 これらのメトリックは、HTTPエンドポイントでプレーンテキストとしても提供され、Prometheusによって使用されます。

TOBSをインストールするには、最初にコントロールプレーンでTOBSインストーラーを実行する必要があります。 これにより、tobsコマンドと構成ディレクトリが設定されます。 前提条件で述べたように、tobsコマンドはLinux/macOS / BSDシステム(公式のKubernetesバイナリなど)でのみ機能するように設計されているため、これまでWindowsを使用している場合は、 Linux環境用のWindowsサブシステム。

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の正確なバージョンによっては、出力にいくつかの警告が表示される場合がありますが、最終的にWelcome to 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名が付けられているため、どのワーカーノードからでもアクセスできます。 プロメテウスの場合はtobs-kube-prometheus-alertmanager.default.svc.cluster.local。 さらに、ローカルWebブラウザからアクセスできるようにそれぞれに設定されたポート転送コマンドがあります。

新しいターミナルで、tobs prometheus port-forwardを実行します。

  1. tobs prometheus port-forward

これは、ポート転送プロセスがアクティブである限り、端末を占有します。 ポートの転送を停止する場合は、Ctrl+Cを押して、このようなブロッキングプロセスを正常に終了できます。 次に、Webブラウザーで、URLhttp://127.0.0.1:9090/に移動します。 完全なPrometheusインターフェースが実行され、クラスターからメトリックが生成されていることを確認する必要があります。

Prometheus welcome

別のプロセスでポートフォワーディングがアクティブである限り、http://127.0.0.1:8080/でアクセス可能なGrafanaについても同じことができます。 まず、インストーラーの出力で提供されるget-passwordコマンドを使用する必要があります。

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

次に、このパスワードを使用して、ポート転送コマンドを実行し、ブラウザーでhttp://127.0.0.1:8080/を開くことにより、Grafanaインターフェースにログインできます。

  1. tobs grafana port-forward

Grafana welcome

これで、Kubernetesクラスターで動作するTOBSスタックが実行されます。 それぞれの機能については、個々のコンポーネントのドキュメントを参照してください。 このチュートリアルの最後のステップでは、TOBS構成自体を更新する方法を学習します。

ステップ3—TOBS構成の編集とアップグレード

TOBSの構成には、スタック内の個々のアプリケーションのいくつかのパラメーターと、TOBSデプロイメント自体のいくつかのパラメーターが含まれています。 Kubernetesヘルムチャートとして生成および保存されます。 tobs helm show-valuesを実行すると、現在の構成を出力できます。 ただし、これにより、長い構成全体が端末に出力されるため、読みにくくなる可能性があります。 代わりに、Helmチャートはすべて有効なYAML構文であるため、出力を.yaml拡張子のファイルにリダイレクトできます。

  1. 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をそれ自体に再インストールできます。 追加の引数としてYAMLファイルを使用して-fオプションをtobs installコマンドに渡すだけです。

  1. tobs install -f values.yaml

最後に、次のコマンドを使用してTOBSをアップグレードできます。

  1. tobs upgrade

これは、最新のアップストリームチャートをフェッチすることにより、helm upgradeと同等のパフォーマンスを発揮します。

結論

このチュートリアルでは、既存のKubernetesクラスターにTOBS、TheObservabilityStackをデプロイして設定する方法を学びました。 TOBSは、クラスターで実行されているアプリケーションの標準化された監視を提供しながら、これらの各アプリの構成の詳細を個別に維持する必要がないため、特に役立ちます。

次に、Cert-Managerを使用してKubernetesクラスターへのHTTPS入力を処理する方法を学習することをお勧めします。