追記(2021/08): 無事修了しました: Kubernetes での Google Summer of Code を修了した (+ kubernetes-sigs/kube-scheduler-simulator の紹介
Google Summer of Code 2021 で CNCF 内の Kubernetes に出していた Proposal が採択されました。 わーーーーい!
えーーーー!!!!!
— さんぽし (@sanpo_shiho) May 17, 2021
Kubernetesで出してたGoogle Summer of CodeのProposal通った!!!!! pic.twitter.com/AaQKvEMggZ
ちなみに去年は Erlang Ecosystem Foundation 内の Elixir に Proposal を提出し、落ちてました。
Google Summer of Code 2020 に申し込んでみた
今年は CNCF 内の Kubernetes に Proposal を出しました。(というか Erlang Ecosystem Foundation は今年 GSoC に参加がなかった)
Google Summer of Code とは
Google Summer of Code is a global program focused on bringing more student developers into open source software development. Students work with an open source organization on a 10 week programming project during their break from school.
毎年行われている Google が出資する学生向けのプログラムです、 GSoC と略して呼ばれることもあります。 OSS のメンテナ等にメンターについてもらい数ヶ月間 OSS の開発に参加することができると言うものです。
学生は募集から参加したいプロジェクトに Proposal を提出し、採択されれば 5-8 月頃にかけて開発に参加するという流れになります。
毎年多くの OSS が参加しており、今年も Chromium や Dart、git、GitLab などを初め著名なプロジェクトが多く見られました。
また、奨学金という形でお給料ももらうことができます。有名な OSS にメンターにサポートしてもらいながらコントリビュートできてお金までもらえるなんて最高ですね。
(ちなみに余談ですが今年は前年までの半額程になったらしく、金額は日本だと$2700 となってました。)(国の物価によって金額が異なるらしいです)
https://developers.google.com/open-source/gsoc/help/student-stipends
Proposal について
前述のように参加のためには Proposal を提出する必要があります。
プロジェクトが「うちではこんな感じの良さげなタスクがありますよ」といったふうにタスクのリストを用意してくれているのでそこから選択する場合が多いと思います。 例えば CNCF では以下のようにリストされています。
https://github.com/cncf/mentoring/blob/1d61dbf99b5c461b97f08bff6b11eac6ff73e8a2/summerofcode/2021.md
僕も例にもれず、この中から選択しました。以下の issue です。
web-based simulator for scheduler behaviour #99605
An in-tree web-based simulator that hooks into the scheduler code to simulate aspects of the scheduler’s behaviour. The interface should allow the user to create/delete nodes, pods, volumes, etc. and simulate behaviour such as spreading, affinity, preemption, etc. faithfully. The standalone tool can simulate a cluster and its operations similar to how the integration tests and scheduler_perf benchmarks work. This would serve as a great, interactive learning tool to understand the scheduler’s behaviour without having to spin up a real cluster. A decent analogy: this is the play.golang.org of the k8s scheduler.
超簡潔にいうと、Kubernetes のスケジューラーの動作を Web 上でシュミレートする Web アプリケーションの開発といった感じです。将来的にはThe Go Playgroundのように play.kubernetes.io のような形で公開できると面白いということもコメントで記載されています。
issue の最後にメンターさんから Proposal に記載するべきもの一覧がコメントされていたのでこれを参考に Proposal を書き進めました。
https://github.com/kubernetes/kubernetes/issues/99605#issuecomment-810318279
指定されていた内容はざっくりと以下です
- 自分の情報(email や GitHub の ID など)
- Proposal の概要
- Proposal の技術的な詳細
- ざっくりとしたスケジュール感
- 過去の OSS contribute の経験
そして僕が実際に書いた Proposal は以下です。
GSoC 2021 Proposal: web-based simulator for scheduler behaviour (Project: Kubernetes)
基本的に issue や issue についているコメントを元に書いていきました。英語がそこまで得意というわけではないため、Deepl を駆使しまくりにしまくっています。いい時代だ。
Proposal は「ちゃんとソースコード読んで勉強したで〜」ってことをアピールするためにソースコードを交えて説明することをうっすら心がけていました。また、なんかそれっぽい雑な図を加えたりもしていました。
Proposal を書く際は以下の記事/動画を非っっっっっ常に参考にさせていただきました
Kubernetes のソースコードをそもそも読んだ経験がなかったので、落ちてもいい機会になったなと思いながら読みました。
Proposalの完成度的にダメ元感あるけどProposal書く過程で色々勉強になったので良いです🥺
— さんぽし (@sanpo_shiho) April 14, 2021
クベのコードこう言う機会でもないと読まなかっただろうし
また、メンターに早期に連絡をすることで事前に Proposal のレビューをしてもらうことも可能で、多くの GSoC 参加記でお勧めされています。(僕はめちゃめちゃギリギリまで完成していなかったためそんな時間がありませんでした…)
そして、その他に先人の GSoC 参加記でお勧めされていることとして「実際にそのプロジェクトに PR を投げてみる」というものがあります。僕はこれをサボっていましたが、採択が決まる一週間前に急にやる気を出し、4 つの PR と 2 つの issue を作成しました。採択決定期限の直前なのでこれが採択に影響したかどうかはわかりません。
issue
- scheduler_perf: add detailed description about op data type in benchmark test’s configration
- scheduler_perf: no error handling when an error occurs when updating node
Pull Request
- scheduler_perf: create sleep operation #101835
- scheduler_perf: correct error handling #101853
- scheduler_perf: create deleteNodes op #101854
- scheduler_perf: allow users to specify default pod and node specs #101799
終わりに
今年が学生最後の年だったので採択されて非常に嬉しいです!申し込み時点では Kubernetes のソースコードは読んだこともなく、ダメ元感を感じつつ突っ込みましたが申し込んでよかったです。
途中の Evaluation を通せるように頑張っていきたいと思います。