Sジブンノート

Cloud Native Days Tokyo 2019 -2019年7月22-23日参加レポート

今回、東京で開催されました Cloud Native Days Tokyo 2019 に 2 日間とも参加してきましたので、報告しようと思います。 セッション毎の報告というより、全体を通した感想を話そうかなと思います。

https://cloudnativedays.jp/cndt2019/

リンクをまとめています。

https://qiita.com/zaki-lknr/items/1c26bb713aef9645f5e6

CNCF の利用率

一日目の Keynote で印象的だった内容です。 発表者は、OSDT 実行委員長である長谷川さんです。

来場者アンケート 1354 人から聞いた「クラウドネイティブ技術を活用フェーズについて」の紹介がありました。 既に本番環境に適用している人は、なんと46%という驚きの結果でした。また、開発環境に至っては、63%ということでした。
このイベントに参加している時点である程度フィルターはかかっていると思いますが、それでも大きな割合だと感じました。

次の図では、CNCF プロジェクトの 180 日間における Commit 数をグラフ化したものです。 生みの親である Google が 1 位で independent(個人)が 2 番目、日本企業 Fujitsu が 6 位です。熱意が伝わってきますね。

https://www.stackalytics.com/cncf?date=180
タップして拡大
https://www.stackalytics.com/cncf?date=180

※ 2019/07/24 時点

ただ、CNCF のメンバーとして日本企業は17 社しかないそうで、まだまだこれからといったところでしょうか。

https://landscape.cncf.io/members

さらには、Kubernetes から認定された日本企業ではまだないみたいです。残念です。

https://kubernetes.io/partners/#kcsp

今後は、次のようなカンファレンスが海外でもあるみたいです。ぜひ参加してみたいと思います。

https://events.linuxfoundation.org/events/kubecon-cloudnativecon-europe-2019/

https://events.linuxfoundation.org/events/kubecon-cloudnativecon-north-america-2019/

CloudNative とは?

クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミューダブルインフラストラクチャ、および宣言型 API があります。

https://github.com/cncf/toc/blob/master/DEFINITION.md#日本語版

「スケーラブルなアプリケーションを構築および実行」が重要です。これを実現する手段の1つに Kubernetes があります。 「CloudNative = Kubernetes」ではなく、「CloudNative ∋ Kubernetes」という感じです。

ただ、最近では Kubernetes を違う観点で考える人が増えてきたそうです。 それが、二日目の Keynote で発表された北山さんのスライドにあります。

https://speakerdeck.com/shkitayama/change-the-game-change-the-world

Kubernetes は「platform のための platform」と言われるようになりました。 これは、slide.No.9(Kubernetes is a platform)で見て分かる通りで、次のようなことがわかります。

  • 運用管理者
    • Self-Healing によってスケールが簡単になる
  • アプリケーション開発者
    • 簡単にデプロイすることができる

これらは、たしかに「プラットフォームから得られる価値」になりますが、 逆に次のような考慮が必要なってきます。

  • 運用管理者
    • Self-Healing はどこまで信頼性を担保できるか
  • アプリケーション開発者
    • ユーザー影響を最小限にするためには、どうればよいか

これらのような「プラットフォームを利用するコスト」が「プラットフォームから得られる価値」よりも大きくなってしまいがちになります。 そこで、Operator (CRD)という概念が最近ホットになっています。

なぜ CRD がホットなのか?

CRD という言葉は様々なセッションで取り上げらていました。 CRD と Operator については、下記をご参考下さい。

https://silverbirder.github.io/blog/contents/kubernetes_meetup_tokyo_19_osaka_satellite

Kubernetes を運用すると、既存のリソースだけでは物足りない所がでてくるそうです。 そういう部分が「プラットフォームを利用するコスト」を大きくしてしまいます。 そこで、オリジナルのカスタマイズしたリソースを独自に開発し、運用を自動化することを目的とした CRD、Operator が生まれました。 ただ、独自に 1 から作るよりも、下記のサイトから使った方が効率的なときもあります。

https://operatorhub.io/

けど、結局は困ったとき、ソースコードを読むことになるので、それぐらいの能力がないと、 運用を回せない気がします。

zlab の ladicle さんの次のスライドがとてもわかりやすく、まとまっていました。 これは貴重な資料ですね。

https://speakerdeck.com/ladicle/kuberneteswokuo-zhang-siteri-falseoperesiyonwozi-dong-hua-suru

ちなみに、独自に 1 から作ったケースがサイバーエージェントの山本さんの発表で、次のスライドです。

https://speakerdeck.com/mayuyamamoto/kuberneteskuo-zhang-woli-yong-sitazi-zuo-autoscalerdeshi-xian-surusutoresuhurinayun-yong-falseshi-jie

同じくサイバーエージェントの青山さんがライブコーディングされていたリポジトリが次のものになります。

https://github.com/cloudnativejp/webserver-operator

Kubernetes は必要ですか?

Kubernetes を使うべきかの話が 2 日間でちらほらありました。 次のような議論もあります。

https://www.atmarkit.co.jp/ait/articles/1907/23/news120.html

