【勉強会メモ】Cloud Native Kansai #02
- 日時:2019/03/15(金) 19:00 〜 21:30
- 場所:エムオーテックス株式会社 – MOTEX Inc.
Kubernetes and Cloud Native Products
※遅刻したため聴けませんでした…
30分でわかる Google Kubernetes Engine
Container@Google
Googleは毎週40億のコンテナを起動
Borg
- クラスター管理システム
Large-scale cluster management at Google with Borg
- BorgからKubernetes
- Borgの開発に参加していた開発者がk8sへ
What's GKE
Simple to Start
信頼性
- Auto Repairing
- 故障したり問題のあるNodeを自動でリプレイス
- Auto Upgrade
- Regional Cluster
- マスターを同一リージョン内の3つのゾーンで持つ
- Regional Persistent Disks BETA
可用性
- Pod・Node双方に対して水平・垂直のスケーリング機能
- HPA:Podの水平スケーリング
- VPA:Podの垂直スケーリング
- CA:Nodeの水平スケーリング
Integration
Other Feature
- Private Cluster
- Public IPを持たないNodesを利用可能
- Authorized Network
- Firewallで許可されたネットワークからのみアクセス可能
- Shared VPC
- 異なるプロジェクトあkんで同じVPCにワーカーノードを配置可能
- Container Native Load Balancing BETA
- HPPTS(S)ロードバランサーから直接PodのIPを参照
- double-hop問題を解決
- GKE On-Prem BETA
- オンプレミスのクラスたをGoogle Cloud COnsoleから一元的 に管理
- Cloud IdentityかオンプレミスのIdpを使う
Webアプリ開発向けゆるふわDocker使いがCloud Naive開発に必要なetc.
www.slideshare.net
おすすめ本
Twelve-Factor Appのおさらい
Cloub Native
- 近代的でダイナミックな環境
- スケーラブル
- 組織
変化の激しい環境下でスケーラブルな開発を行うための能力を組織にもたらす
- 本当に必要ですか?
- 頻繁に変化が求められていますか?
- 1日に10回20回リリースしたい?
「とりあえず導入」はやめたほうがいい
今までPerlやRubyで開発していた人がSclalaやHaskellで開発するぐらいインパクトがある
- 覚悟、同士(3人以上)と信頼貯金
とはいえキャッチアップしておきたい
- まずはコミュニティに参加
- プロダクトのコンテキストが変わるので、適している設計がある
- CNの定義としてマイクロサービスをアプローチの代表例にあげている
- 分散システムを目指すことになる
Cloud Nativeにシステム構築するには?
Design patterns for container-based distributed systems
※参考
コンテナのデザインパターンを学べる論文「Design patterns for container-based distributed systems」を読んだ - kakakakakku blog
コンテナベースの開発向けデザインパターン
Designing Distributed Systems EZ-Book(Azure)
日本語約が4/19に発売 分散システムデザインパターン
分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計
- 作者: Brendan Burns,松浦隼人
- 出版社/メーカー: オライリージャパン
- 発売日: 2019/04/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
BredanさんのGithub
Sidecar Pattern
- 共有Volumeを中継してSidecarが主コンテナを補助する
Ambassadors
- 主コンテナの変わりに通信を肩代わりするコンテナを配置
- 利点
- Appは自分の責務に集中
- 通信はAmbassadorに丸投げ
Adapters
- Ambassadorとは逆にコンテナグループから外部に対してメトリクスをエクスポート
- Adapterはモニタリングのみ行う
- モニタ対象となるAppは複数でもよい
Replicated Load-Balanced Services
LBを軸にしてその先を縮退
Sharded Service
レプリカじゃなくてシャード、つまり、分割
- 分割によって均等に分散
Scatter/Gather
- 散布/収集
- リクエストをRootNodeに投げ
- 散布、収集
Functions and Event-Driven Processing
- FunctionはFaaSと考える
- リクエストに装飾しながら処理を加える
Ownership Election
- オーナー選出のみを専門で行うコンテナを配置することでアプリは自分の責務だけを果たす
- PaxosやRAFTのような分散合意アルゴリズムを使う
Work Queue Systems
- 並列に大量の処理を実行する
- いわゆるバッチ
Event-Driven Batch Processing
- 入力が派生したりFilterされるなどして出力が作成されるワークフローシステム
Coordinated Batch Processing
- 分割した出力を一定ルールに基づいて集約する
どこから始めるか?
Cloud Native Trail Mpaを参考に段階的に始めていく
開発スタイルの再検討
- GitOps
※参考
GitHub Appを使ってGitOpsする - Qiita
どうやって始めるか?
- Rancher Labsの有償サポート
Datadog ここ掘れワンワン 春の陣
Datadogでコンテナモニタリングしよう
- リアルタイムのパフォーマンス可視化
- 強力なアラート
- 履歴の分析
サービスのかどうをモニタリングするための三本柱
- Trace
- Metrics
- Logs
依存関係やボトルネックを可視化
- 環境構築にかかる時間短縮
- 環境依存のエラーが減って開発効率向上
- 簡単に環境構築で手軽に検証
- デプロイやロールバックが楽になった
クラウド時代のモニタリングのポイントは?
ペットではなく家畜
Tag
- メトリクスに付帯
- フィルタリング/グルーピング
- カスタマイズ可能
何をどうやってモニタリング
- 基本的にはDatadogエージェントのコンテナを動かすと同一ホスト内の全コンテナとホストのメトリクスを取れる
タグをつける
- 環境変数に設定
- DD_TAGS
- DD_DOCKER_LABELS_AS_TAGS
- DD_KUBERNETES_POD_LABELS_AS_TAGS
コンテナはラベル管理必須
- どんなタグ?
- 迷ったときはまず以下のタグ
- source
- service
- env
- role
k8sのモニタリング
- Node Pod ReplicaSet Deployment DaemonSet問うの状態
- NodeごとPodごとコンテナ事のリソース使用率 など
マイクロサービスのトレース
- 分散トレーシング
- X-Datadog-Trace-Id
- 外形監視
- GAになった
- サービスを外側から監視
複数の拠点から任意のサイトやAPIエンドポイントにHTTP(S)リクエストを送信して監視
DockerからKubernetesへのシフト
www.slideshare.net
状況に応じた構成
- Docker/docker-composeでだいたいやりたいことができる
Dockerからk8s
Compose on k8s
どこで使える?
VUIエンジニアが考える「VUIでKuberenetes」
- デプロイ後に急に嫁におつかいを頼まれてお使い中にポッドを確認したくなった
- 料理中にふとポットの数を増やしたい
- Alexaなら自発的な会話が再生できる
コンテナの疲れをk3sとRemoで癒やした話
コンテナ疲れ
- 技術がてんこ盛り
- チャレンジングで楽しみたいけどToo Match
k3s
- Lightweight Kubernetes
- ARM対応
コンテナの疲れはコンテナで癒やす
- ラズパイ
- Nature Remo
温度、湿度、照度