Skip to content

Instantly share code, notes, and snippets.

@d-kuro
Last active April 22, 2019 16:54
Show Gist options
  • Save d-kuro/0d0b2359e0323d6bbfd328209fc90174 to your computer and use it in GitHub Desktop.
Save d-kuro/0d0b2359e0323d6bbfd328209fc90174 to your computer and use it in GitHub Desktop.
Kubernetes Meetup Tokyo #18

Kubernetes Meetup Tokyo #18

kubebuilder/controller-runtime 入門 (30min)

  • 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 (関数直接)

Container-native ingress controller with kubebuilder/(Admission Webhook) (30min)

  • 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 への疎通性を確保

メルカリのマイクロサービスにおける Kubernetes manifest の運用 (30min)

  • 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment