- slideshare
- kubebuilder
- コードのテンプレート/マニフェスト群を生成してくれる CLI ツール
- book.kubebuilder.io がよく書かれている
- contoroller-manager, controller, webhook 用のコードを生成してくれる
- 嬉しい
- 使い始めるのが簡単
- コピペしなくて済む
- 標準的な Contoroller 実装に乗れる
- controller-runtime による抽象度の高いライブラリが使える
- controller の integration test もついてくる
- つらみ
- コード生成は初回のみを想定
- CRD の Webhook Conversion は未対応 (バージョンのマイグレーション)
- probe のサポートがない
- controller-runtime で最近 Admission 周りが大規模リファクタ中
- controller-runtime の学習コスト
- controller-runtime
- v0.1.10 が最新
- 提供機能
- controller
- Admission Webhook
- envtest
- metrics
- その他 client, cache, logging, resource lock
- Manager
- 複数のマネージャー, Webhook の管理をしてくれる
- Runnable のインタフェースを満たす
- マネージャー経由で Start しないとダメ
- Controller
- Watch 部分, Reconciler が綺麗にまとまってる
- ユーザが実装するのは Watch と Reconciler のループだけ
- Source は 4種類
- Kind (k8s Resource 用)
- Channel (外部イベント用)
- Informer (Informer (client-go) 直接)
- Func (関数直接)
- speakerdeck
- Kubernetes Network の基本
- VM / Pod Network の二つがある
- Pod Network はクラスタの外からの疎通ができない
- GKE Ingress
- path ごとに特定の Nodeport が紐づいている
- VPC ネイティブの有効化 -> Pod Network に直接紐づく
- 今後はデフォルトで有効化されていく予定
- Container-native LoadBarancing
- LB から直に Pod にリクエストを転送する
- 通常は GCLB -> kube-proxy (VM Network に振り分け) -> Pod の順になる
- Nginx ingress
- L7 を処理する Pod を作成してオフロードする
- 必要なリソース
- Deployment (Nginx ingress)
- Service (type: LoadBalancer)
- HPA
- GKE との違い
- Deployment や Service を作る必要がある
- Ingress Class を利用しないとリソースごとに分離できない
- GKE だと Ingress リソースごとに GCLB が作成される
- Nginx だと 複数の Ingress リソースを管理可能 (必要なら ingress-class で分割する)
- Calico
- VM に対して経路情報を伝搬してるだけ
- Nginx Ingress から Pod への疎通性を確保
- speakerdeck
- YAML
- 書いたものは PR でレビュー
- GitOps で apply
- Monorepo で管理
- ディレクトリベースで各チームに権限を移譲
- Pull Request
- 人がレビュー
- 変更の単位になるので revert とかしやすい
- GitOps
- Git を信頼できる1つのソースとして使う
- 常にクラスタと Git のファイルが sync されている
- Push 型でやってる
- クラスタの状態との diff を取るのが難しい
- weaveworks は push 型をアンチパターンって言ってる
- シンプルで実装が簡単
- Spnnaker で人間が kick してデプロイしている
- Monorepo
- YAML のシェアが簡単
- コアチームで manage するのが簡単
- パイプラインを作るのが一回だけ
- スケールを気にしなければならない (ディレクトリ多すぎとか)
- 権限周り
- チームごとのパイプラインのカスタマイズができない
- ディレクトリ
- マイクロサービス -> 環境 -> Kind -> YAML file
- kubectl でデプロイ
- git diff で差分を見ている
- パイプライン以外からの操作に関しては検知できていない
- kustomize の導入は開発者が k8s に慣れ親しんでないので一旦見送り
- GitHub の機能で code owners を使用している
- エコシステム
- YAML に対する linter
- github.com/wercker/stern