Open30

Cloud Native 読書会第4回 kubelet

Shimpei OtsuboShimpei Otsubo

Cloud Native 読書会

前回
毎月第3水曜日に少人数で集まり一緒に Cloud Native 技術のコードを読む会です。
Connpass と Wantedly で募集しています。

Role

  • @potsbo 司会 -> 全体進行
  • @bgpat 裏方 -> 参加できてない人のケアなど

Timetable

  • Introduction 5 min
  • 自己紹介 15 min
  • 読書 60 min
  • 反省会/次回予告 10 min

概要

コードを読むことがなんだかんだ一番コスパの良い技術の学習方法だと @potsbo 考えています。もともとは Kubernetes 読書会として Kubernetes のコードを読む会をしていた事がありましたが、今回はそれの復活版で更に Kubernetes 以外のコードも読んでいいじゃないか、という会です。
かなりカジュアルに行っていた会で進め方も固まっているわけではありません。
皆さんのいろんな意見を聞きながら良い会にしていければなと思ってます。
(ちゃんとやるのが面倒になって中止してしまっていましたが結構評判が良かったので「続けること」を目標に再開しています。)
うまくいったら下の発表のような知見が得られることを期待しています。
https://speakerdeck.com/potsbo/kubernetes-cronjob-implementation-in-detail-number-k8sjp
https://speakerdeck.com/potsbo/configmap-vs-secret-number-k8sjp

前提

ハードルは低く行きます。「少人数だからこそ何でも聞いて良い」を前提にします。どんなに馬鹿に思える質問でもコードを追うことで理解するという解決策を取れば必ず良い学びになると思っています。
多分人の顔と名前も覚えてられないと思うので、「名前は覚えられていない」という前提を共有して進みましょう。

進め方

誰か一人の PC の画面共有をしながら議論をしながら何らかのテーマを解決していきます。全員が非公開 Podcast の出演者のような気持ちで積極的に発言してくれることを期待しています。
テーマはまだ決めていないので「そういえばここの挙動が気になる」というようなものがあると嬉しいです。

Shimpei OtsuboShimpei Otsubo

@potsbo
Wantedly で技術基盤チームで Istio や Ambassador をいじっています。
kubelet は「なんか node にいるなんでもやってくれる人だよね」くらいの認識です

きょーきょー

@kyohmizu
先月からSREのようなことをしています。
コードはまだ読み始めたばかりです。

Shimpei OtsuboShimpei Otsubo

kubelet は node に一体ずついる
どんな事やっているか

  • scheduler が pod を node に assign したらそれを etcd に書き込む
  • kubelet がそれをみて「変更が必要なpod」を見つけてそれに合わせて container を起動したりする
Shimpei OtsuboShimpei Otsubo

https://github.com/kubernetes/kubernetes/blob/e4f2398716b35f33659751bef6de2927993a25b1/pkg/kubelet/kuberuntime/kuberuntime_manager.go#L666-L674

// SyncPod syncs the running pod into the desired pod by executing following steps:
//
// 1. Compute sandbox and container changes.
// 2. Kill pod sandbox if necessary.
// 3. Kill any containers that should not be running.
// 4. Create sandbox if necessary.
// 5. Create ephemeral containers.
// 6. Create init containers.
// 7. Create normal containers.

Shimpei OtsuboShimpei Otsubo

podActions という struct を最初にとってくる

// podActions keeps information what to do for a pod.
type podActions struct {
	// Stop all running (regular, init and ephemeral) containers and the sandbox for the pod.
	KillPod bool
	// Whether need to create a new sandbox. If needed to kill pod and create
	// a new pod sandbox, all init containers need to be purged (i.e., removed).
	CreateSandbox bool
	// The id of existing sandbox. It is used for starting containers in ContainersToStart.
	SandboxID string
	// The attempt number of creating sandboxes for the pod.
	Attempt uint32

	// The next init container to start.
	NextInitContainerToStart *v1.Container
	// ContainersToStart keeps a list of indexes for the containers to start,
	// where the index is the index of the specific container in the pod spec (
	// pod.Spec.Containers.
	ContainersToStart []int
	// ContainersToKill keeps a map of containers that need to be killed, note that
	// the key is the container ID of the container, while
	// the value contains necessary information to kill a container.
	ContainersToKill map[kubecontainer.ContainerID]containerToKillInfo
	// EphemeralContainersToStart is a list of indexes for the ephemeral containers to start,
	// where the index is the index of the specific container in pod.Spec.EphemeralContainers.
	EphemeralContainersToStart []int
}
Shimpei OtsuboShimpei Otsubo

imageservice と runtimeservice があるが前者が image の管理をやっていて後者がそれ以外全部をやる

Shimpei OtsuboShimpei Otsubo

RunPodSandbox は runtimeService の interface のものと、CRI のものの2つがあってややこしいがよく見ると dockershim がみている

Shimpei OtsuboShimpei Otsubo

感想/反省 @potsbo

  • 強い人がいてくれたのでサクサク読めた
  • 人数を絞った結果ちょっとさみしくなってしまったかもしれない?
  • zenn の更新が必要なやり方はちょっとやっぱり面倒だけど検索されることを優先したい...
  • 次回 gist にしてみるのはありかも?
inductorinductor

感想

  • 今日は遅刻しなかった :muscle:
  • ケータイから参加していたのでコードが読みにくかった
  • 多少知見を活かせてよかった気がする
bells17bells17

感想・反省 by @bells17

  • syncPodは一番闇だと思います
  • カレンダーに予定を登録するのを忘れない
  • 誰か一緒にdocker createのオプション研究しましょう
Atsushi TanakaAtsushi Tanaka

感想

  • kubelet に詳しい人がいっぱいいて助かった
  • 同じような type とか func が多くて読みづらい
  • 定期的に手動 reload するのを頭に入れておけば zenn.dev でも問題なかった
きょーきょー

感想、反省

  • 読んだことない部分だったので勉強になりました
  • 1時間くらいで気軽にできるのは良い(一人で読んでいると無限に時間かかる…)
  • もう少し知ってる範囲だと会話に参加できるかな、予習した方が良いかも
Shimpei OtsuboShimpei Otsubo

「このイベントを忘れない」という良い方法を確立したい、calendar 配るだけでいい説はある