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

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

971ed28afdc89340ebbf2114ed4ef538?s=47 txkxyx
June 02, 2022
320

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

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

971ed28afdc89340ebbf2114ed4ef538?s=128

txkxyx

June 02, 2022
Tweet

Transcript

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

  2. #RAKUSMeetup 自己紹介 • Job ◦ 技術推進PJのリーダーやメンバー (先行技術検証) ◦ 横断機能開発 (要件定義〜開発)

    • Career ◦ Java、Python、AWS、Vue.js ◦ Java研修講師、資格対策本の執筆 ◦ 2020年〜株式会社ラクスに所属 2
  3. #RAKUSMeetup 本日お話する内容 • Kubernetes導入に向けた技術推進PJを実施しました • 導入に向けてIaCを活かしたCI/CDの見直しを実施 • ツールの選定や、実際にCI/CD環境を構築しましたので、 その知見を共有します 3

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

  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

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

    k8sの特徴を活かしたCI/CDを構築する必要がある 6
  7. #RAKUSMeetup k8s導入後のCI/CDの検討 7

  8. #RAKUSMeetup Kubernetes導入による変化 • k8s導入によりほぼ全てのリソースがIaCによりマニフェスト ファイルで管理される ◦ 従来はアプリケーション・MW・OSを個別で管理 ◦ k8sではマニフェストファイルで管理できる 8

    アプリの Manifest DBの Manifest Webサーバーの Manifest kubectl apply Kubenetes Webサー バー コンテナ アプリ コンテナ DB コンテナ Manifest宣言通りの状態
  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 宣言通りの状態になっているか把握しにくい
  10. #RAKUSMeetup GitOps Weaveworks社によって提唱された、Gitを中心としたk8s管理と デプロイメント手法 kubectlコマンドを利用せずに、git push のみでデプロイを管理 できる手法 https://www.weave.works/technologies/gitops/ 10

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

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

  13. #RAKUSMeetup GitOpsで得られる効果 1. 生産性の向上 2. Developer Experienceの向上 3. 安定性の向上 4.

    信頼性の向上 5. 一貫性と標準化 6. セキュリティ保証 13
  14. #RAKUSMeetup GitOpsを構築してみる 14

  15. #RAKUSMeetup ツールの選定 • 候補となるツールが多すぎる・・・・ • なるべく社内標準ツールを利用してGitOpsを構築したい • 社内標準ツール ◦ Git

    ▪ GitLab ◦ CI/CD ▪ GitLab CI ▪ Jenkins 15
  16. #RAKUSMeetup ラクスでのツールの選定案 • Code Repository : GitLab • CI : GitLab(GitLab Runner) • Container

    Registry : GitLab Container Registry • Config Updater : なし(CI上で実行) • Manifest Repository : GitLab • Deploy Operator : ArgoCD 16
  17. #RAKUSMeetup 17 開発者 Code Repository CI Pipeline Container Registry Config

    Repository 運用者 Deploy Service ①コミット ②Pipelineを実行 ③コンテナイメージを push ④イメージの変更を更新 ⑤更新を承認 ⑥リポジトリの更新を検知 ⑦デプロイ Service Deployment Kubernetes Cluster
  18. #RAKUSMeetup CI Pipeline • GitLab CIを選定 ◦ 社内標準ツールであり既にノウハウがあるため ◦ GitLab

    Container Registryと組み合わせることで、 コードリポジトリ・コンテナレジストリ・CI環境をまとめて管理できる • その他候補ツール ◦ Tekton ▪ GoogleのKnativeからCI/CDを切り離したツール 18
  19. #RAKUSMeetup CD Pipeline • ArgoCDを選定 ◦ GitOpsの原則を実現するk8s環境のCDツール ◦ Gitリポジトリの状態に合わせて差分検出により自動デプロイを行う ◦

    GUIが整備されており、クラスターの可視化や画面からのデプロイが可能 • その他候補ツール ◦ Flux ▪ GitOpsを提唱したWeaveworksのCDツール ◦ JenkinsX 19
  20. #RAKUSMeetup GitOpsで期待できる効果 • CIとCDの分離ができる ◦ 開発チームがCI、インフラチームがCDと役割を明確に分離できる ◦ k8sにはCDからしかアクセスできないため、安全性を高めれる • 使い慣れたGitで開発〜運用を管理できる

    ◦ リリース用の作業手順の効率化 ◦ 操作履歴は全てcommitやMRの履歴から追跡が可能 20
  21. #RAKUSMeetup まとめ • GitOpsによりk8sの特徴を活かしたCI/CDを構築 ◦ GitLabとArgoCDで構築 ◦ k8s導入はまだ先になりそうだが準備をしておく • k8s・CloudNative領域はツールも膨大で選定が困難

    ◦ なるべく従来のノウハウを活かせるツールを選定して移行する 21