Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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