Slide 1

Slide 1 text

Mackerelチームの
 コンテナ開発における戦略とこれから
 CloudNative Days Tokyo 2019


Slide 2

Slide 2 text

● 今井隼人(id:hayajo_77/@hayajo) ● 株式会社はてな(2017/11〜) ● Mackerelチーム ● SRE 自己紹介
 https://developer.hatenastaff.com/entry/2019/06/10/120000

Slide 3

Slide 3 text

Mackerel?


Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

コンテナ?


Slide 8

Slide 8 text

コンテナはOSリソースを隔離・制限したプロセス


Slide 9

Slide 9 text

VM VM Container Container Container VM Container Runtime Process Process Process Guest OS Hypervisor Hardware

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

今日のゴール


Slide 12

Slide 12 text

● Mackerelのコンテナ対応への取り組みを知ってもらう ○ ファーストリリースのゴールはどこか ○ ゴールを達成するために選択したこと ○ これからの取り組み 今日のゴール


Slide 13

Slide 13 text

話すこと
 ● コンテナ対応の開発経緯 ● コンテナ対応の概要 ● コンテナ監視のこれから

Slide 14

Slide 14 text

話さないこと
 ● コンテナ対応の利用手順 ● コンテナ監視のプラクティス

Slide 15

Slide 15 text

早わかりMackerel


Slide 16

Slide 16 text

Mackerelのアーキテクチャ


Slide 17

Slide 17 text

コンポーネント
 ● mackerel-agent ● mackerel-plugin ● mackerel

Slide 18

Slide 18 text

mackerel-agent
 ● ホスト情報や定期的に計測されるメトリックをmackerelに送信するプログラ ム ○ ホスト情報の収集 ○ OSメトリックの収集 ○ プラグインの実行とメトリックの収集 ○ mackerelへメトリックを投稿 ● ホストにインストールして利用する

Slide 19

Slide 19 text

mackerel-plugin
 ● アプリケーション固有のメトリックを収集してmackerel-agent向けの形式に 変換するプログラム ● mackerel-agentから定期的に実行される ● mackerel-agentと同じホストにインストールして利用する ● 公式プラグインだけでなく多くのプラグインが公開されている

Slide 20

Slide 20 text

mackerel
 ● Mackerelサービス本体 ○ メトリックの保存 ○ ダッシュボードの提供 ○ メトリックの監視 ○ アラート管理 ○ クラウドサービス(AWS, Azure)インテグレーション ○ URL外形監視 ● ウェブブラウザやAPIアクセス、mkrコマンドなどで利用する

Slide 21

Slide 21 text

HOST mackerel-agent mackerel-plugin OS Application CloudService

Slide 22

Slide 22 text

Mackerelのメトリック


Slide 23

Slide 23 text

メトリックの種類
 ● システムメトリック ● カスタムメトリック ● サービスメトリック

Slide 24

Slide 24 text

システムメトリック
 ● エージェントが自動的に収集するメトリック ● ロードアベレージ、CPU使用率、メモリ使用量、ネットワーク送受信量など

Slide 25

Slide 25 text

カスタムメトリック
 ● プラグインやMackerel本体によるクラウドサービスインテグレーションで収 集するメトリック ● アプリケーション固有のメトリックやクラウドサービスに関するメトリックなど ● ホスト退役後、一定期間で非表示となる

Slide 26

Slide 26 text

サービスメトリック
 ● エージェントを介さずにMackerelのAPIから投稿するメトリックやMackerel 本体による外形監視のメトリック ● PV数やサービスのKPI、レスポンスタイムなど

Slide 27

Slide 27 text

HOST mackerel-agent mackerel-plugin OS Application カスタムメトリック システムメトリック カスタムメトリック サービスメトリック CloudService

Slide 28

Slide 28 text

Mackerelのサービス/ロール


Slide 29

Slide 29 text

サービス/ロール
 ● サービス ○ サービス単位でホストをグループ化 ○ 「はてなブログ」「はてなブックマーク」 ● ロール ○ サービスにおける役割単位でホストをグループ化 ○ 「アプリケーションサーバ」「データベースサーバ」

Slide 30

Slide 30 text

ロールグラフ


Slide 31

Slide 31 text

これまでのMackerelにおけるコンテナ監視


Slide 32

Slide 32 text

これまでのコンテナ監視
 ● Dockerプラグイン ● ECSプラグイン ● ECSインテグレーション

Slide 33

Slide 33 text

Dockerプラグイン
 ● Dockerコンテナを監視するプラグイン ● Docker APIからメトリック取得 ● Dockerで動く各コンテナのCPU使用率、メモリ使用量、IO使用量を監視 ● ホストのカスタムメトリックとして登録

Slide 34

Slide 34 text

Dockerプラグイン
 HOST mackerel-agent docker-plugin カスタムメトリック docker docker

Slide 35

Slide 35 text

