こんにちは、エンジニアの id:tsub511 です。
先日 Kubernetes.rb という勉強会があり、そちらの講師役として参加してきました。
.rb
と言いつつ Ruby の話は一切ありませんでした。タイトルの伏線は回収されず 😁
参加の経緯
さて、今回自分としては初の勉強会の主催側 (?) としてお手伝いすることとなったのですが、その経緯について軽くご紹介します。
もともと一からイベントを企画したわけではなく、主催の @yoshi_hirano さんが講師役を募集していたところに応募した形になります。
ただ、応募の経緯としては先日ご退職された元フィードフォースの @284km さんから、「講師役やってくれる人を1名探しているんですが、tsub 氏どうですか?」というお誘いを貰い、やってみたいと思ったので繋いでいただいた感じです。
ちなみに社内で Kubernetes について勉強していくぞ!!的なチャンネルが最近できました。
実際の準備
やると決まってからは当日まで 1 ヶ月半ぐらいあったのですが、そこからは Twitter でグループ DM しながら準備を進めていきました。
とはいえ、お互い顔も分からず会ったことのない中で Twitter の DM オンリーで準備を進めていったので少々不安を感じながらも、@yoshi_hirano さんやサポート役の @katsuhisa__ さんから優しくして頂けたので問題なく進められました。
準備に際しては以下のリポジトリのコミット権を貰い、そこにサンプルを自分が足していきました。
また、Rails のサンプルアプリについては以下のリポジトリも用意してもらいました。
あとは当日までひたすら YAML を書く... 😇 という感じになります。
最初に作った Rails 用の YAML には結構時間がかかったものの、残りのアプリはほとんどコピペでサクサク進んでいきました。
ただ、Sentry などは自分で動かしたことがなかったので、Kubernetes で動かすというよりはアプリそのもののセットアップ手順や構成などを理解するのに時間がかかったように思います。
また、Discourse と GitLab については Docker イメージの使い方が独特で、Discourse の方は独自のシェルスクリプトを使っていて読み解くのがが大変そうで、GitLab の方はコンテナを動かしたら Chef が動き始めて色々インストールしだしたので諦めました。
代わりに Mastodon を動かすことになりました。動かし始めたらいけそうだったので、勢いで当日の朝も準備をしてました..
勉強会当日の様子
会場は株式会社万葉さんのオフィスをお借りしました (自分がその辺りを手配したわけではないです)。
とても快適でした。万葉さんありがとうございました 🤗
特に、Chrome Cast に繋がったプロジェクターが設置してあり、各自何か言いたいことがある時にサクッと画面共有できて良かったかと思います。
全体としては 12:30 ぐらいからゆるっと始まり、17:30 ぐらいに解散しました。
最初に @yoshi_hirano さんから流れの説明があり、各自簡単に自己紹介をした後はそれぞれ資料を見ながらもくもくやっていました。
ただ、最初に Minikube で躓く人が多かったようです。
以下の Issue を参考に、最終的に $ minikube start --vm-driver=hyperkit --bootstrapper=localkube
で動いたようです。
ちなみに自分は $ minikube start --vm-driver=hyperkit
だけで動きました。
Minikube が動かないので GKE で進める方も多かったようです (サンプルは Minikube と GKE 両方の手順を用意していました)。
後は、イメージの Pull や DB のマイグレーションジョブの実行など、待ち時間が多かったためか、それなりにわいわい話しながら皆で進めてました。
自分は講師役という立ち位置でしたが、感覚的にはどちらかというと大学の講義で手伝いをしていた感じです。
質問があったら近くに行って答えるのを繰り返しつつ、何もない時は Mastodon の GKE 版のサンプル資料を作っていました。
最終的には Mastodon まで動かせた方も多く、サンプルを用意した自分としては非常に嬉しかったです ✨
また、最後に KPT 方式の振り返りをやったのですが、Trello を使ったやり方が個人的にはすごく良かったです。
会社でもやってみたいなと思いました。
振り返りの様子。
なお、どうやら弊社で月一でやっているもくもく会がたまたま同日開催で場所も神保町と、会場のすぐ側でやっていたようです。
id:masutaka26 がひっそりとリモートで参加していました 😎
02_nginx でこんなエラーが出た #localhost9292
— Takashi Masuda (@masutaka) 2018年7月21日
$ kubectl apply -f k8s/deployment.yaml
Error from server (BadRequest): error when creating "k8s/deployment.yaml": Deployment in version "v1" cannot be handled as a Deployment: no kind "Deployment" is registered for version "apps/v1"
minikube のアップデートで直った!
— Takashi Masuda (@masutaka) 2018年7月21日
資料の補足
KPT の P にも上がっていましたが、途中実行待ちが長いときに「これは上手くいっていて単純に時間のかかる処理なのか、そもそも上手く動いていないのか」というお声を頂きました。
それについてはログを見る方法についても明示しておけば良かったと思っています。
Kubernetes でログを見るには $ kubectl logs
コマンドを使います。
$ kubectl logs -f <Pod Name>
(tail
と同じように -f
でストリーミングができます)
Job の実行時などにはログを見ながら今何が動いているのかを見るとより分かりやすかったと思います。
また、今回は Pod, Deployment, Service などの概念についての説明をせずにとりあえず手を動かしてみるという会でしたが、その辺りについては Kubernetes.rb #2 が開催されるようなので、興味のある方はぜひご参加ください! (自分は次回は参加しないですが 🙇)
やってみた感想など
今回初めて勉強会の主催側として参加したわけですが、感想としてはやって良かった!!と思っています。
そもそも Kubernetes についてはまだ仕事で使っているわけでもなく導入の検討段階ですし、個人で趣味レベルで動かした程度だったので今回の資料作成の中でかなり理解が深まったと思っています。
また、メンタル的にも成長できた気がします。
会ったことのない社外の人たちがいる場に飛び込むのは個人的にはなかなかハードルが高く、今まで勉強会に参加する際は懇親会にはあまり出ないタイプだったのですが、今回の体験で「あ、なんだ。こんな感じなのか」みたいな感覚を得られたので今後は懇親会などに参加して社外の人とも交流する勇気が少し出ました。
それでは最後に改めて、@yoshi_hirano さんや @katsuhisa__ さん、会場を提供してくださった万葉さん、参加してくださった皆様、ありがとうございました 👋