紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【デブサミ2019レポート】Cloud Native時代におけるDocker/Kubernetesによる開発 #devsumi

はじめに

Developers Summit 2019初日のセミナーレポートです。 走り書きの部分もありますので、内容に不備がありましたらご了承ください。

デブサミ2019のテーマ

SHARE YOUR FUN! 新しい技術や課題解決をシェアしよう!

event.shoeisha.jp

以下、セミナーレポートです。

テーマ

Cloud Native時代におけるDocker/Kubernetesによる開発

f:id:yokoyantech:20190222225317p:plain

講師

サイバーエージェント 青山真也氏

Kubernetes大好き!

Cloud Native and Kubernates

  • CNCFによってホスト
  • Cloud Nativeとは?
    • オープンかつスケーラブルなシステムを実現
    • Kubernatesを中心としたエコシステムが発達している
      • クラウドネイティブなプロダクトは500以上ある

f:id:yokoyantech:20190222225441p:plain

MicroService Architecture

  • システム全体を機能毎に分割
    • ロールごとではなく、更に細かい機能ごと
      • 数珠つなぎで1つのシステムを構成する
  • 利点
    • マイクロサービス毎に選定できる
    • 大規模な開発を加速
    • デプロイかんたん
    • 特定機能だけスケールできる
    • 障害が全体に波及しにくい f:id:yokoyantech:20190222225600p:plain
  • 大規模になると・・・
    • だいぶ厳しい
      • NETFLIX
      • Twitter
        • 500以上のマイクロサービス
          • 管理が辛い
            • Service Meshを入れる!
  • Service Mesh
    • MicroService毎にproxyを入れる
      • レイテンシなど見れる
      • ブルー・グリーンデプロイメントできる
        • 細かい制御が可能
    • アプリで制御していた機能を分離できる
    • 開発者はアプリのロジックに集中できる
  • まとめ
    • MicroServiceで大規模開発の効率向上
    • 影響の局所化ができる

Container/Docker

  • コンテナには2種類ある
    • Systemコンテナ
    • applicationコンテナ
      • だいたいこっち
      • Dockerもこっち
  • Docker
    • Dockerfile
    • Docker Image
      • 用意にイメージ化できる
      • イメージのビルド
      • レイヤーを重ねていく
        • tarで固められたファイルが重なっていく f:id:yokoyantech:20190222225524p:plain
      • ビルドキャッシュ
        • 変更がないところはキャッシュとして使える
  • まとめ
    • VMと比べて
      • イメージ化が容易
      • 起動が高速
      • オーバヘッドが少ない

複数のコンテナをどうやって管理する???

Kubernetes

  • コンテナオーケストレーションエンジン
    • なぜ必要か?
      • 複数のDockerホストの管理
      • コンテナのスケジューリング
      • スケーリング
        • などなど f:id:yokoyantech:20190222225634p:plain
  • クラウドネイティブなプラットフォームを実現するためにKubernatesが必要
  • なぜ普及しているのか?
    • 他のエンジンより完成度が高かった
    • わが道を進まず、標準化を進めてきた
      • 中立な立場で開発をしてきた
  • コンテナランタイム
    • Kubernetesは複数のコンテナホストを管理するもの
      • Dockerホストを管理するものではない
        • Dockerの勉強は必要最低限でいい
          • Dockerをどうやって動かすか、というところはKubernetesを勉強したほうが良い
            • Production環境でDockerを動かす場合、Docker単体でやることは少ない

もたらすもの

f:id:yokoyantech:20190222225714p:plain

  • すべてをymlで管理
    • 以下の2つを最低限書く
      • replicas
        • コンテナを起動しておく
      • image
  • Self-Healing
    • ReplicaSetではコンテナ数のReplica数を維持し続ける
  • Rolling Update
    • 自動でやってくれる
      • ロードバランサからの除外
      • コンテナイメージ更新
      • ロードバランサへの追加
    • 柔軟な制御が担保されている
      • 何秒間隔か、など
  • もともとGoogleが社内で使っていたもの
    • BorgをベースにOSS化
      • 自分たちが創る自動化よりも、安定性・安全性が高い!
      • やりたいことは大体できる
  • 抽象化されており、ネットワーク操作もymlを書くだけ
    • インフラエンジニア(Ops)だけでなく、サーバサイドエンジニア(Dev)も使う

Kubernetes is Framework and Distributed System

  • 分散システムとしてのKubernetes
    • 単純にymlを実行しているわけではない
      • Control Loop
        • 今の状態を観察
        • 今と理想状態を比較
        • 差分に対処する処理を実施
          • エアコンで言うところの、今の部屋の湿度からと気温から、調整する、みたいなイメージ
  • カスタムリソースの定義
    • マネージドサービスインスタンスの作成
      • Kubernats経由で実施
        • AWS
        • GCP
        • Azure
    • NatsCluster
  • 中国ではデータセンター全体をKubernetesで管理している
    • いろいろKubernetesで管理できる時代になってきた

CI/CD

  • 個人的に推したいのはGit Ops
    • COMMITハッシュを埋め込むことでどこに戻すか、やりやすくなる

未来性

  • 3大クラウドがSupport
  • エンタープライズの事例
    • イギリスのインターネットバンキングで使用
  • 万が一廃れても、標準化されているので移行しやすい
  • Cloud界のLinuxになる!? f:id:yokoyantech:20190222225816p:plain

まとめ

青山さんのKubernates愛がひしひしと伝わるセッションでした。DockerもKubernatesも名前は聞いたことがあるなー、コンテナ管理だなー、くらいの認識でしたが、とてもわかり易い説明で、「使ってみたい!」と思えるセッションでした。

とても楽しかったので、デブサミが終わった後、Twitterで感想をお伝えしたところ、何とご本人から返信をいただきました。

ブラウザからでも実行できるの事知りませんでした 青山さんありがとうございました!