CloudNative なアプリケーション構築を目指す場合、どうしても Kubernetes を使う方向になりがちですよね。
今回参加したセッションの多くの企業では、Kubernetes を採用するための検討が下記のような感じでした。

  • プレインな Kubernetes か、マネージドな Kubernetes か
    • 大体はマネージドな Kubernetes を使う。
    • かゆい所に手を伸ばすときになって、プレインな Kubernetes を使う。
  • Kubernetes のエンジニアは何人か。それは専属か
    • どこも Kubernetes の知識を保有するエンジニアは少ない。
    • 数人程度で専任で進めることが多い。
  • ノウハウを蓄積するために、スモールスタート

様々なセッションがあった中で、とても王道なステップを踏まれている企業がありました。それは、SoftbankPaymentService の鈴木さんの次のスライドです。

https://www.slideshare.net/JunyaSuzuki1/springpcf-cndt2019-osdt2019-keynote

企業に適した CloudNative 化だなと勉強になりました。
特に「運用を回すコストを考慮すると、Kubernetes ではなく PaaS を使う」 というポイントが好きです。

Circuit Breaker

耳にタコができるぐらい、この単語を聞きました。 下記のサイトが参考になります。

https://qiita.com/yasuabe2613/items/3bff44e662c922083264#circuit-breaker

同期リクエストの先で一部のマイクロサービスに障害があると、クライアントやその先の「クライアントのクライアント」までブロッキングが波及することになりかねない。 この問題を、クライアントと実サービスの間に Circuit Breaker と呼ばれるプロキシを介在させて、実サービスの呼び出し失敗が一定基準を超えると、クライアントからのリクエストを即座にリジェクトさせて、ブロッキング連鎖を解消するパターン。

Kubernetes でアプリケーションを構築すると、分散システムの恩恵を受けるために、 アプリケーションをマイクロサービス化する流れになります。そのマイクロサービス化でよく踏む地雷が、 「後ろの API が死んだら、連鎖的に他サーバも死ぬ」という現象です。
これを回避するために、上記の Circuit Breaker パターンを使う企業が多数いらっしゃいました。 本当にいろんなセッションで聞きました...。

twelve factor app

次の Wantedly さんのスライドが、私の中では話題になりました。

https://speakerdeck.com/potsbo/k8s-kubernetes-8-factors

要は、「アプリケーションとしての設計の考え方(twelve factor app)を、インフラ部分でも適用してみた」という感じです。 どれも具体的なところまで説明されており、実際に Kubernetes を構築する際に役に立つものだと思います。

技術にフォーカスした発表

今回のイベントでは、何か 1 つの技術にフォーカスした発表が多くありました。 それぞれ私なりにまとめてみました。ご参考下さい。

Chaos Engineering

https://speakerdeck.com/mahito/cndt-osdt-2019-2g1

Docker

https://www.slideshare.net/AkihiroSuda/cndt-docker

Envoy

https://speakerdeck.com/taiki45/cloudnative-days-tokyo-2019-understanding-envoy

Logging

https://speakerdeck.com/yosshi_/kubernetes-loggingru-men

LinuxKernel

https://speakerdeck.com/tenforward/cndt2019

Prometheus

https://speakerdeck.com/tokibi/prometheus-setup-with-long-term-storage

Sandbox

https://docs.google.com/presentation/d/1O9Q9E1hH6mBA5w8oDENnCYObZvij1-Dr_obvsY3X29k/edit

Scheduler

https://speakerdeck.com/ytaka23/cloudnative-days-tokyo-2019

Spinnaker

https://speakerdeck.com/sansanbuildersbox/introduction-to-deployment-patterns-with-spinnaker:embed]9

Istio

https://speakerdeck.com/dangossk/a-deep-dive-into-service-mesh-and-istio-cndt-2019

その他

サイバーエージェントさんより、エンジニアにとってとても嬉しいアイテムを頂きました。

https://twitter.com/ca_adtechstudio/status/1152080444445167616

さっそく、キーボードにとりつけてみました。最高です!

ergodox with k8s keycap (cyberAgent)
タップして拡大
ergodox with k8s keycap (cyberAgent)

こちらのサービスから作られたそうで、私も自前で何か作ってみようかなと思いました。

https://www.wasdkeyboards.com/

最後に

CloudNative にどっぷり浸かった 2 日間でした。
どの企業でも CloudNative を導入したことによる「つらみ」や「価値」を共有して頂いたおかげで、これから導入する人たち(私を含む)にとっては、有意義な時間でした。
全てのセッションを吸収できたわけではないですが、ここで記載したスライドだけでも理解を深めたいなと思います。

https://cloudnativedays.jp/cndk2019/

今度は大阪で開催されるそうです。これも絶対参加したいなと思います!

蛇足(参加するまでの経緯)

筆者は Web が大好きなエンジニアで、Kubernetes については理解が浅い人間です。主にフロントエンドに注力しています。
ただ、昨年の DeveloperBoost2018 で、サイバーエージェントの青山さんのセッションをうけて Kubernetes に興味を持ち始めました。

https://codezine.jp/article/detail/11291

青山さんは Kubernetes にとても詳しい方で、世代が近いせいか、私もこれぐらい夢中になれるものを見つけたいと感じるようになりました。
私は Web に関わるものなら何でも好きで、Kubernetes も含まれます。そこで、青山さん著作のKubernetes 完全ガイドを全て実践することにしてみました。もちろんお家 Kubernetesでです。 実際に触ってみると、スケールする簡単さに驚きました。ほぼコマンド一発で Pod が複製されて、「え!?」とびっくりです。
そこから、段々とハマっていき今回のイベントに参加することになりました。