KubeCon + CloudNativeCon China 2019 現地レポート 0日目

こんにちは、Necoプロジェクトのmitzです。

KubeCon + CloudNativeCon Europe 2019が終わったばかりでしたが、約1ヶ月後に次のKubeCon開催がやってきました。本イベントはOpen Source Summit Chinaと同時開催で、Linusを始めとしたLinux kernel開発者たちのキーノートセッションも見どころです。

f:id:cybozuinsideout:20190625052524j:plain

KubeCon + CloudNativeCon ChinaはEuropeやNorth Americaと異なり、変則的なスケジュールとなっています。今まで0日目としていたCo-located event(コミュニティや企業主催のイベント)だけでなく、同日午後にKeynoteが開催されました。

それではCo-located eventの一つ「Kubernetes Contributor Summit in Shanghai」を元に紹介された情報や、印象に残った発表を簡単に紹介していきます。

Kubernetes Contributor Summit in Shanghai

Kubernetes Contributor SummitはKubernetesを中心に貢献している人や、これから貢献する人に向けたmini summitです。SIG(Special Interest Group。各機能の分科会)による次回のKubernetesリリースに向けた計画などを議論しています。

f:id:cybozuinsideout:20190625052629j:plain

スケジュールはこちらです

community/events/2019/06-contributor-summit at master · kubernetes/community · GitHub

起草 KEP, Drafting A KEP - Kevin Wang, Leon Wang, Fabio Rapposelli

Kubernetes Enhancement Proposal(以下KEP)の作り方について紹介しています。KEPは新しい機能や潜在的な問題定義に対して新たな提案を行うための「プロセス」です。これはいきなり新機能実装の大きなPRなどコミュニティが困惑しないような形で、計画や考えをまとめる機会の提供でもあります。可能な限り計画をまとめ、ユーザーストーリーやその機能実装によるメリット・デメリット、新機能であればAlpha -> Beta -> GAなどそれぞれのマイルストーンで目指すゴールを記述する必要があります。

現在のKEPはこちらにまとまっています https://github.com/kubernetes/enhancements

次のKubernetesリリースにどのような機能が追加されるかは上記のリポジトリを追うことで、今後の動向を追うことができるでしょう。

f:id:cybozuinsideout:20190625052847j:plain

CodeBase 之旅, CodeBase Tour - Fabio Rapposelli

github.com/kubernetes organizationをはじめとしたリポジトリ構成とコードの追い方について解説しました。まずGitHub organizationは以下があります。

続いて https://github.com/kubernetes/kubernetes についてです。こちらがUpstreamのKubernetesのソースコードであり、Organizationとリポジトリ名が"kubernetes"であることから「KK」と呼ばれることがあります。それぞれ以下のディレクトリツリーについて触れていました。

  • pkg/: Business logic。外部からインポート可能な実装だがまだ完全に実装が終了していないもの。GA(General Availability)として予定された機能が完成したら、後述のstaging/ツリーに移行される。
  • pkg/kubectl: kubectlコマンドのBusiness logic。
  • staging/: 実装完了した機能のツリー。これらはk8s.io/foobarといったpathでインポート可能であり、GitHub上ではgithub.com/kubernetes/foobarという名前で定期的にレプリケーションされている。つまりstaging/以下の実装について修正したい場合は、こちらでPull Requestを作成する。
  • cmd/xxx: GitHub release上でアップロードされるコマンド群。

pkg/以下やstaging/以下は、管理不足な箇所もあり github.com/kubernetes/foobar といった別のリポジトリで運用されているものがまだあるようです。さらに本体にはまだ取り込まれていないGCPやAWSなどのクラウドプロバイダー自身等がメンテナンスしているリポジトリもあります(e.g. https://github.com/digitalocean/digitalocean-cloud-controller-manager)。多くの参照先があるので、特定の機能における最新コードを追うためのヒントを提供しました。

Keynotes

Keynote: CRDs, No Longer 2nd Class Thing! - Jing Xu, Software Engineer, Google & Xing Yang, Lead Architect, OpenSDS

前述で触れたKubernetes向けCSIベースの機能開発をリードしている2人によるCRD(Custom Resource Definition)についての紹介です。CRDはKubernetes APIを拡張するためのもので標準にないリソースを自分で好きな定義で提供可能にします。今日のOperator実装ではCRDを提供し、独自で用意したリソースを使ってデプロイ可能にすることが一般的となっています。例えば彼女らはPersistent VolumeのSnapshot機能について開発してKubernetes本体に取り込むような活動を続けていましたが、必須ではないためSIG ArchitectureによってRejectされました。Optionの扱いなものはCRDとして提供してもらい、必要不可欠なリソースのみKubernetes本体に取り込むというコミュニティの方針があるようです。Kubernetesプロジェクトは開始から5年が過ぎ、爆発的な速さでコードが増えています。過去の参加レポートでも少し触れましたが拡張性を目指した動きになるため、今後はKubernetes本体のリソースではなくCRDやそれを取り扱うOperatorの実装という形が主流になるでしょう。

f:id:cybozuinsideout:20190625053214j:plain

この機能は現在、VolumeSnapshotというカスタムリソースで利用可能となっています。

続いてPandaというCRDを提供し、QiQi(七七, チーチー)という上海動物園で最近生まれた赤ちゃんパンダを例にmanifestを定義するというデモを紹介しました。これはCRDについてよく知らない参加者向けに分かりやすかったのではと感じました。

f:id:cybozuinsideout:20190625054021j:plain

まとめ

KubeCon ChinaのContributor Summitはどちらかというと、これから実際にソースコードを触る人たちの参加者が多く、次のリリースに向けた議論は同時に行われたSIGメンバーの中で行われていました。一日目のキーノートにおいて参加者数が発表されるでしょうが、中国開催は北米、ヨーロッパ開催よりも参加者が少なく、セッションレベルを下げているところも見かけます。はじめての人達に知ってもらう目的もあるかもしれませんし、先月のヨーロッパ開催でほとんど議論が行われていたためかと推測します。また海外の参加者にとっては、いきなり中国語セッションに変わったりして困惑していた人もいました。一方で「全セッション英中同時通訳」など現地の人にとっては国際会議の中では入り込みやすいイベントではあります。

引き続きKubeCon Chinaの参加レポートを投稿しますのでお楽しみに!