Kubernetes Meetup Tokyo #23 参加レポート

#はじめに
今回、2019年9月27日に開催された Kubernetes Meetup Tokyo #23 に blog 枠として参加させていただけましたので、イベントの内容についてレポートいたします。

全体的な内容としては、それなりに k8s の内部構造に踏み込んだ内容について解説されており、プロダクション環境で利用したい人にとってはとても価値の高い情報が盛り沢山に含まれていました。発表内容のスライドを見るだけでも理解できるようにボリュームたっぷりの Slide が用意されていたので、下記のリンクを辿るだけで必要な情報が得られます。発表者の皆さん、本当にありがとうございました。

- Kubernetes Meetup Tokyo #20 発表資料
  - https://k8sjp.connpass.com/event/145942/presentation/

| 発表者       | タイトル |
|:-----------------|-------------------|
| @go_vargo        | [ゼロから始めるKubernetes Controller](https://speakerdeck.com/govargo/under-the-kubernetes-controller-36f9b71b-9781-4846-9625-23c31da93014) |
| @kfyharukz | [kubebuilder/controller-runtime入門 with v2 updates](https://www.slideshare.net/KazuhitoMatsuda1/kubernetes-meetup-tokyo-23-kubebuilderv2) |
| @capsmalt | (Canceled) Introduction of Operator Framework |
| @ladicle | [zlab Kubernetes v1.16 のお話](https://qiita.com/Ladicle/items/f192d266b80e873eb0a8) |
| @superbrothers | [Kubernetes 1.16: SIG-CLI の変更内容](https://qiita.com/superbrothers/items/e78a8a04347e57900fd9) |
| @r_takaishi | [ClusterAPI v1alpha1 → v1alpha2](https://speakerdeck.com/takaishi/k8s-meetup-23) |
| @SMotochi_net | 自動化はshell-operator とともに。 |
| @unblee | [自作 Controller による Secret の配布と収集](https://speakerdeck.com/unblee/distributing-and-collecting-secrets-with-self-made-controller) |


#ゼロから始めるKubernetes Controller

- k8s controller をいかにして作るか、High level -> Low level なアーキテクチャの切り口で解説されていました
- ReplicaSet を例に、どのように reconciliation プロセスが実施されるのかをとても分かり易く説明されていた
- Edge Level Trigger or Event Driven Trigger?
  - k8s は、両方の良いところを組み合わせているのが凄い
- API-server の負荷を下げるために、informer には in-memory cache が実装されており、毎回 api アクセスをしないようにしている
- slide には大まかな動作に対応する source code へのリンクが付いているため、後から dive deep する際に役立ちそう
- 何故Deep copyをするのか? -> 失敗した際に in-memory cache の内容が壊れないために実施している(revert処理が容易になる)


#kubebuilder/controller-runtime入門 with v2 updates

- github のドキュメントを参照しながら kubebuilder を動かせば、簡単に controller を作れるのがよく分かる内容
- update 処理については optimistic lock による外部要因でのエラーが発生する可能性があるため、実装者側がリトライ処理をしてあげる必要がある
- 実際に cybozu で使っている controller をサンプルコードとして提供してもらえているので、やくに立ちそう
- envtest を使ったテストの準備は v2 では煩雑になった、つまずきポイントを避けるためにも、slideのリンク先githubを参照すると良い
- v1->v2 にすると、テストはほぼ書き直しを覚悟する必要がある、あまりテスト書いている人は居なさそうなので実際には困っている人は居ないのかも
- どのような用途でcontroller使っている?
  - local disk の logical volume を切り出す機能が欲しくて CRD と controller を作った
- 仕様変更が多いが、どう対応している?
  - 頑張って最新版に追従している(scaffold やり直しは覚悟する必要があるみたい)
  - pet の対象がサーバからk8sのソフトウェアに移ったと見ることもできるのかも

# Kubernetes 1.16: SIG-API Machineryの変更内容
- k8s v1.16 SIG-API Machineryの変更内容
- administration webhook が v1.0 に昇格したので変更多数、2バージョン先で古いものは deprecated になるから早めに対応しましょう
- 変更量が大きい、やはり追従は辛いね
- 情報集方法は?
  - changelog, github pull-req/code を見るべし

# Kubernetes 1.16: SIG-CLI の変更内容

- k8s v1.16 SIG-CLI
- server side apply は、beta 昇格したが、default 無効なので明示的に指定しない限りは使用されない
- export オプションが削除されたのはやや辛い、migration path(復活?) を求む声も多いらしい
- 大きな変更は無くなった、安定期に入ったと見て良さそう
- ephemeral container: alpha
  - scratch container を side car として差し込んで、debug ができる
  - qiita の須田さん解説記事が、とても分かり易かった
    https://qiita.com/superbrothers/items/85edec4d0232e0bbe2c0

# おわりに
発表者の k8s への情熱がハンパなく高くて、こちらまで伝染してしまいます ;)
発表内容については Slide を見ればキャッチアップできますが、参加者の熱量的なものを味わうのも面白いです。まだ参加したことのない人は1度で良いので会場に足を運んで、肌で熱量を感じ取ってみるのも良いと思いました。