ECSプラグイン
 ● Amazon ECSを監視するプラグイン ● Amazon CloudWatchからメトリックを取得 ● 指定したECSクラスタ/サービスのCPU使用率、メモリ使用量、タスク数を 監視 ○ ECSタスクやコンテナ単位の監視ではないので注意 ● ホストのカスタムメトリックとして登録

Slide 36

Slide 36 text

ECSプラグイン
 HOST mackerel-agent aws-ecs-plugin カスタムメトリック

Slide 37

Slide 37 text

ECSインテグレーション
 ● Amazon ECSを監視するAWSインテグレーション ○ エージェント不要。Mackerel本体が定期的にメトリックを取得。 ● Amazon CloudWatchからメトリックを取得 ● 実行しているECSクラスタ/サービスのCPU使用率、メモリ使用量、タスク 数を監視 ● 1 ECSクラスタ/ホスト(マイクロホスト)とし、カスタムメトリックとして登録

Slide 38

Slide 38 text

ECSインテグレーション
 カスタムメトリック

Slide 39

Slide 39 text

Mackerelにおけるコンテナ監視の課題


Slide 40

Slide 40 text

コンテナ同士の関連性
 ● DockerプラグインではTask/Podの情報は扱わない ● ECS Task, Kubernetes Podのようなコンテナの論理的グループを扱うこと ができない

Slide 41

Slide 41 text

アプリケーション監視
 ● コンテナは環境によってIPアドレス、公開Port、ファイルシステムパスなど が動的に割り当てられる ● コンテナで動くアプリケーション固有のメトリック取得にはこれらを解決する ためにプラグインの作り込みが必要

Slide 42

Slide 42 text

コンテナのメトリックの扱い
 ● コンテナのメトリックはカスタムメトリック ● ホスト退役後に一定期間で非表示となってしまう

Slide 43

Slide 43 text

サービス/ロールの設定
 ● コンテナはMackerelにおいてホストとして扱われない ● 同じ役割をもつコンテナにサービス/ロールを設定して系として監視できな い

Slide 44

Slide 44 text

コンテナをホストのように扱いたい!


Slide 45

Slide 45 text

Mackerelコンテナエージェントをリリース


Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

ファーストリリースのゴール


Slide 48

Slide 48 text

ターゲット
 ● コンテナオーケストレーションツール・サービスを使ってアプリケーションを 稼働させているユーザー ○ Amazon ECS(EC2、Fargate)、Kubernetes ○ オーケストレーションツール・サービス以外でのコンテナ活用は用途が 多岐にわたり、それぞれのユースケースはニッチなのでスコープ外

Slide 49

Slide 49 text

やること
 ● ECS Task/Kubernetes Podをホストとして扱う ○ “Mackerelではシステムを構成する最小単位をホストとして扱う” ● 既存のプラグインを利用可能とする ● コンテナの基本的なメトリックをシステムメトリックとして登録する ● ロールの割当を可能とする ● Fargateのようなコンテナネイティブな開発・運用に対応する

Slide 50

Slide 50 text

やらないこと
 
 
 ● コンテナをホストしているノードの監視 ○ mackerel-agentで監視することを想定 ○ Fargateのようなコンテナネイティブなサービスでは監視不要 ● クラスタの監視 ○ ECSはAWSインテグレーションで監視することを想定 ○ Kubernetesは運用知見が不足

Slide 51

Slide 51 text

HOW


Slide 52

Slide 52 text

Mackerelコンテナエージェント
 ● Task/Podのサイドカーコンテナとしてデプロイ ● クラスタが提供するAPIからコンテナのメトリックを取得 ● アプリケーション固有のメトリックはこれまで同様プラグインを実行して収集 する ● 1 Task/Podにつき1マイクロホストとしてカウント ○ 30メトリック/マイクロホスト

Slide 53

Slide 53 text

サイドカーコンテナ?
 ● 主となるコンテナを拡張・補助するようなコンテナ ○ ログ、プロキシ、モニタリングなど ○ 必要な機能をサイドカーで足していく ● コンテナ間でファイルシステムの一部やネットワークなどのリソースを共有 する ● スコープが限定され実装がシンプル

Slide 54

Slide 54 text

Task/Pod Container mackerel-container-agent mackerel-plugin Cluster API カスタムメトリック システムメトリック Container Container

Slide 55

Slide 55 text

Host(Container Instance/Node) mackerel-agentとmackerel-container-agent
 Task/Pod Task/Pod Task/Pod

Slide 56

Slide 56 text

完成


Slide 57

Slide 57 text

ホスト一覧画面


Slide 58

Slide 58 text

ホスト詳細画面


Slide 59

Slide 59 text

ロールグラフ


Slide 60

Slide 60 text

技術詳細


Slide 61

Slide 61 text

ECS Taskの監視


Slide 62

Slide 62 text

