Google Cloudとコンテナの継続的なセキュリティ
Prometheusは、最も人気のあるDockerおよびKubernetes監視ツールの1つになりつつあります。 この電子書籍を読んで、Prometheusの利点、およびそれを使用してKubernetesのサービス、クラスター、およびコンポーネントを監視する方法について学 習します。
Prometheusは、もともとSoundCloudで構築されたオープンソースのシステム監視およびアラートツールキットであり、DockerおよびKubernetesの最も人気のある監視ツールの1つになりつつあります。
Promethusの台頭は、新しいタイプの監視フレームワークの必要性を生み出した2つの技術シフトに起因する可能性があります。
Prometheusをコンテナ化された環境の監視に使用するツールとして位置付けるために、いくつかの機能が統合されています。
プロメテウスは、Kubernetesクラスターの監視が抱える多くの固有の課題を克服するのに役立ちます。
コンテナは軽量で、ほとんどが不変のブラックボックスであるため、検索や監視が困難になり ます。 Kubernetes APIとkube-state-metrics(Prometheusメトリクスをネイティブに使用)は、Kubernetes内部データ(デプロイメント内の必要な/実行中のレプリカの数、スケジュールできないノードなど)を公開することでこれを解決するのに役立ちますが、Prometheusはより簡単にに行います。
Prometheusを使用すると、メトリクスポートを公開するだけで済み、複雑さを追加したり、追加のサービスを実行したりすることはありません。多くの場合、サービス自体は既にHTTPインターフェースを提供しており、必要なのは/ metricsなどの追加のパスだけです。
サービスがPrometheusメトリクスを提供する準備ができておらず、それをサポートするためにコードを変更できない場合は、サービスにバンドルされているPrometheusエエクスポーターを、同じポッドのサイドカーコンテナーとしてデプロイするだけです。
いつでもレポートを開始または停止できる一時的なエンティティは、従来の静的な監視システムの問題です。
Prometheusは、3つの便利な自動検出メカニズムを備えた動的監視ツールです。
Kubernetesコンポーネントは新しいインフラストラクチャレイヤーを作成し、マイクロサービスパフォーマンス(複数のノードに散在する異なるポッド)、ネームスペース、デプロイメントバージョンなどのグループ化に基づいて監視を編成する必要があります。 PromtheusのラベルベースのデータモデルとPromQLを使用すると、これらの新しいスコープに簡単に適応できます。
以下の図は、Kubernetesクラスター内のコアコンポーネントとそれぞれの機能を示しています。
Prometheusによるターゲットの自動検出は、いくつかの異なる方法で実現できます。
Prometheusは、Kubernetesサービス、ノード、オーケストレーションステータスに関連するメトリクスと同様に、アプリケーションメトリクスを収集する必要があります。
Prometheusは、PromQLを使用してアラートをトリガーするルールを構成できます。 alertmanagerは、アラート通知、グループ化、禁止などの管理を担当します。
alertmanagerコンポーネントは、アラート通知を配信するようにレシーバー、ゲートウェイを構成します。
分析とレポートのオープンプラットフォームであるGrafanaは、任意の数のPrometheusサーバーとディスプレイパネルからメトリクスを取得できます。
Prometheusモニタリングを使用してKubernetesをデプロイするには、多くのコンポーネントを用います。ここでは、Prometheusを使用してエンドユーザーアプリとKubernetesクラスターエンドポイントを監視するためのコア要素について説明します。
サービスには2つのタイプがあります。Prometheusメトリクスを公開する機能をネイティブに持っているか、Prometheusエンドポイントを提供しているサービスとそうでないサービスです。エクスポーターは、サービス統計を収集し、プロメテウスにスクレイピングする準備ができているメトリクスを変換するサービスです。
Traefikは、マイクロサービスおよびコンテナと緊密に統合されるように設計されたリバースプロキシです。 Traefikの一般的な使用例は、イングレスコントローラーまたはエントリポイントとして使用されることです。これは、インターネットとクラスター内の特定のマイクロサービスとの間のブリッジです。
Traefikをインストールするにはいくつかのオプションがあります。また、Kubernetes用のインストールガイドもあります。 Prometheusのサポートを備えた簡単なTraefikのデプロイ麺とをすぐに実行したい場合は、以下のスニペットを使用します。
Traefikポッドが実行されたら、サービスIPを表示できます。
curlを使用して、Prometheusメトリクスが公開されていることを確認できます。
次に、新しいターゲットをprometheus.yml confファイルに追加する必要があります。 Prometheusが自動的にスクレイピングすることに気付くでしょう:
別の静的エンドポイントを追加しましょう。
サービスが別のネームスペースにある場合は、FQDN(traefik.de- fault.svc.cluster.local)を使用する必要があります。もちろん、これは最低限の構成であり、scrape構成は次のような複数のパラメーターをサポートします。
ConfigMapとデプロイメントにパッチを適用します。
Prometheus Webインターフェイスで/targets URLにアクセスすると、Traefikエンドポイントが表示されます。
メインのWebインターフェースを使用して、traefikのメトリクスをいくつか見つけて(ごく少数です。この例ではTraefikフロントエンドまたはバックエンドが設定されていないため)、その値を取得できます。
アプリケーションがネイティブにPrometheusメトリクスを公開していない場合、メインサービスの状態/ログ/その他のメトリクス形式を取得してこの情報をPrometheusメトリクスとして公開するには、Prometheusエクスポーターをバンドルする必要があります。
次のコマンドを使用して、RedisサーバーとPrometheusサイドカーコンテナーを含むポッドをデプロイできます。
redisポッドを表示すると、内部に2つのコンテナーがあります。
ここで、前のセクションで行ったように、Prometheus構成を更新し、リロードするだけです。
すべてのredisサービスメトリクスを取得するには:
クラスターにデプロイされたサービスの監視に加えて、Kubernetesクラスター自体も監視する必要があります。
考慮すべきクラスター監視の3つの側面は次のとおりです。
Kubernetesの内部監視アーキテクチャは最近変更されたため、ここで要約します。詳細については、デザインプロポーザルをご覧ください。
Heapster:HeapsterはKubernetesクラスターを監視します。 これは、クラスター内でポッドとして実行される監視およびイベントデータのクラスター全体のアグリゲーターです。
Kubelets / cAdvisorエンドポイントとは別に、kube-state-metricsなどの追加のメトリクスソースを Heapsterに追加できます(以下を参照)。
Heapsterは非推奨になりました。Heapsterの代わりはメトリクスサーバーです。
cAdvisor:cAdvisorは、オープンソースのコンテナリソース使用量およびパフォーマンス分析エージェントです。コンテナ専用に作成され、Dockerコンテナをネイティブでサポートします。Kubernetesでは、cAdvisorはKubeletバイナリの一部として実行されます。ノードローカルおよびDockerメトリクスを取得するアグリゲーターは、Kubelet Prometheusエンドポイントを直接スクレイプします。
Kube-state-metrics:kube-state-metricsは、Kubernetes APIサーバーをリッスンし、デプロイメント、ノード、ポッドなどのオブジェクトの状態に関するメトリクスを生成するシンプルなサービスです。 kube-state-metricsは単なるメトリクスエンドポイントであり、他のエンティティがそれをスクレイプして長期ストレージ(つまり、Prometheusサーバー)を提供する必要があることに注意することが重要です。
Metrics-server:Metrics Serverは、リソース使用状況データのクラスター全体のアグリゲーターです。これは、デフォルトのHeapsterの代替となることを目的としています。繰り返しますが、メトリクスサーバーは最後のデータポイントのみを提示し、長期保存は担当しません。
したがって:
Kubernetesのノードまたはホストを監視する必要があります。Linuxホストを監視するためのツールがたくさんあります。 このガイドでは、Prometheusノードエクスポーターを使用します。
このサービスをデプロイするには、たとえば、このリポジトリでDamonSetを使用するなど、いくつかのオプションがあります。
またはHelm / Tillerを使用:
Helmを使用する場合は、先に進む前に、TillerコンポーネントのRBACロールとサービスアカウントを作成することを忘れないでください。
chartをインストールして実行すると、スクレイピングする必要があるサービスを表示できます。
前のセクションで行ったようにスクレイプ構成を追加したら、ノードメトリクスの収集と表示を開始できます。
kube-state-metricsのデプロイと監視も非常に簡単なタスクです。 以下の例のように直接デプロイするか、Helmチャートを使用できます。
Prometheus構成でそのサービス(ポート8080)を単純にスクレイプします。 今回は必ずFQDNを使用してください。
プロメテウスを使用して内部パフォーマンスメトリクスを公開できるetcd、kube-scheduler、kube-controllerなどのKubernetesコンポーネントがいくつかあります。
それらを監視することは、次の2つの特性を持つ他のPrometheusエンドポイントを監視することに非常に似ています。
デプロイメント方法と構成によっては、Kubernetesサービスがローカルホストのみでリッスンしている場合があります。この例では、minikubeを使用して作業を簡単にします。
Minikubeでは、ローカルのシングルノードKubernetes仮想マシンを数分で生成できます。
これは、ホストされているクラスター、GKE、AWSなどでも機能しますが、構成を変更してサービスを再起動するか、追加のネットワークルートを提供することにより、サービスポートに到達する必要があります。
minikubeのインストールは、かなり簡単なプロセスです。最初にバイナリをインストールし、次にすべてのインターフェイスでkube-schedulerサービスを公開するクラスターを作成します。
kube-schedulerポッドを指すサービスを作成します。
これで、エンドポイント:scheduler-service.kube-system.svcをスクレイピングできるようになりま す。
cluster.local:10251
Prometheusは、最も人気のあるDockerおよびKubernetesモニタリングツールの1つになりつつあります。この電子書籍を読んで、あなたはその利点に精通しており、おそらく既にPrometheusをインストールし、エンドユーザーアプリとKubernetesクラスターエンドポイントでデプロイしているでしょう。
次のステップに進む準備はできましたか? Sysdigブログにアクセスして、PromQL言語を使用したメトリクスの集計、アラートの起動、視覚化ダッシュボードの生成など、通常Prometheusサービスと共にデプロイされる追加コンポーネントの情報を確認してください。