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
570
オイラ大地のマイクロサービス開発
オイラ大地では、Kubernetesを利用したシステムのマイクロサービス化を行っています。 そのマイクロサービス化において、どのように開発やリリースを行っているかについてお話しします。
ohdate-yuuta
August 05, 2019
Tweet
Share
More Decks by ohdate-yuuta
See All by ohdate-yuuta
ORD風Kubernetesのラズベリーパイ包み
ohdateyuuta
0
1.6k
Other Decks in Technology
See All in Technology
20251225_たのしい出張報告&IgniteRecap!
ponponmikankan
0
110
Cloud WAN MCP Serverから考える新しいネットワーク運用 / 20251228 Masaki Okuda
shift_evolve
PRO
0
140
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
61k
Java 25に至る道
skrb
3
210
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
1
640
善意の活動は、なぜ続かなくなるのか ーふりかえりが"構造を変える判断"になった半年間ー
matsukurou
0
440
コミュニティが持つ「学びと成長の場」としての作用 / RSGT2026
ama_ch
0
200
人工知能のための哲学塾 ニューロフィロソフィ篇 第零夜 「ニューロフィロソフィとは何か?」
miyayou
0
420
BidiAgent と Nova 2 Sonic から考える音声 AI について
yama3133
2
150
Claude Codeを使った情報整理術
knishioka
20
12k
AWSと生成AIで学ぶ!実行計画の読み解き方とSQLチューニングの実践
yakumo
2
410
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
650
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
0
420
Large-scale JavaScript Application Architecture
addyosmani
515
110k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
0
230
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
51k
Marketing to machines
jonoalderson
1
4.5k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
58
41k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.8k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
37
Context Engineering - Making Every Token Count
addyosmani
9
590
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