ECSのAPI
 ● ecs-agentが提供するAPI ● Introspection API ○ コンテナインスタンスやタスクのメタデータを提供 ● Task Metadata Endpoint version2/3 ○ タスクのメタデータやコンテナのメトリックを提供

Slide 63

Slide 63 text

MackerelコンテナエージェントとECSのAPI
 ● パブリックベータ時は起動タイプ、ネットワークモードによってそれぞれ異な るAPIを利用していた ○ EC2(bridge/host): Introspection API + Docker API + cgroupfs ○ EC2(awsvpc): Task Metadata Endpoint version 3 ○ Fargate(awsvpc): Task Metadata Endpoint version 2 ● 正式リリースではTask Metadata Endpoint version3に統一 ○ Amazon ECS コンテナエージェント バージョン1.26.1以降 ○ AWS Fargate プラットフォームバージョン 1.3.0以降

Slide 64

Slide 64 text

bridge Taskネットワーキング
 ● ネットワークモードによってメトリックの取得方法が異なる host awsvpc

Slide 65

Slide 65 text

Kubernetes Podの監視


Slide 66

Slide 66 text

kubelet API
 ● kubeletが提供するAPI ● Podのメタデータやメトリック、ログの取得、コマンドのローカル実行のため のAPI ● kubelet port(10250/HTTPS)とread-only port(10255/HTTP)でLISTEN ○ readonly-portが無効な環境もある

Slide 67

Slide 67 text

kubelet APIのAuthN/AuthZ
 ● kubelet APIでは認証・認可を設定できる ● 認証(Authentication) ○ 匿名アクセス、クライアント証明書認証、トークン認証 ● 認可(Authorization) ○ AlwaysAllow、WebHook, RBACなど

Slide 68

Slide 68 text

Mackerelコンテナエージェントとkubelet API
 ● デフォルトではreadonly-portにアクセス ● 設定でkubelet portに切り替え可能 ○ トークン認証をサポート ○ “nodes/proxy”, “nodes/stas”, “nodes/spec” へのGETアクセス許可 が必要

Slide 69

Slide 69 text

e.g. RBAC設定例
 --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: mackerel-container-agent-clusterrole rules: - apiGroups: - "" resources: - nodes/proxy - nodes/stats - nodes/spec verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: sample-clusterrolebinding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: mackerel-container-agent-clusterrole subjects: - kind: ServiceAccount name: sample-serviceaccount namespace: default

Slide 70

Slide 70 text

Mackerelコンテナエージェントの課題


Slide 71

Slide 71 text

カスタムメトリックの表示期間
 ● Task/Podが退役するとカスタムメトリックは一 定期間で非表示となる 
 ○ プラグインで取得したメトリック 
 ○ Task/Podのシステムメトリックは退役後 も残るので、ロールグラフによる傾向の 把握は可能
 ● 時系列データベースの強化を検討 
 Task/Pod Task/Pod RETIRE

Slide 72

Slide 72 text

デプロイ
 ● Task/Podごとにコンテナエージェントの定義が 必要
 ● CDKライブラリやMutatingAdmissionWebhookな ど、デプロイが楽になるようなツールの提供を検 討 Task/Pod Def FOO - App FOO - mackerel-container-agent Task/Pod App FOO Task/Pod App BAR Task/Pod App FOO Task/Pod App BAR Task/Pod Def BAR - App BAR - mackerel-container-agent

Slide 73

Slide 73 text

リソース消費
 ● “観察者効果は気にしない ” Mike Julian. 入門 監視. 松浦隼人訳. オライリー・ジャパン, 2019, 5p ● とはいえTask/Podの高集積環境では小さなオー バーヘッドでも気になるかも ● DaemonSet型エージェントの提供を検討 HOST

Slide 74

Slide 74 text

Mackerelのコンテナ監視のこれから


Slide 75

Slide 75 text

Observabilityの向上
 ● Mackerelはメトリックベースの監視サービス
 ● 外部のプロファイリング、トレーシング、ロギング関連ツール・サービスとの 連携を検討

Slide 76

Slide 76 text

チームとしてコンテナクラスタ運用の理解を深める
 ● コンテナクラスタ運用のキャッチアップを目的として自前のKubernetesクラ スタを導入
 ○ 運用に課題があり現在は撤退
 ○ しかしコンテナクラスタ運用におけるMackerelのドッグフーディングは 必須
 ● マネージドKubernetesへの移行によるリトライを段階的に進行中


Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

まとめ


Slide 79

Slide 79 text

まとめ
 ● ECS Task/Kubernetes Podを監視するコンテナ専用エージェントをリリース
 ● Kubernetesクラスタの監視は次フェーズ以降
 ● コンテナエージェントの課題解決に向けて開発をすすめる
 ● コンテナクラスタ運用の知見を深めてコンテナモニタリングのプラクティスを 提供していきたい


Slide 80

Slide 80 text

curl -sIL mackerel.io | grep career