11. Client を使ったリソース取得?操作
11
▌Reader: Get, List
l Get は NamespacedName で?意にマッチ
l List は label, namespace などでマッチ
▌Writer: Create, Delete, Update, Patch
l Update は楽観ロックで動作.操作時に現状態が変わっていると失敗
l Patch はマージ可能であれば現状態が変わっていても成功
https://godoc.org/sigs.k8s.io/controller-runtime/pkg/client
16. Admission Webhook
16
▌Defaulting Webhook
l Mutating Webhook の?種
l レシーバを操作することで,値を設定できる
https://github.com/kfyharukz/kubebuilder-tutorial/blob/master/api/v1/cronjob_webhook.go
17. Admission Webhook
17
▌Validating Webhook
l レシーバの中?を確認して,validation を?う
l Allowed なら nil,Denied なら error を返す
https://github.com/kfyharukz/kubebuilder-tutorial/blob/master/api/v1/cronjob_webhook.go
18. How to implement: main.go
18
▌scaffold されたファイルに追加するのは 2 ?のみ
l 作成した type を Scheme に追加
l 上記 Scheme を Reconciler 作成時に渡す
https://github.com/kfyharukz/kubebuilder-tutorial/blob/master/main.go
20. How to deploy
20
▌CRD
▌RBAC
l _controller.go/_webhook.go の Marker から?成
▌Mutating/ValidatingWebhookConfiguration
▌Service
l webhook の callback エンドポイント
▌Certificate
l cert-manager を使って webhook ?の証明書を作成
▌Deployment
l controller(manager) 本体.コンテナイメージ名の扱いには注意
https://github.com/kfyharukz/kubebuilder-tutorial/tree/master/config
21. How to test
21
▌envtest パッケージを使ってテストできる
l 公式?順でインストールすると
/usr/local/kubebuilder/bin に kube-apiserver と etcd の
バイナリがインストールされる
l 実際に kube-apiserver と通信しながらテストできる環境
が作れる
https://godoc.org/sigs.k8s.io/controller-runtime/pkg/envtest
Scaffold の
サポートはほぼない…
32. controller-runtime?s components
▌Managers
l controller/webhook の実?管理
l cache や client などの共通要素を
inject
l leader election 管理
▌Controllers
l 各種ソースから event を受信
l event を適切にフィルタリング
l ?同期に reconcile 処理を呼ぶ
▌Reconcilers
l controller のロジック実装部
l 対象の NamespacedName を受け
取って処理
▌Clients and Caches
l APIオブジェクトのクライアント
l 透過キャッシュ&インデクシング機
能あり
▌Scheme
l Go types と API GVK の紐付け,
相互変換
32
https://godoc.org/sigs.k8s.io/controller-runtime