KubeConでStripeのエンジニアが語ったインフラ移行の現実
2018年12月11日はKubeCon+CloudNativeConの初日であり、午前中のキーノートでは最新のプロジェクトアップデートが行われた。
KubeCon Seattle初日のキーノートはHelm、Envoy、Istio、etcdの最新情報をアップデート
そして午後のキーノートではRed HatのClayton Coleman氏、GoogleのBrian Grant氏、Tim Hockin氏によるKubernetesの振り返り、CNCFのChris Aniszczyk氏によるコントリビューターアワードの発表があり、他にStripeのエンジニアJulia EvansによるKubernetesとEnvoyによるインフラストラクチャーのマイグレーション事例の発表などが行われた。
Tales from the Kube
「Tales from the Kube」と題されたプレゼンテーションでは、初期の頃からKubernertesに関わっていたClayton Coleman氏、Brian Grant氏、Tim Hockin氏が、プロジェクトの沿革などについて語った。特にユーザビリティを向上させるために、コマンドラインツールにおける改善点などを振り返った。
「コミュニティの貢献なくしては現在のKubernetesは存在し得ない」として、会場にいるKubernetesのコントリビューターやKubeConに関わっている参加者を讃えるパートもあり、ベンダーがエコシステムの拡大に大きく影響を与えていることは認めながらも、個々のエンジニアの貢献が重要ということを強調したセッションとなった。
それを引き継ぐように、CNCFのChris Aniszczyk氏がKubernetesへの貢献を表彰するアワードを発表した。これはCHOP WOOD CARRY WATERアワードと呼ばれるもので、Microsoft、Red Hat、Heptioなどのエンジニア、コミュニティに関わるスタッフが表彰された。
ここでも複数の女性が選ばれているのが印象的だ。午前中のキーノートでも、多くのプレゼンテーションで女性が登壇し、CNCFが意図して女性を起用しているのが見てとれる。
次に登壇したのはCiscoのLew Tucker氏だ。Tucker氏は、CiscoのVP/CTO Cloud Computingという肩書で、OpenStack Summitなどでも何度も登壇している。いわばCiscoのオープンソースソフトウェア関連の第一人者として、Ciscoの戦略などを語る役割のエグゼクティブだ。
ただ語った内容はほぼ想定内のもので、サプライズ要素はそれほどなかった、Ciscoとしてのインフラストラクチャーがコード化されること、サービスメッシュへの移行、Istioへの肩入れ、機械学習の隆盛、エッジコンピューティングが重要になるなどのトピックを語った。
Tucker氏のスピーチで業界的にインパクトが大きかったものは、Ciscoの戦略そのものよりも、Tucker氏が2019年1月末でCiscoを退職するという事実(このカンファレンス中に明らかになった)のほうだろう。OpenStack FoundationやCNCFでもボードメンバーとして発言力のあるTucker氏が、次のキャリアとしてどこで何をするのか? は注目されることだろう。
StripeによるKubernetes+Envoyのユースケース
次のプレゼンテーションは、KubernetesとEnvoyを利用したシステムのユースケースとして、StripeからJulia Evans氏が登壇した。Stripeは、オンラインペイメントのプラットフォームを提供する企業として注目されており、そのビジネスを支えるシステムの中身について解説するセッションとして、非常に興味深いものとなった。
Stripeのシステムのゴールは、速度でも処理するクエリーの量でもなく、信頼性とセキュリティであるというのが最初のポイントだ。そのポイントに沿って、既存のシステムをKubernetesとEnvoyを使ったシステムにマイグレーションしたというのが、このプレゼンテーションの主旨である。
何もKubernetesについて知らなかったというエンジニアがKubernetesを理解し、それを本番環境に移す時のポイントとして掲げたが以下のスライドにまとまっている。
最初の「Understand the Design」というのはKubernetesのデザインフィロソフィーを理解して使いこなすということだ。Evans氏によれば、当初は「etcdとAPI Serverが真ん中にあって、他はAPI Serverに繋がっている」と言う程度の認識だったようだ。しかしそれ以降のポイントは、昨今のカオスエンジニアリングとも共通するテーマである。Stripeでは「Gamedays」と呼ばれているが、KubernetesとEnvoyで構成されたシステムを意図的に壊して、そこから発見された問題点を一つずつ解消していくという発想だ。
Gamedaysは毎週行われる恒例の行事となっていたようで、「意図的に問題を起こす」ことでシステムにどんな現象が発生するのか? を確認し、ちゃんと復旧させることを行うもののようだ。
Gamedaysの例として「etcdのインスタンスを強制終了させる」「間違った構成情報をプッシュする」「apiserverのインスタンスを全て終了させる」「コンテナーレジストリーを使えないようにする」「Envoyのコントロールプレーンを利用不可能にする」などが挙げられている。
これをQAステージのサーバーに対して実行し、発生した現象を確認し、復旧出来ないバグがあればそれを解消するというのが、Stripeのクラウドネイティブなシステムへの移行方法ということだ。実際に、あるプロセスを終了させた結果、クラスターの全てのPodをKubernetesが終了させてしまうというバグが発見され、修正した実績があるとEvans氏は紹介した。
そして問題を起こす際に、複数の問題を同時に起こすのではなく、一つずつ実行することで問題の発見、原因の特定、修正案の実行、そして再現しないことを確認というプロセスを実行できると説明した。
Stripeのシステムでは、複雑にしないためにKubernetesとEnvoyだけを実装して、他を入れなかったという。この辺りにも、問題特定~修正のサイクルを素早く回せるコツがあるように思える内容だ。修正も一度に多くのものを直さずに少しずつ修正する、常に元の状態に戻せるようにロールバックのプランをちゃんと作るという。この辺りはクラウドネイティブ、アジャイル開発、DevOpsといったバズワードに惑わされずに、冷静な視点でシステム移行に取り組む姿勢が見えたプレゼンテーションとなった。
また後半の内容として、組織のカルチャーとリーダーシップにも言及した。これは、今後新しいシステムを導入しようとする日本企業にも当てはまる内容であろう。「専門家にならなくても新しいことを始めても良い」「学ぶための動機付けが必要」「専門家の養成には時間がかかる」などの言葉が刺さるエンジニアも多いのではないだろうか。
特に管理職にとって、問題が発生した際にすぐに解決を求めてしまうのではなく、十分に時間的な余裕を与えることが必要と語り、エンジニアを抱える開発・運用グループのマネージャーにシステムを導入する際の重要なポイントを提起したと言える。
Evans氏のプレゼンテーションは動画としても視聴することができるので、ぜひその内容を動画で体験して欲しい。
参考:Keynote: High Reliability Infrastructure Migrations - Julia Evans, Software Engineer, Stripe
また利用した手書き風スライドもインターネットから参照できるので、こちらも参考にして欲しい。
スライド:https://schd.ws/hosted_files/kccna18/46/julia%20evans%20talk.pdf
その後に登壇したのは、Stripeが全面的に利用しているAWSのArun Gupta氏だ。Gupta氏はAWSによるKubernetesやその他のオープンソースソフトウェアに対する貢献を説明した上で、軽量の仮想マシンランタイムであるFirecrackerを紹介した。
Firecrackerは、AWSの中では珍しく最初からオープンソースソフトウェアとしてリリースされることを目的として開発されたソフトウェアであり、これまでオープンソースソフトウェアへのフリーライダーとして批判されていたAWSの面目躍如と言ったところだろう。KVMをベースに改造されたFirecrackerは素早く起動でき、セキュリティも確保されたRustで書かれた軽量のランタイムとして注目が集まっている。
Gupta氏はまとめとして、AWS上でのKubernetes-as-a-Service(KaaS)の提供、EnvoyベースのSaaSメッシュ、サーバーレスを意識した軽量の仮想マシンランタイムなどを挙げ、AWSとしてクラウドネイティブなコミュニティに全面的に協力する姿勢を示して、プレゼンテーションを終えた。
初日午後のキーノートはCisco、AWSといった大手のきちんと型にはまったプレゼンテーションの中で、リアルな現場からの声と言えるプレゼンテーションを行ったStripeが、非常に目立った内容となった。