KubeCon+CloudNativeCon参加報告

f:id:vasilyjp:20181215164829j:plain

こんにちは。そろそろ生後7か月になる息子が可愛くて仕方がないうっちー(@k4ri474)です。

12/10〜12/13に開催された KubeCon+CloudNativeCon へ参加してきました。
大型カンファレンスらしい演出のKeyNoteやハンズオンセッション、プレゼンテーションなど盛り沢山なイベントでした。

今回、僕はKubernetes運用経験やDockerを用いた設計・開発の経験がほとんどない状態で参加しました。
現状はチーム・個人として業務の中心にはなっていないものの、今後の技術選定に関わるタイミングで選択肢としてKubernetesを持てるようにキャッチアップしておきたかったというのが理由です。

知っていて選定しないのと、知らずに選定できないのとでは大きな違いがあると思っています。
カンファレンスはKubernetesの盛り上がりを肌で感じて手を動かして身につけるキッカケにしようと意気込んで申し込みました。

本記事では、ビギナー目線で印象に残ったセッションをメインにしていくつかご紹介します。
KeyNoteは後ほど動画がアップロードされるかと思うので取り上げません。また、セッションのスライドURLを貼りましたが、埋め込みできる形式でアップロードされておりませんでしたので、リンクを開いてご覧いただければと思います。

KubeCon+CloudNativeConとは

コンテナオーケストレーションツールであるKubernetesと、CNCFがホストするPrometheusやEnvoyなどのOSSについて、最新技術やユースケースなどが紹介されるカンファレンスです。

概ねKeyNoteから始まってプレゼンテーション・ハンズオンを挟み、KeyNoteで終わるといった構成になっています。
KeyNoteの時間以外は同時刻に15ほどの別々のテーマの発表が行われていて、参加するセッションを自由に選択する形式です。

また、常時スポンサーブースが開設されていて、営業・広報担当者だけでなく時には開発者と直接会話できます。

印象に残ったセッション

You can't have a cluster[bleep] without a cluster

You can't have a cluster[bleep] without a cluster

heptioのSenior Developer Advocateによる、Kubernetes自体の複雑さ・リスクを認識した上でどのような取り組みをして乗りこなしていけばよいか、というセッションでした。

Kubernetesの望ましい特徴として回復性・効率性・反復性が挙げられるが、複雑性やリスクも内包している、ということが最初に強調されました。
Kubernetesはアプリケーション・OS・ハードウェアなど多くのコンポーネントに対して干渉できる故、把握すべき範囲が広がっていることが一因とのことでした。

また、先日発覚したCVE-2018-1002105も触れられ、適切な設定で構築しないとKubernetesクラスタが攻撃者の手に落ちるというような大惨事も発生しうるということを改めて振り返りました。

これらの複雑性・リスクと向き合うためには、以下の4つが重要だそうです。

  1. Learning to mitigate hazards and observe our systems
  2. Learning to measure our systems
  3. Learning to build tools to gain confidence
  4. Learning from our mistakes

僕はこれまでKubernetesの優れている話を聞く機会が多かったです。実際には便利なだけではなく複雑なシステムになりうることを認識し、うまく扱っていくことが重要なのだと認識できた良いセッションでした。

Monolith to Microservice

Monolith to Microservice

GitLabがシステムのマイクロサービス化に取り組んでいる中で過去に取ったアプローチや、今後の挑戦について語られたセッションでした。

モノリスとマイクロサービスの長所短所の紹介から始まり、Gitホスティングサービスの特性・直面する課題について触れつつ、モノリスが持つ制限から解放されるためにマイクロサービス化を推進し始めた話に入っていきます。

GitLabではディスクをスケール・高速化するために導入したNFSによって、ディスクI/Oとネットワークスループットという新たな課題に直面した過去があるそうです。
これを解決するために、GitalyというRPCを利用したOSSを開発し、プロダクション環境へ導入しています。

GitalyのREADMEによると、GitLab 11.5の時点でほぼ全てのアプリケーションコードが、ディスクへの直接アクセスではなくGitalyを通じたアクセスに置き換わっているようです。

GitLabはGitalyによっていくつかの問題を解決していますが、ロードバランシングやスケーリングなどまだ課題があるようで、引き続き推進していきたいとのことでした。
システム全体を俯瞰で見た時にどのような課題があって、それをどうやって解決していくかを見据えて開発を行なっているようで、この視点・進め方は見習いたいと感じました。

MySQL on Kubernetes

MySQL on Kubernetes

Kubernetesの機能を利用することで、RDBも自然な形でコンテナとして管理することが可能だ、ということをデモを交えて紹介するセッションでした。

Cattle vs. Petsという例えがありますが、一般的にRDBはペットのように扱われるため、イミュータブルなコンテナでRDBを動かすことは難しいと僕は思っていました。

RDBのコンテナ運用は以下の機能・ソフトウェアを利用することで実現するようです。

  • Affinity and anti-affinity :DB用の特定のホストにMySQLのPodを配置する
  • StatefulSets :ノード障害時の台数維持を行う
  • Headless Service :MySQLのPodをディスカバリーする
  • StorageClass, VolumeClaimTemplate :永続化ボリュームのプロビジョニングとその定義
  • MySQL Operators :Kubernetes上でCRDを使ってMySQLクラスターを作成・設定・管理するためのソフトウェア

上記のリストを見てわかる通り、MySQL Operatorsの存在がキーのようでした。
OSSとしてはMySQL OperatorPresslabs MySQL Operatorなど複数あるため、要件に合わせて選択することになります。

僕は業務でAmazon RDSのAuroraクラスターを運用することがあるのですが、まさしくペットのように扱っています。このセッションを通してRDBもコンテナ運用できるという選択肢を持てたので、1つ自分の中の手札が増えてためになりました。

帰国次第、サンプル等を使って自分で手を動かして構築してみようと思っています。

まとめ

Intro系セッションへの参加がメインでしたが、様々な切り口のプレゼンが行われていため毎日毎セッションが興味深く、意欲的に参加できました。
このブログには書きませんでしたが、心に残ったものが他にいくつもあります。

大変勉強になったと同時に技術・人の両方の盛り上がりを肌で感じられて非常に良い経験でした。
実際の業務へどのようにして取り入れられるか考えながら参加したため、自分ごととして学べたことが成果だと感じています。

それと同時にCNCFのプロダクトの魅力に触れ、自分も開発に携わりたいと感じました!

ZOZOテクノロジーズでは、最新技術をキャッチアップしつつ地に足のついた技術選定ができるエンジニアを大募集中です。ご興味のある方は、以下のリンクからぜひご応募ください!
www.wantedly.com

カテゴリー