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/

Cc51eff3fb508929891d79dc8a382d80?s=128

Mizuki Urushida

December 07, 2021
Tweet

More Decks by Mizuki Urushida

Other Decks in Technology

Transcript

  1. CyberAgent における
 Prow の運用事例
 @zuiurs
 Kubernetes Casual Talk #2 CyberAgent,

    Inc.

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

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

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

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

  4. None
  5. None
  6. presubmits: - name: test-sample rerun_command: "/test-sample" always_run: true agent: kubernetes

    decorate: true clone_uri: "git@github.com:<org>/<repo>.git" spec: containers: - image: golang:1.17 command: - "sh" - "-c" - "cd ./sample; go test ./... -v"
  7. CyberAgent CIU での
 運用ポイントを 4 つ紹介


  8. ① Inrepoconfig をメインで利用


  9. 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/ に定義可能

  10. ② 複雑なジョブは Tekton Pipeline で


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


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

  12. ③ Hook と Deck の Ingress は分ける


  13. 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

  14. ④ GitHub App とリポジトリ Webhook のハ イブリッド


  15. 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

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

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

  17. ChatOps は最高なので使っていこう!
 ChatOps 付き CI/CD ではなく
 CI/CD 付き ChatOps です


  18. ご清聴ありがとうございました