Kubernetesのコードリーディングをする上で知っておくと良さそうなこと

前提知識

  • KubernetesはPodとかのリソースと呼ばれるものでコンテナだったりロードバランサーとかを管理するようになっていて
  • 実際にDeploymentでコンテナを立てて
  • Service/Ingressでコンテナで立てたアプリケーションを外部公開できて
  • コンテナはPodという単位でコンテナをグループ化して同一Nodeで実行されるということを知っている
  • Goの基礎知識と
  • VSCodeやGolandなどGoのコードを読む際に宣言にジャンプできるようなエディタ

Kubernetesのコンポーネント

https://github.com/kubernetes/website/blob/master/static/images/docs/components-of-kubernetes.png
  • kube-apiserver
  • kube-scheduler
  • kube-controller-manager
  • cloud-controller-manager
  • kubelet
  • kube-proxy

Kubernetesの基本的なアーキテクチャ

  • 宣言的アーキテクチャになっていて
  • Kubernetesの各種リソースでコンテナだったりのあるべき状態の宣言を行い
  • 各種Controllerがリソースのあるべき状態になるように調整を行うようになっている(Reconciliationループ)
https://speakerdeck.com/masayaaoyama/infrastudy2-k8s?slide=43 あたりの図がわかりやすい
  • Reconciliationループと
  • Reconciliationループによって調整されるものの(ボリュームやロードバランサーといったクラウドのリソースやコンテナランタイムなどによって起動されるコンテナなど)

kubernetes/kubernetesリポジトリの見方

https://github.com/kubernetes/kubernetes

cmd

https://github.com/kubernetes/kubernetes/tree/master/cmd

pkg

staging/src/k8s.io/

  • Kubernetes APIのクライアントライブラリであるclient-go
  • 各種Kubernetes APIのリソースの定義が書かれたapi
  • cmd
  • pkg
  • staging/src/k8s.io/

client-goについて知る

  • Kubernetes APIに触れるためのクライアントライブラリ
  • Kubernetes ControllerでReconciliation loopを実装するための基礎実装
  • その他Kubernetes Controllerを作る上での共通のユーティリティ

Kubernetes APIに触れるためのクライアントライブラリ

Kubernetes ControllerでReconciliation loopを実装するための基礎実装

https://github.com/kubernetes/sample-controller/blob/master/docs/controller-client-go.md

その他Kubernetes Controllerを作る上での共通のユーティリティ

Kubernetes ControllerのReconciliation loopに慣れる

client-goのexampleである”Workqueue Example”を写経~書き換えて動作を確認してみる

上記に挙げたsample-controllerの実装を写経~書き換えて動作を確認してみる

kubebuilderが生成するサンプルコントローラーを書き換えて動作を確認してみる

  • ベースとなるCustom Controllerの生成や
  • Admission Webhookの生成
  • CRDの生成
  • ベースとなるCustom Controllerの生成や
  • Admission Webhookの生成
  • CRDの生成
  • Reconcilerの実装
  • 特定リソースの監視の実装

Kubernetesで読むコードを探す

  • 提案内容
  • モチベーションやゴール
  • 詳細設計
  • 機能開発に関するはすべてissueで行っていた
  • issueでUmbrella Issueという機能開発のベースとなるissueを作って管理する(kubernetes/kubernetesで”umbrella”とissueを検索するとissueのタイトルのはじめに”umbrella”って書いてあるやつが結構出てくる)
  • Design Proposalに移行
  • KEPに移行

Kubernetesのコードを読む

  • cloud-controller-managerなどのエントリーポイントを1から読んでいく
  • xxx controllerなど特定の処理を行うメインロジックを見つけて読んでいく

cloud-controller-managerなどのエントリーポイントを1から読んでいく

xxx controllerなど特定の処理を行うメインロジックを見つけて読んでいく

https://speakerdeck.com/bells17/kubernetes-and-csi

Kubernetesのコミュニティについて

https://docs.google.com/presentation/d/18LcwvqyNn74HgqIk7O-ChgfSsJAqDIYm7obguEXto4Q/edit#slide=id.g608b283008_0_11
  • kubernetes.ioなどのドキュメントについては sig-docs
  • kubeletなどのノードに関するものは sig-node
  • Kubernetesとクラウドとの連携する仕組みについては sig-cloud-provider
  • Kubernetesとストレージを連携するには sig-storage
  • Kubernetesとロードバランサーやネットワークの連携を行ったりは sig-network
sig-storageの例: https://github.com/kubernetes/community/tree/master/sig-storage

Kubernetes Slack

日本コミュニティ

  • #jp-users: 日本コミュニティのメインはこのチャンネルっぽいので、とりあえず日本コミュニティでどのチャンネルで聞いたりすればいいかわからないときはここで聞くのが良いと思う
  • #jp-events: Kubernetesのイベント関連の情報告知用のチャンネルで、ここを定期的にウォッチしておけばKubernetes関連のイベントはだいたい把握できる
  • #jp-dev: 日本コミュニティのKubernetesのコントリビューター用のチャンネルでKubernetesの実装とかに関する質問を日本語でしたい場合はこのチャンネルでするのが良いんじゃないかと思ってる
  • #jp-users-novice: 日本コミュニティ向けのKubernetes初心者向けチャンネルで、Kubernetes初心者の人でも気軽に質問や相談をするためのチャンネル
  • #jp-mentoring: Kubernetes Community関連の相談をしたり、Kubernetes アップストリームトレーニングなどのサポートに利用される日本コミュニティ向けのチャンネルのよう

日本コミュニティ以外のおすすめチャンネル

  • #kubernetes-novice: グローバルなKubernetes初心者向けのチャンネルで、英語で質問するのに抵抗ないのならこっちでKubernetesの質問をするのも良い
  • #office-hour: 月1回開催されるKubernetes Office Hour用の質問チャンネル。YouTubeの配信とこのチャンネルを使ってリアルタイムにKubernetesの利用者向けの色んな質問について答えてくれる。オフィスアワーの詳細はここに書いてある
  • #meet-our-contributors: 月1回開催されるMeet Our Contributors用の質問チャンネル。YouTubeの配信とこのチャンネルを使ってリアルタイムにKubernetesの開発者向けの色んな質問について答えてくれる。詳細はここに書いてある
  • #sig-xxx: 自分の興味があったり詳しく質問をしたい領域については各sigのチャンネルだと詳細な質問がしやすいと思う

Kubernetesにコントリビュートする

Contributor Workshop

Kubernetesアップストリームトレーニング

まとめ

--

--

--

https://github.com/bells17

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
bells17

bells17

https://github.com/bells17

More from Medium

Exploring Kubernetes

The Architecture of a Kubernetes Cluster

Priorities pods to be scheduled in Kubernetes