Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

#RAKUSMeetup 取り組みの背景 4

Slide 5

Slide 5 text

#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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

#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 宣言通りの状態になっているか把握しにくい

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

#RAKUSMeetup GitOpsを構築してみる 14

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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