IaaS, PaaS, SaaS

提供するサービスレイヤが異なる。責任共有モデル的には管理する範囲が異なる。
運用コストは IaaS > PaaS > SaaS。柔軟性も IaaS > PaaS > SaaS。これがメリデメになる。

f:id:ano12ak:20180730235020p:plain

IaaS

  • Infrastructure as a Service
  • 俗に言う仮想サーバ。EC2など。
  • OSまでを提供
    • OSまで提供されるがOS(以上)の管理はユーザが行う

PaaS

SaaS

  • Sofware as a Service
  • 昔はASPとかって言ってた
  • Google SlideやSpreadsheetなど
  • アプリケーションをサービスとして提供。Web経由で利用するのが一般的。基本的には使うだけ。

Heapster

  • クラスターワイドのアグリゲーター
    • モニタリングデータ
    • イベントデータ
  • Kubernetesをネイティブサポート
  • Podとして動作する
    • Kubernetesで動作する他のアプリケーションと同じ
  • クラスタで1つ動いている≠Node毎、コンテナ毎
    • GKEではnamespace kube-systemにdeploymentがある
      • ns: kube-system
      • deployment: heapster-v1.5.0
      • pod: heapster-v1.5.0-xxxx
      • container: heapster
      • container: prom-to-sd (prometheus to stackdriver)
      • container: heapster-nanny
  • Cluster内の全てのNodeをdiscover
  • 各Nodeのkubeletを通じてcAdvisorからメトリクスを収集
    • 収集したメトリクスは関連するLabelと一緒にPodでまとめられる
  • メトリクスを保存するためのバックエンドが必要
    • InfluxDBが使われることが多い (可視化のためにGrafanaが一緒に使われる)
    • GCPのStackdriverにも対応している

cAdvisor

  • モニタリングツール
    • リソース使用量
    • パフォーマンス分析
  • オープンソース
  • Dockerコンテナをネイティブサポート
  • Kubernetesの各Nodeに1つずつ起動している
    • Kubernetesではkubeletのバイナリに組み込まれている
      • 通常はコンテナとして動かす
  • 同じNodeにある全てのコンテナをAuto Discover
  • Nodeにあるコンテナのメトリクスを収集
    • CPU, メモリ, ファイルシステム, ネットワーク
    • マシン全体の使用量
    • 収集は1秒毎 (デフォルト)
  • メモリ上にメトリクスを保存
    • 保存は60秒分 (デフォルト)
    • APIとして提供
  • GUIあり
    • メモリに保存されているメトリクスなら簡単に確認できる
    • http://<NodeのIPアドレス>:4194/

PrometheusでKubernetes Podの複数ポートに対してScrapeしたいとき

  • Scrapeするポートを指定するPodのAnnotation prometheus.io/portにはポートを1つしか指定できない
    • Podの中にScrapeしたいコンテナが複数ある場合に困る
  • Prometheus kubernetes_sd_configsのrole podはAnnotation prometheus.io/portがない場合、Podのポート全てに対してScrapeする
    →つまりAnnotationしないことでPodの複数ポートに対してScrapeさせることができる
  • 複数のポートに対してScrapeしたいけど、すべてのポートはちょっと。。。という場合は、ポート名にScrapeするかどうかを識別するsuffixをつけてRelabelで制御するとよい