Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
オイラ大地のマイクロサービス開発
Search
ohdate-yuuta
August 05, 2019
Technology
1
540
オイラ大地のマイクロサービス開発
オイラ大地では、Kubernetesを利用したシステムのマイクロサービス化を行っています。 そのマイクロサービス化において、どのように開発やリリースを行っているかについてお話しします。
ohdate-yuuta
August 05, 2019
Tweet
Share
More Decks by ohdate-yuuta
See All by ohdate-yuuta
ORD風Kubernetesのラズベリーパイ包み
ohdateyuuta
0
1.5k
Other Decks in Technology
See All in Technology
自分を理解するAI時代の準備 〜マイプロフィールMCPの実装〜
edo_m18
0
110
キャディでのApache Iceberg, Trino採用事例 -Apache Iceberg and Trino Usecase in CADDi--
caddi_eng
0
120
今からでも間に合う! 生成AI「RAG」再入門 / Re-introduction to RAG in Generative AI
hideakiaoyagi
1
170
Amazon Q Developer for GitHubとAmplify Hosting でサクッとデジタル名刺を作ってみた
kmiya84377
0
3.5k
新規プロダクト開発、AIでどう変わった? #デザインエンジニアMeetup
bengo4com
0
450
Tenstorrent 開発者プログラム
tenstorrent_japan
0
310
データ戦略部門 紹介資料
sansan33
PRO
1
3.2k
(新URLに移行しました)FASTと向き合うことで見えた、大規模アジャイルの難しさと楽しさ
wooootack
0
700
「実体」で築く共通認識: 開発現場のコミュニケーション最適化 / Let's Get on the Same Page with Concrete Artifacts: Optimization of Communication in dev teams
kazizi55
0
140
成立するElixirの再束縛(再代入)可という選択
kubell_hr
0
260
工具人的一生: 開發很多 AI 工具讓我 慵懶過一生
line_developers_tw
PRO
0
150
Data Hubグループ 紹介資料
sansan33
PRO
0
1.8k
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Facilitating Awesome Meetings
lara
54
6.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
34k
Speed Design
sergeychernyshev
31
990
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Adopting Sorbet at Scale
ufuk
77
9.4k
Six Lessons from altMBA
skipperchong
28
3.8k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.7k
The Cost Of JavaScript in 2023
addyosmani
50
8.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Transcript
オイラ大地の マイクロサービス開発 <OiStudy #2 - パルシステムさんとオイラ大地> 大舘
雄太 1 2019/08/05 Mon
アジェンダ 1. 自己紹介 2. 覚えて帰ってほしいこと 3. オイシックス・ラ・大地とは 4. オイシックスについて 5.
マイクロサービス化の背景 6. マイクロサービス開発の課題 7. GitOpsによるマイクロサービス開発 2
1. 自己紹介 • 名前 ◦ 大舘 雄太(おおだて ゆうた) @utautau • 所属
◦ オイシックス・ラ・大地 システム本部 システム基盤部 基盤刷新セクション • 経歴 ◦ 入社:2018年4月 ◦ 日々さわるもの:Java, Spring Boot, Kubernetes 3
2. 覚えて帰ってほしいこと • マイクロサービス化やってます • Gitopsによるマイクロサービス開発してます ◦ 開発の課題を、こうやって解決してます
4
3-1. オイシックス・ラ・大地とは 5
6 3-2. オイシックス・ラ・大地とは 3つのブランドから成り立つ会社
4-1. オイシックスについて 2000年創業の生鮮食品のネットショップ 7
4-2. オイシックスについて • ECサイトは2000年の創業当時からJavaで作成 • ソース上のコメントで確認できる 最古の日付は、2000年6月1日 8
巨大なモノリシックシステム
5-1. マイクロサービス化の背景 一方で、近年のブランドの成長 → 従来では発生しなかった課題 9 1. システムの品質 2. ローンチスピード
3. スケーラビリティ マイクロサービス化
5-2. マイクロサービス化の背景 Kubernetes Dockerなどで作成した沢山の マイクロサービスをpodという単位で 協調して動かせる YAMLファイルで定義するだけ! 10
6-1. マイクロサービス開発の課題 Kubernetesを利用したマイクロサービス化 →大量に増える設定ファイル(YAML) →大量に「kubectl apply」コマンド 11 サービス数 環境数 ・本番
・テスト ・etc. Kubernetes用ファイル(YAML) ・Deployment ・ConfigMap ・Secret ざっくりでも...
6-2. マイクロサービス開発の課題 ファイル管理とデプロイ作業が分離している不安... ◦ ちゃんと最新のマニフェストをapplyしているか ◦ ちゃんと対象のクラスターにapplyしているか ◦ ちゃんと対象のネームスペースにapplyしているか ◦
ちゃんと対象の... ちゃんと... ちゃんと... 12 GitOps →ファイル管理とデプロイ作業が一緒だとうれしい!
7-1. GitOpsによるマイクロサービス開発 GitOps=プル&リクエストによるオペレーション 13
7-2. GitOpsによるマイクロサービス開発 14 ローカル開発環境 GitHub CircleCI Docker Image manifest
repo Pull Push PR CD 5 6 7 8 Kubernetes Java repo PR CI Pull Push 3 4 1 2 Docker Hub GitOpsにもとづくCI/CD
7-3. GitOpsによるマイクロサービス開発 15 CI (Continuous Integration) 1. Java
Repositoryを作成 or Pull 2. プロダクトコード/テストコードを記述 3. Java RepositoryにPush a. 自動でCircle CIがテストコードを実行 b. 自動でDocker HubにImageをPush
7-4. GitOpsによるマイクロサービス開発 16 > 自動でCircle CIでテストコードを実行 ERROR 外部リソース(DBなど)が必要!
じゃあ、、 1. マネージドサービスをテスト用に立てる→自由に使えない。。 2. インメモリDB(H2など)を使う→微妙に仕様が違ったり。。 3. Dockerで立てる→「docker pull 」「docker run」・・・
7-5. GitOpsによるマイクロサービス開発 17 「Testcontainers」という便利なライブラリがある ・テストコードからコンテナを起動できるライブラリ ・テスト時にイメージのpull/run/stopを自動的に行える
7-6. GitOpsによるマイクロサービス開発 18 ローカル開発環境 GitHub CircleCI Docker Image manifest
repo Pull Push PR CD 5 6 7 8 Kubernetes Java repo PR CI Pull Push 3 4 1 2 Docker Hub GitOpsにもとづくCI/CD
7-7. GitOpsによるマイクロサービス開発 CD (Continuous Delivery) 1. manifest Repositoryを作成 or Pull
2. マニフェストを記述 3. manifest RepositoryにPush a. 自動でCircleCI経由で、Kubernetesにデプロイ ※ブランチ名によって、デプロイ先を選択 19
>自動でCircleCI経由で、Kubernetesにデプロイ configmapリソースのみの更新の場合 7-8. GitOpsによるマイクロサービス開発 20 podに変更が反映されない podの再起動が必要! なぜなら、podは起動時に環境変数をキャッシュしてる
「kustomize」というツール (設定ファイルを基本設定 + 差分値に分割できる) 「configMapGenerator」を使う! 7-9. GitOpsによるマイクロサービス開発 21 deploymentリソースも更新することができる →ポッドが再起動される
configMapGenerator 7-10.GitOpsによるマイクロサービス開発 22 namespace: ns1 bases: - ../base patches:
- deployment.yaml - service.yaml configMapGenerator: - name: sample-service-config literals: - SPRING_PROFILES_ACTIVE=production env: - name: SPRING_PROFILES_ACTIVE valueFrom: configMapKeyRef: name: sample-service-config key: SPRING_PROFILES_ACTIVE production-ns1/kustomization.yaml base/deployment.yaml
7-11.GitOpsによるマイクロサービス開発 23 apiVersion: v1 kind: ConfigMap metadata: name: sample-service-config-tb9f7t5gh8 namespace:
ns1 data: SPRING_PROFILES_ACTIVE: "production" --- apiVersion: v1 kind: Deployment # 省略 env: - name: SPRING_PROFILES_ACTIVE valueFrom: configMapKeyRef: name: sample-service-config-tb9f7t5gh8 key: SPRING_PROFILES_ACTIVE kustomizeによって作成されたファイル applyするとpodに再起動がかかる! ハッシュ値つきの configMapのnameが作成される
まとめ • マイクロサービス化やってます ◦ 2000年から作ってきたシステムがモノリス化 ◦ サービス成長に遅れをとらないように改善 • Gitopsによるマイクロサービス開発してます ◦
ミスなく高速に開発するためのCI/CD ▪ GitOpsに基づく開発フロー ▪ Testcontainersを用いたテスト ▪ kustomizeを用いたCD 24