はじめに
Developers Summit 2019初日のセミナーレポートです。 走り書きの部分もありますので、内容に不備がありましたらご了承ください。
デブサミ2019のテーマ
SHARE YOUR FUN! 新しい技術や課題解決をシェアしよう!
以下、セミナーレポートです。
テーマ
Cloud Native時代におけるDocker/Kubernetesによる開発
講師
サイバーエージェント 青山真也氏
Kubernetes大好き!
Cloud Native and Kubernates
- CNCFによってホスト
- Cloud Nativeとは?
- オープンかつスケーラブルなシステムを実現
- Kubernatesを中心としたエコシステムが発達している
- クラウドネイティブなプロダクトは500以上ある
MicroService Architecture
- システム全体を機能毎に分割
- ロールごとではなく、更に細かい機能ごと
- 数珠つなぎで1つのシステムを構成する
- ロールごとではなく、更に細かい機能ごと
- 利点
- マイクロサービス毎に選定できる
- 大規模な開発を加速
- デプロイかんたん
- 特定機能だけスケールできる
- 障害が全体に波及しにくい
- 大規模になると・・・
- だいぶ厳しい
- NETFLIX
- Twitter
- 500以上のマイクロサービス
- 管理が辛い
- Service Meshを入れる!
- 管理が辛い
- 500以上のマイクロサービス
- だいぶ厳しい
- Service Mesh
- MicroService毎にproxyを入れる
- レイテンシなど見れる
- ブルー・グリーンデプロイメントできる
- 細かい制御が可能
- アプリで制御していた機能を分離できる
- 開発者はアプリのロジックに集中できる
- MicroService毎にproxyを入れる
- まとめ
- MicroServiceで大規模開発の効率向上
- 影響の局所化ができる
Container/Docker
- コンテナには2種類ある
- Systemコンテナ
- applicationコンテナ
- だいたいこっち
- Dockerもこっち
- Docker
- Dockerfile
- Docker Image
- 用意にイメージ化できる
- イメージのビルド
- レイヤーを重ねていく
- tarで固められたファイルが重なっていく
- ビルドキャッシュ
- 変更がないところはキャッシュとして使える
- まとめ
- VMと比べて
- イメージ化が容易
- 起動が高速
- オーバヘッドが少ない
- VMと比べて
複数のコンテナをどうやって管理する???
Kubernetes
- コンテナオーケストレーションエンジン
- なぜ必要か?
- 複数のDockerホストの管理
- コンテナのスケジューリング
- スケーリング
- などなど
- なぜ必要か?
- クラウドネイティブなプラットフォームを実現するためにKubernatesが必要
- なぜ普及しているのか?
- 他のエンジンより完成度が高かった
- わが道を進まず、標準化を進めてきた
- 中立な立場で開発をしてきた
- コンテナランタイム
- Kubernetesは複数のコンテナホストを管理するもの
- Dockerホストを管理するものではない
- Dockerの勉強は必要最低限でいい
- Dockerをどうやって動かすか、というところはKubernetesを勉強したほうが良い
- Production環境でDockerを動かす場合、Docker単体でやることは少ない
- Dockerをどうやって動かすか、というところはKubernetesを勉強したほうが良い
- Dockerの勉強は必要最低限でいい
- Dockerホストを管理するものではない
- Kubernetesは複数のコンテナホストを管理するもの
もたらすもの
- すべてをymlで管理
- 以下の2つを最低限書く
replicas
- コンテナを起動しておく
image
- 以下の2つを最低限書く
- Self-Healing
- ReplicaSetではコンテナ数のReplica数を維持し続ける
- Rolling Update
- 自動でやってくれる
- ロードバランサからの除外
- コンテナイメージ更新
- ロードバランサへの追加
- 柔軟な制御が担保されている
- 何秒間隔か、など
- 自動でやってくれる
- もともとGoogleが社内で使っていたもの
- BorgをベースにOSS化
- 自分たちが創る自動化よりも、安定性・安全性が高い!
- やりたいことは大体できる
- BorgをベースにOSS化
- 抽象化されており、ネットワーク操作もymlを書くだけ
- インフラエンジニア(Ops)だけでなく、サーバサイドエンジニア(Dev)も使う
Kubernetes is Framework and Distributed System
- 分散システムとしてのKubernetes
- 単純にymlを実行しているわけではない
- Control Loop
- 今の状態を観察
- 今と理想状態を比較
- 差分に対処する処理を実施
- エアコンで言うところの、今の部屋の湿度からと気温から、調整する、みたいなイメージ
- Control Loop
- 単純にymlを実行しているわけではない
- カスタムリソースの定義
- マネージドサービスインスタンスの作成
- Kubernats経由で実施
- AWS
- GCP
- Azure
- Kubernats経由で実施
- NatsCluster
- マネージドサービスインスタンスの作成
- 中国ではデータセンター全体をKubernetesで管理している
- いろいろKubernetesで管理できる時代になってきた
CI/CD
- 個人的に推したいのはGit Ops
- COMMITハッシュを埋め込むことでどこに戻すか、やりやすくなる
未来性
- 3大クラウドがSupport
- エンタープライズの事例
- イギリスのインターネットバンキングで使用
- 万が一廃れても、標準化されているので移行しやすい
- Cloud界のLinuxになる!?
まとめ
青山さんのKubernates愛がひしひしと伝わるセッションでした。DockerもKubernatesも名前は聞いたことがあるなー、コンテナ管理だなー、くらいの認識でしたが、とてもわかり易い説明で、「使ってみたい!」と思えるセッションでした。
とても楽しかったので、デブサミが終わった後、Twitterで感想をお伝えしたところ、何とご本人から返信をいただきました。
今日のお話を拝聴しました!DockerもKubernetesも使ったことがないのですが、愛に溢れるお話を聞いて使ってみたいなと思いました。とてもわかりやいお話をありがとうございました!
— Yokoyama Hironori (@yokoyantech) 2019年2月14日
ブラウザからでも実行できるの事知りませんでした 青山さんありがとうございました!