Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes Casual Talk - CyberAgent における Prow の運用事例 / Kubernetes Casual Talk 2 CyberAgent

Kubernetes Casual Talk - CyberAgent における Prow の運用事例 / Kubernetes Casual Talk 2 CyberAgent

こちらで発表した資料です。
https://mercari.connpass.com/event/227362/

Mizuki Urushida

December 07, 2021
Tweet

More Decks by Mizuki Urushida

Other Decks in Technology

Transcript

  1. 漆田 瑞樹 (Urushida Mizuki)
 • CyberAgent, Inc.
 ◦ 2018 年度

    新卒入社
 ◦ 全社横断インフラ組織 CIU
 • インフラ & ソフトウェアエンジニア
 ◦ 機械学習・推論基盤の開発
 ◦ Kubernetes 基盤の開発 (AKE)
 • 趣味
 ◦ タイピング、筋トレ (と書きたい)

  2. Prow
 • Kubernetes ベースの CI/CD システム
 ◦ Kubernetes のコミュニティで開発・使用されている
 ◦

    /lgtm のような ChatOps による様々な Automation を提供
 • 最近 GitHub App での運用が推奨になった
 ◦ リポジトリの追加が圧倒的に楽に
 ◦ 従来の Bot 用アカウントでの運用も可能

  3. presubmits: - name: test-sample rerun_command: "/test-sample" always_run: true agent: kubernetes

    decorate: true clone_uri: "[email protected]:<org>/<repo>.git" spec: containers: - image: golang:1.17 command: - "sh" - "-c" - "cd ./sample; go test ./... -v"
  4. Inrepoconfig をメインで利用
 • Prow のジョブ定義の方法は 3 つ
 
 
 


    
 
 • Inrepoconfig により各リポジトリにジョブ定義を移譲
 ◦ 他の CI/CD システムと似ている(.circle, .github)
 ◦ 開発・CI/CD リポジトリの行ったり来たりがなくなる
 • ただし Periodic(定期実行)が使えない点は注意
 タイプ
 管理場所
 説明
 Prow Config
 Prow 設定管理 Repo 
 Prow の設定と一緒に書けるもの 
 Job Config
 1 つの自由な Repo
 Kubernetes Org のジョブはこれで管理 
 Inrepoconfig
 ジョブを実行したい Repo 
 .prow.config or .prow/ に定義可能

  5. 複雑なジョブは Tekton Pipeline で
 
 
 • ジョブの実行方式を定義する Agent という概念が存在


    ◦ それぞれの Agent 用のコントローラーをデプロイする必要あり
 
 
 
 
 
 
 • 依存関係などが複雑なジョブは Tekton Pipeline を利用
 ◦ Prow にはジョブ間の依存関係を定義することができない
 Agent
 説明
 kubernetes
 Pod でジョブを実行
 jenkins
 Jenkins X でジョブを実行 
 tekton-pipeline
 Tekton Pipeline でジョブを実行 

  6. Hook と Deck の Ingress は分ける
 • Prow のマニフェストは外部公開向けに作られている
 ◦

    Deck (WebUI) と Hook (Webhook 受信・処理) の Ingress が同じ
 • 社内向けに運用するためには Ingress を分割する必要がある
 ◦ Deck は内部に、Hook は外部に公開
 ◦ 外部・内部用の Controller (IngressClass) を用意して分割
 Deck Ingress
 Hook Ingress
 Deck
 Hook
 Internal IP
 External IP
 Ingress
 Deck
 Hook
 External IP

  7. GitHub App とリポジトリ Webhook のハイブリッド
 • GitHub App になったのは便利だがセキュリティ的に心配
 ◦

    個人なら良いが Organization に入れるためには公開が必要
 ◦ インストールされてしまうとそのリポジトリの Webhook が飛んでくる
 ▪ まあまあ気持ち悪い
 • リポジトリの Webhook も利用したハイブリッド構成
 ◦ GitHub App は投稿 Bot としての役割のみに
 ◦ Webhook を送るには従来通りリポジトリに Webhook を追加
 Repo
 Prow
 Event
 Chat
 GitHub App
 Repo
 Prow
 Event (Directly) 
 Chat
 GitHub App

  8. 1 年半ほど使ってみて感じたメリデメ
 • メリット
 ◦ ChatOps や Prow の Automation

    によるレビュー文化のさらなる浸透
 ◦ Kubernetes ベースなのでスケールが容易・デバッグがしやすい
 • デメリット
 ◦ CI/CD の記述がいまいち
 ◦ リリースがないのでアップデートが大変(Master ブランチしかない)
 ◦ ドキュメントの整備状況的にコードを読む覚悟が必要