Kubernetesの1次リソースを調べる際に知っておくと良い情報

[Kubernetes Advent Calendar 2024](https://qiita.com/advent-calendar/2024/kubernetes) 23日目の記事です。

## はじめに

Kubernetesに関連する情報を調べる際、公式ドキュメントやソースコード、KEPなどの1次情報にあたることは多いと思います。
しかし、Kubernetesは非常に大規模なプロジェクトであり、開発・運用に関わる情報は多岐にわたっています。そのため、情報を調べる際には、どのリソースにアクセスすればよいか迷うことも少なくありません。

この記事では、Kubernetesの1次リソースを参照する際に知っておくと良い基本的な情報源や手がかり、コミュニティの構成などについて整理します。

## Kubernetesに関する1次リソース

改めて言うまでも無いですが、ソースコードと公式ドキュメントは以下のリンク先に存在します:

- **ソースコード**: [https://github.com/kubernetes/kubernetes](https://github.com/kubernetes/kubernetes)
- **公式ドキュメント**: [https://kubernetes.io/](https://kubernetes.io/)
  - 短縮URL: [https://k8s.io/](https://k8s.io/)

公式サイトで参照頻度が高いページは、以下の2つです。

- [**Concepts**](https://kubernetes.io/docs/concepts/): Kubernetesの各リソースや仕組みの概念的な解説がまとまっています。
- [**Reference**](https://kubernetes.io/docs/reference/): `kubectl` コマンドや Kubernetes API リソース仕様など、よりリファレンス的な情報が集約されています。

## コミュニティの構成を知る

Kubernetesは多くの開発者・コミュニティメンバーに支えられており、これらはSIG (Special Interest Group)を単位として活動しています。各SIGは特定の領域を担当し、その領域に関する議論や改良、運用に責任を持っています。

例えば、以下のようなSIGがあります。

- **SIG CLI**: `kubectl`や`kustomize`など、CLIツール系を担当
- **SIG Node**: ノードコンポーネントやKubeletなどの責務
- **SIG Storage**: ストレージ関連機能の改善・保守

2024/12/01 時点でのSIG一覧は以下の通りです（詳細は [kubernetes/community sig-list.md#special-interest-groups](https://github.com/kubernetes/community/blob/master/sig-list.md#special-interest-groups) を参照）:

- API Machinery
- Apps
- Architecture
- Auth
- Autoscaling
- CLI
- Cloud Provider
- Cluster Lifecycle
- Contributor Experience
- Docs
- etcd
- Instrumentation
- K8s Infra
- Multicluster
- Network
- Node
- Release
- Scalability
- Scheduling
- Security
- Storage
- Testing
- UI
- Windows

SIGごとにSlackチャンネル、メーリングリスト、定期的なミーティングが存在します。また、新機能や変更点のアナウンスはSIGごとに行われることが多いです。

たとえば、`kubectl`に関する最新情報を知りたければSIG CLIをチェックすると効率的です。また、リリースノートや新機能の解説記事（例: [Kubernetes 1.31: 変更点まとめリンク集](https://qiita.com/uesyn/items/d08eba43b7415ac7644f)）では、SIGごとに更新情報がまとめられていることが多いです。

## コードベースを知る

### GitHub Organization

Kubernetesのソースコードは、https://github.com/kubernetes/kubernetes にあります。
https://github.com/kubernetes がKubernetesのコードベースを管理しているGitHub Organizationですが、それ以外にも多くのリポジトリが存在します。例えば公式ドキュメントを管理している https://github.com/kubernetes/website や、KubernetesコミュニティのCI/CDを管理している https://github.com/kubernetes/test-infra などもあります。

また、Kubernetesに関連するソフトウェアは、https://github.com/kubernetes-sigs 配下にあることが多いです。
例えば、以下のようなリポジトリがあります:

- Kustomize: [kubernetes-sigs/kustomize](https://github.com/kubernetes-sigs/kustomize)
- Kubebuilder: [kubernetes-sigs/kubebuilder](https://github.com/kubernetes-sigs/kubebuilder)
- external-dns: [kubernetes-sigs/external-dns](https://github.com/kubernetes-sigs/external-dns)

https://github.com/kubernetes, https://github.com/kubernetes-sigs の2つのOrganizationは有名であるため、既に知っている方も多いかもしれません。実は、Kubernetesコミュニティが管理しているGitHub Organizationは他にもいくつかあります:

- [etcd-io](https://github.com/etcd-io): etcdの本体と関連ツールを管理しています
- [kubernetes-client](https://github.com/kubernetes-client): 各言語向けのKubernetesクライアントライブラリを管理しています
- [kubernetes-csi](https://github.com/kubernetes-csi): Container Storage Interface (CSI) の実装を管理しています
- [kubernetes-retired](https://github.com/kubernetes-retired): Kubernetesコミュニティがメンテナンスを終了したリポジトリを管理しています

これらのOrganizationの管理はコード化されており、そのほとんどは https://github.com/kubernetes/org/tree/main/config にあります。
これらのGitHub Organizationは、Kubernetesと同じようなコミュニケーション / 開発プロセス / ディレクトリ構成を採用していることが多いです。

### Ownership

Kubernetesは大規模なプロジェクトであるため、各ディレクトリやコード領域ごとに責任者(OWNERS)が明確に定義されています。
Kubernetesコミュニティが管理する（ほとんど）すべてのリポジトリには`OWNERS`ファイルが配置されており、このファイルでコードのreviewerやapproverが定義されています。
これにより、以下のような点が明確になります。

- 誰がそのコード領域の専門家で、レビューを行えるのか
- PRやIssueをどのSIGや誰に相談すればよいのか

この`OWNERS`ファイルは、[Prow](https://github.com/kubernetes/test-infra/tree/master/prow)というCI/CDシステムによって解釈され、自動的なアサインやラベル付けに活用されます。
特定のコード領域を調べる際は、そのディレクトリの`OWNERS`ファイルを読むことで関連するコミュニティメンバーやSIGを把握できます。

## コミュニケーションチャンネルを知る

Kubernetesコミュニティは、様々なコミュニケーションチャンネルを活用しています。

- **Slack**: [Kubernetes Slack](https://slack.k8s.io/) には多数のチャンネルがあり、SIGやWG単位、トピック単位で情報交換が行われています。質問や議論、仕様策定の初期段階でのすり合わせなどが活発です。
- **メーリングリスト**: SIGやWGごとにメーリングリストがあり、公式アナウンスや重要なディスカッションが行われます。
- **ミーティング**: 各SIGは定期的なZoomミーティングを開催しています。ミーティングノートはGoogle Docsなどで共有され、議論の経緯や決定事項がまとめられます。

これらのチャネルを知ることで、特定の機能や変更に関する1次情報や議論の経緯を追うことが容易になります。

## 最新の動向を知る

Kubernetesの新機能や改善は、[Kubernetes Enhancements (KEP)](https://github.com/kubernetes/enhancements)を中心に提案・追跡されています。KEPは以下のような情報源として役立ちます。

- 今後追加・変更予定の機能やAPI
- 現行リリースや次期リリースで注目される改善点
- 各SIGやWGが現在注力している領域

また、各リリースごとに公式ブログやリリースノート（[https://kubernetes.io/docs/setup/release/notes/](https://kubernetes.io/docs/setup/release/notes/)）を見ることで、直近の変更点や移行期の機能フラグ状況などを知ることができます。

## その他 tips

Kubernetesのコードやドキュメントを効率的に横断検索するには、以下のようなツールが役立ちます。

- **Hound (Code Search)**: [https://cs.k8s.io/](https://cs.k8s.io/)
  Kubernetes全体のコードベースを高速に検索できます。特定の関数やAPIコールがどこで使われているか調査する際に有用です。
- **コミュニティガイド**: [kubernetes/community](https://github.com/kubernetes/community)
  貢献の仕方やコミュニティの運営ルール、各SIGへの参加方法、提案プロセスなどがまとめられています。一次情報を追う際の前提知識として役立ちます。

## まとめ

Kubernetesは巨大なエコシステムであり、1次情報はGitHubリポジトリ、公式ドキュメント、SIGごとのSlackやミーティング、KEP、CI/CD設定ファイルなど、多岐にわたります。
「どこを見ればよいか」を把握することで、より正確かつ効率的に一次情報へアクセスでき、エコシステムを深く理解する手がかりとなります。

本記事で紹介したリソースがその際に役に立てば嬉しいです！