みなさんこんにちは、EMとSREの両立を何とか頑張っている杉山です。最近はレビューばかりではなく、手を動かす時間が増えてきて嬉しい今日この頃です。(ロール的に良いのかはさておき・・・😇)直近ではEKS アップグレード時に BG デプロイを実施するため、ALB と Istio の構成を見直していたのですが、それはまた後日、改めて投稿できたらと思っています。
今回は、2024年8月27日に開催された「KubeDay Japan」に現地参加してきましたので、その感想など書いていきます!ちなみに今回が初めての参加でした!
この記事は杉山、迫田の共同執筆です。
KubeDay とは?
詳細は公式サイトに記載されています。
KubeDayイベントは、国際的エキスパートや開催地域のエキスパートと、アドプター、デベロッパー、プラクティショナーを国際都市で結び付け、対面のコラボレーションを促進し、豊かな教育体験を提供します。このイベントシリーズはCNCFが主催し、コミュニティの拡大と関心を経験している特定の地理的地域をターゲットにしています。Kubernetesやその他のCNCF主催プロジェクトのリーダーらと連携し、クラウドネイティブ エコシステムの方向づけに参加しましょう。
CNCF (Cloud Native Computing Foundation) が主催する、Kubernetes にフォーカスしたリージョナルイベントということですね。日本で開催されるのは二回目のようです。今回は有明セントラルタワーでの開催ということで、目の前にビッグサイトが見える良いロケーションでした。
セッション感想など
当日のセッションは以下のプレイリストが公開されていますので、現地参加できなかった方もこちらで見ることが可能です!
Keynote
初めに、今回の KubeDay Japan Co-Chair を務める Kohei Ota さんから、Kubernetes が10周年を迎えたこと、今では Kubernetes を中心に多くのエコシステムが発展してきたことに触れつつ、その発展を支えてきた日本の TOP コントリビューター(法人、個人) が紹介されました。
私たちのチームは Kubernetes だけでなく、多くの OSS を活用しています。そのため、私たち自身も、単に利用するだけでなく、何らかの形で貢献していかなければと考えることが増えてきました。もちろん「お客さまファースト」を掲げる内製開発チームとしては、東京ガスのお客さまを第一に考え、行動することが最も重要なミッションです。一方で、私たちはそれぞれ「いちソフトウェアエンジニア」でもあります。だからこそ、OSS コントリビューターたちに敬意を払い、ただ利用するだけの立場から抜け出さなければならないのではないか、と感じています。ここは引き続き、着実に一歩ずつチームとともに成長していきたい次第です。(たとえばチームを拡大させて活動時間を会社として設けられるようにしたり、会社としてスポンサーになるなど)
また、コード以外での貢献についても紹介されており、CNCF の新たな認定 : Kubestronaut の紹介もありました。
実は私、杉山も、スライドで紹介された日本に13名いる Kubestronaut の一人だったりします!(ブログ執筆時点では15名に増えていますね!)
こちらも 認定資格を全て取得して終わりではなく、今後もコミュニティに何かしらの貢献をしていけたらな、と・・・まさに "What can 'I' do?" にて触れていた部分です。
Keynote では他にも、Yuichi Nakamura さんから、昨年12月に発足した Cloud Native Community Japan(CNCJ) について詳しく紹介されていました。これまで独自に行われていたクラウドネイティブに関する活動をまとめていくにあたっての経緯や成果について触れられており、今年の KubeDay Japan はスポンサーさまも非常に増えたようです。当社もこういったところでスポンサーになっていけるよう頑張ります・・・!
個人的には、社内のイベントと重複して参加できなかった Kubernetes Upstream Training Japan に関するセッションが興味深かったです。特に日本人にとっての障壁「英語」「文化」はまさにその通りだなと感じています。しかし、今年は同僚とともに11月の KubeCon にも参加予定ですし、英語の壁を徐々に取り払っていきたいです!そして次回の Training にはぜひ参加したいと思っています。
Towards a World Without Dependency Consideration
本セッションでは、リソースの誤削除防止、依存関係を考慮した削除順序の制御機能(日立さんが Kubernetes に提案している "Lien" と呼ばれるもの) の紹介と、同様のユースケースについて Crossplane でどう実現しているのか、デモを交えながら紹介していました。
セッション前の私個人の Crossplane への理解は、すべてのクラウドリソースを Kubernetes で管理しようって世界観なんだな!程度の理解でした(浅い・・・)。あとアイコンが可愛いですよね。
タイトルの "All Resources Be Deleted Simply" を実現したいというモチベーションは確かにあるなあ、と。Crossplane では Usage
リソースを作成して spec.of
と spec.by
で依存関係を明示することで実現しているのですね。
Lien
github.com
Usages
docs.crossplane.io
誤削除防止は非常にありがたいなと思う一方、 Usage
リソースに大量の記述をしていくトレードオフはありそうだなと。ただ、アプリケーション開発では依存関係を常に気にしますし、リソースの依存関係もしっかり管理しないといけませんよね、本来は。
Expedia Group's Downtime-Free Shift
2,100 のサービスと 180 の production クラスターを運用している Expedia における Zero Downtime Shift 実現について紹介していました。当チームがここに辿り着くのはいつになるでしょうか・・・
Amazon EKS で istio-proxy から他クラスターへ NLB を利用して通信をする構成で、通信先のノードを drain したあと、Auto Scale Group (ASG) から上手く deregister 出来ず、クライアントからの接続がロストしてしまう事象があったそうです。そこで NLBを instance モードから IP モードにして、 Istio Ingressgateway をターゲットにすることで接続をロストせずに済むように設計しつつ、移行にあたって Zero Downtime Shift も実現できたということでした。動いているマイクロサービスへの影響が全く無かったというのはすごいですね・・・!
前提として、マイクロサービスが HTTP/1, HTTP/2, gRPC といったプロトコルを利用しており、これら全てに効果的なソリューションが必要だったようです。これは今後マイクロサービスを構築していく当チームも、問題が発生したときのリアーキテクチャでは意識しなければならないのだろうなと思っています(クラスター間通信が発生するのはまだ先になりそうですが・・・) 。istio ingressgateway Pod の負荷については、直近で当チームも気にしているところなので、ここもケアしないとですね。
また、ロールアウト準備としてのトピックも挙げています。特に「何をもって本番環境で"確実に"ロールアウトする準備が出来ていると言えるのか」というのは難しいですね。どんなにステージング環境でテストしても、本番では思わぬ事態が起きがちですし、「絶対」がない中でどこまで準備するか・・・ここではロールバックできる準備の大切さも説明していますが、複合的な観点でのチームの合意形成が大切なのだろうなと受け止めました。
実際のロールアウト実行フェーズについても紹介していましたが、Alpha Pilot Run での手作業によるロールアウトで生じる接続エラーは、来るものがありますね・・・ Gamma Pilot での "DNS update failure" も、最近、開発環境のドメイン移管でやらかした私の胸に来るものがあります (Expedia ではクライアントの DNS キャッシュが残っていたようですが)。
最後に 5xx エラーのモニタリング結果を照会していましたが、キレイにゼロになっているのは感動ものです。すごい・・・!"5xx Error reduced to ZERO" という文字が際立ちますね!ただ、Expedia チームも最初はこの取り組みについて「簡単だろう」と考えていたとのこと。想定以上の困難が生じても、やりきった Expedia チームの素晴らしさを感じます。
Scaling Time-Series Data to Infinity: A Kubernetes-Powered Solution with Envoy
Grafana Loki にコントリビュートもされている Hiroki Sakamoto さんのセッションでは、無限にスケールする大規模な時系列データベースの構築について紹介していました。
ペタバイトスケールのメトリクスデータを取り扱う必要がある中で、Cassandra にデータを保存することがコストやスケーラビリティなどの観点でボトルネックになってしまったそうです。そこで、コスト効率が良く、スケーラビリティも確保できるオブジェクトストレージを保存先として選択し、そこに対して適切にデータを読み書きするための分散データ処理システムを Kubernetes 上に構築されたとのことでした。
データ保存先を変更することはきっと容易ではなく、登壇でお話しされていたこと以上に考えなければいけないことが多かったのではないかと想像しているのですが、そこを作り上げるパワーはすごいと思いました・・・!既存の仕組みにおける課題があったとき、OSS を活用して自分たちでソリューションを生み出すマインドは私たちのチームでも大切にしたいです!
また、最後のスライドに “Always seeking opportunities of contributions” との言葉があったのですが、OSS を導入し利用することから始めつつ、その利用の中で得られた知見をコミュニティーに展開していくことで貢献する姿勢は、いつか私たちも実践しなければと思いました・・・!
ネットワーキング
Keynote 後や Lunch はもちろん、全セッション終了後にもネットワーキングの時間があり、同じ Kubestronaut の方に初めてお会いするなど、現地参加の魅力を存分に味わうことができました。他のエンジニアの方々がどんな活用をしているか、どんな苦しみ(笑) があるのか、こういった場でしか話せないことが多いのも良いですね。また、CNCF の方とお話する機会や、FinOps Foundation のことをお伺いできたり、交流だけでなくここでも多くの学びを得ることができました。
そして食事が豪華でした・・・!スポンサーさまありがとうございます・・・!
今後に向けて
一日中 Kubernetes の話を聞くという贅沢な時間を過ごすことができ、改めて参加できたことに感謝しています!そして皆さまから take するだけでなく、これからは当チームでの活用事例などを積極的にシェアしていかなければと改めて感じました。まだまだ Kubernetes の deep な活用が出来ているとは言い難いですが、発足したばかりの内製開発チームだからこその気付きなど、少しでも誰かの役に立てるようなものを発信していけたらと思います。
そして個人的には、ドキュメントからでも小さくコントリビュートしていきたい・・・!これが次の目標です。
余談
杉山の個人的な話になってしまいますが、 Kubestronaut の特典として貰えるジャケットを KubeDay Japan の会場で受け取ることができました!わざわざ持ってきてくれた Jeffrey, ありがとうございました! Thank you so much for bringing the jacket !!
前述しましたが、「資格を持っているだけ」の人間にならないよう、これからも日々精進してまいります!💪
それでは、最後までお読みいただき、ありがとうございました!
当チームは積極的な採用を行っています!もしこうした環境やチームに魅力を感じる方がいらっしゃいましたら、ぜひお気軽にお話をしましょう!
アプリケーションエンジニアはこちらから! www.wantedly.com
モバイルアプリエンジニアはこちらから! www.wantedly.com
SRE はこちらから! www.wantedly.com