こんにちは、ストレージチームの林、大神です。
サイボウズでは毎年サマーインターンシップを開催しています。2023年度のサマーインターンシップもさまざまなコースを用意しました。本記事では8/28(月)~9/8(金)の10日間にわたって開催されたストレージコースでの取り組みについて紹介します。
ストレージコースでは昨年までと趣向を変えて、ストレージチームの普段の業務にほぼそのまま参加してもらい、よりリアルな業務を体験していただきました。 今回のインターンシップの参加者は1名でした。
一日の流れ
ストレージチームの業務は主にモブプログラミング形式で行っています。そのため、今回のインターンでもインターン生1名と社員2名の合計3名で Zoom を用いたリモートモブプログラミング(以下、モブ)を行いました。
ただし、ストレージチームでは一日中モブを行っているわけではなく、モブの開始前と終了後のそれぞれ一時間は個人で好きに使ってよい時間としています。 この時間では気になっている技術の勉強をしたり、コードベースの改善活動を行ったりと、 チームメンバーがそれぞれ自分で考えて行動します。
今回のインターンでもこの時間はいつも通り確保し、 インターン生には知識の整理のための時間としてもらったり、モブでのタスクとは別に個人用のタスクに取り組んでもらったりしました。
インターン全体のタイムスケジュール
- 8/28(月)~8/29(火):人事オリエンテーション、チーム紹介、講義
- Kubernetes、Rook/Ceph、およびストレージチームが開発している新 Blob サービス(後述)等について説明しました
- 8/29(火)~9/7(木):モブ、各種ミーティングへの参加、個人タスク
- タスクを実施する時間の他に、実際にストレージチームが行っている各種ミーティングにもほぼそのまま参加してもらい、リアルな業務の雰囲気を味わっていただきました
- 9/8(金):成果発表、懇親会
ミーティングへの参加
リアルな業務を体験して頂くという趣旨のもと、今回のインターン期間中にストレージチームが開催したミーティングにはインターン生にもほぼ全て参加していただきました。 Daily meeting では個人で取り組んで頂いたタスクの軽い進捗報告をお願いしました。
また、インターン期間中に発生した障害の振り返り会にも参加して頂きました。 障害の発生は偶然だったのですが、ウェブサービスを提供する企業が障害にどのように向き合っているかを知る良いきっかけになっていれば嬉しく思います。
取り組んだタスク
今回は予定よりも進捗が良かったため、最終的に4つのタスクを実施しました。 ここでは下記の2つをピックアップしてご紹介します。
- Blob サービスの分散トレーシング対応
- モブで実施
- ブロックストレージ専用の Ceph クラスタにオブジェクトストレージ関連の不要なプールが作成されないようにする
- 個人タスクとして実施
Blob サービスの分散トレーシング対応
ストレージチームでは Neco 基盤向けに新しい Blob サービスを開発しています。これは cybozu.com で提供している各種アプリケーションから使用される内部的なサービスとなっています。 今回のタスクではこの新 Blob サービスの分散トレーシング対応を行っていただきました。
対応した社員2名も分散トレーシングにはあまり精通していなかったのですが、こちらのブログなどを見ながら対応を行い、 最終的には以下のように無事に Grafana 上で分散トレーシングの様子を見ることができました。
ブロックストレージ専用の Ceph クラスタにオブジェクトストレージ関連の不要なプールが作成されないようにする
ストレージチームでは Neco 基盤向けに複数の Ceph クラスタを運用しています。 Ceph にはブロックストレージ、ファイルストレージ、およびオブジェクトストレージとして使用するための3種類のインターフェイスが存在します。 Neco 基盤ではこのうちブロックストレージとオブジェクトストレージとして Ceph を活用しており、 ブロックストレージとオブジェクトストレージで Ceph クラスタを分けて運用しています。
Ceph を運用していく中で、Ceph の何らかの情報をメトリクスとして取得したいと思っても、 Ceph がそれを出力してくれていないということがたまにあります。 ストレージチームではそのようなときにのために、 定期的に Ceph のコマンドを実行してその結果から必要な情報を抽出してメトリクスとして出力するツールを開発しています。
実はこのツールから実行されるコマンドのうちの1つに副作用があり、 オブジェクトストレージとしての機能を提供していない Ceph クラスタに対してコマンドを実行すると、 オブジェクトストレージ関連のデフォルトプールが作成されてしまうことが分かっていました。 このようなプールが作成されることは意図していないため、 このタスクではそれを防ぐための開発を行いました。
Ceph の upstream に issue を立ててこの挙動自体を改善することも考えられましたが、 今回はオブジェクトストレージ関連の情報を参照するために実行するコマンドがトリガーとなっており、 そもそもブロックストレージのみを提供する Ceph クラスターに対して実行する必要がありませんでした。 そこで、コマンドライン引数を1つ増やして、 オブジェクトストレージ関連の情報を収集するか選択できるようにして、 無駄にオブジェクトストレージ関連の情報収集コマンドが実行されないようにすることで解決しました。
まとめ
今回のインターンシップでは実際の業務をほぼそのまま体験していただくという都合上、 インターン生にはある程度技術的にキャッチアップしていただく必要がありました。また、チームでの開発になるのでコミュニケーションをうまく取りながら進める必要があるなど、 インターン生にとってそこそこハードな側面もあったかと思います。 ですが、そんなこちらの心配を乗り越えて、最終的には想定以上にタスクを進めていただきました。 今回の経験が今後のインターン生のキャリアにとってプラスになることを願っています。
最後になりますが、ストレージチームでは一緒に働いてくれる方を募集中です。下記の募集要項を見て興味を持った方はぜひご応募ください。