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

Kubernetes導入に備えたGitOpsなCI/CDを構築する/rakus_meetup_202206

txkxyx
June 02, 2022
760

 Kubernetes導入に備えたGitOpsなCI/CDを構築する/rakus_meetup_202206

2022/6/1(水)19:00〜 【ラクスMeetup】技術刷新の課題取り組み - 共通基盤/k8s/技術ロードマップ -での発表資料です。

txkxyx

June 02, 2022
Tweet

Transcript

  1. #RAKUSMeetup
    ©2022 RAKUS Co., Ltd.
    Kubernetes導入に備えた
    GitOpsなCI/CDを構築する
    株式会社ラクス 技術推進課
    岡本
    1

    View full-size slide

  2. #RAKUSMeetup
    自己紹介
    ● Job
    ○ 技術推進PJのリーダーやメンバー (先行技術検証)
    ○ 横断機能開発 (要件定義〜開発)
    ● Career
    ○ Java、Python、AWS、Vue.js
    ○ Java研修講師、資格対策本の執筆
    ○ 2020年〜株式会社ラクスに所属
    2

    View full-size slide

  3. #RAKUSMeetup
    本日お話する内容
    ● Kubernetes導入に向けた技術推進PJを実施しました
    ● 導入に向けてIaCを活かしたCI/CDの見直しを実施
    ● ツールの選定や、実際にCI/CD環境を構築しましたので、
    その知見を共有します
    3

    View full-size slide

  4. #RAKUSMeetup
    取り組みの背景
    4

    View full-size slide

  5. #RAKUSMeetup
    9割のサーバーをオンプレで構築
    ● ラクスは約9割のサーバーリソースをオンプレで構築・管理
    ○ 一部サービスはパブリッククラウドで構築・管理
    ○ 【参考】
    https://tech-blog.rakus.co.jp/entry/20211126/technology#%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9
    5

    View full-size slide

  6. #RAKUSMeetup
    取り組みの背景
    ● コンテナ技術を生かした開発の需要の高まり
    ● パブリッククラウドで運用しているコンテナアプリのオンプレ移行
    ● コンテナアプリ実行環境としてk8sについてノウハウを収集
    ● k8sを導入することで開発環境にどう影響するか調査する
    k8sの特徴を活かしたCI/CDを構築する必要がある
    6

    View full-size slide

  7. #RAKUSMeetup
    k8s導入後のCI/CDの検討
    7

    View full-size slide

  8. #RAKUSMeetup
    Kubernetes導入による変化
    ● k8s導入によりほぼ全てのリソースがIaCによりマニフェスト
    ファイルで管理される
    ○ 従来はアプリケーション・MW・OSを個別で管理
    ○ k8sではマニフェストファイルで管理できる
    8
    アプリの
    Manifest
    DBの
    Manifest
    Webサーバーの
    Manifest
    kubectl apply
    Kubenetes
    Webサー
    バー
    コンテナ アプリ
    コンテナ
    DB
    コンテナ
    Manifest宣言通りの状態

    View full-size slide

  9. #RAKUSMeetup
    Kubernetesを導入後のCI/CD
    ● IaCの特徴を生かしたCI/CDを構築し直す必要がある
    ○ 現状はJenkinsやGitLabを利用したCI Ops(CI + CD)に近い状態
    ○ 候補となるのがGitOps
    9
    開発者
    Code
    Repository
    CI/CD
    code push run CI/CD deploy
    deploy
    宣言通りの状態になっているか把握しにくい

    View full-size slide

  10. #RAKUSMeetup
    GitOps
    Weaveworks社によって提唱された、Gitを中心としたk8s管理と
    デプロイメント手法
    kubectlコマンドを利用せずに、git push のみでデプロイを管理
    できる手法
    https://www.weave.works/technologies/gitops/
    10

    View full-size slide

  11. #RAKUSMeetup
    GitOpsの原則
    1. システム全体が宣言的にコード化されていること
    2. システムのバージョンをGitで管理していること
    3. 変更を自動的に適用できること
    4. 正しさを保証し乖離をアラートし自己回復すること
    11

    View full-size slide

  12. #RAKUSMeetup
    GitOpsの構成例
    開発者
    運用者
    アプリケーションソースコード
    マニフェストファイル
    コンテナイメージ
    pull型のデプロイ
    【引用】https://www.weave.works/technologies/gitops/
    12

    View full-size slide

  13. #RAKUSMeetup
    GitOpsで得られる効果
    1. 生産性の向上
    2. Developer Experienceの向上
    3. 安定性の向上
    4. 信頼性の向上
    5. 一貫性と標準化
    6. セキュリティ保証
    13

    View full-size slide

  14. #RAKUSMeetup
    GitOpsを構築してみる
    14

    View full-size slide

  15. #RAKUSMeetup
    ツールの選定
    ● 候補となるツールが多すぎる・・・・
    ● なるべく社内標準ツールを利用してGitOpsを構築したい
    ● 社内標準ツール
    ○ Git
    ■ GitLab
    ○ CI/CD
    ■ GitLab CI
    ■ Jenkins
    15

    View full-size slide

  16. #RAKUSMeetup
    ラクスでのツールの選定案
    ● Code Repository : GitLab
    ● CI : GitLab(GitLab Runner)
    ● Container Registry : GitLab Container Registry
    ● Config Updater : なし(CI上で実行)
    ● Manifest Repository : GitLab
    ● Deploy Operator : ArgoCD
    16

    View full-size slide

  17. #RAKUSMeetup
    17
    開発者
    Code
    Repository
    CI Pipeline Container
    Registry
    Config
    Repository
    運用者
    Deploy
    Service
    ①コミット ②Pipelineを実行
    ③コンテナイメージを push
    ④イメージの変更を更新
    ⑤更新を承認
    ⑥リポジトリの更新を検知
    ⑦デプロイ Service
    Deployment
    Kubernetes Cluster

    View full-size slide

  18. #RAKUSMeetup
    CI Pipeline
    ● GitLab CIを選定
    ○ 社内標準ツールであり既にノウハウがあるため
    ○ GitLab Container Registryと組み合わせることで、
    コードリポジトリ・コンテナレジストリ・CI環境をまとめて管理できる
    ● その他候補ツール
    ○ Tekton
    ■ GoogleのKnativeからCI/CDを切り離したツール
    18

    View full-size slide

  19. #RAKUSMeetup
    CD Pipeline
    ● ArgoCDを選定
    ○ GitOpsの原則を実現するk8s環境のCDツール
    ○ Gitリポジトリの状態に合わせて差分検出により自動デプロイを行う
    ○ GUIが整備されており、クラスターの可視化や画面からのデプロイが可能
    ● その他候補ツール
    ○ Flux
    ■ GitOpsを提唱したWeaveworksのCDツール
    ○ JenkinsX
    19

    View full-size slide

  20. #RAKUSMeetup
    GitOpsで期待できる効果
    ● CIとCDの分離ができる
    ○ 開発チームがCI、インフラチームがCDと役割を明確に分離できる
    ○ k8sにはCDからしかアクセスできないため、安全性を高めれる
    ● 使い慣れたGitで開発〜運用を管理できる
    ○ リリース用の作業手順の効率化
    ○ 操作履歴は全てcommitやMRの履歴から追跡が可能
    20

    View full-size slide

  21. #RAKUSMeetup
    まとめ
    ● GitOpsによりk8sの特徴を活かしたCI/CDを構築
    ○ GitLabとArgoCDで構築
    ○ k8s導入はまだ先になりそうだが準備をしておく
    ● k8s・CloudNative領域はツールも膨大で選定が困難
    ○ なるべく従来のノウハウを活かせるツールを選定して移行する
    21

    View full-size slide