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を使わないマネジメント業務
kzkmaeda
1
330
赤煉瓦倉庫勉強会「Databricksを選んだ理由と、絶賛真っ只中のデータ基盤移行体験記」
ivry_presentationmaterials
2
300
生まれ変わった AWS Security Hub (Preview) を紹介 #reInforce_osaka / reInforce New Security Hub
masahirokawahara
0
430
LangSmith×Webhook連携で実現するプロンプトドリブンCI/CD
sergicalsix
1
200
生成AIで小説を書くためにプロンプトの制約や原則について学ぶ / prompt-engineering-for-ai-fiction
nwiizo
6
4.1k
KiCadでPad on Viaの基板作ってみた
iotengineer22
0
290
MobileActOsaka_250704.pdf
akaitadaaki
0
110
タイミーのデータモデリング事例と今後のチャレンジ
ttccddtoki
6
2.3k
CI/CD/IaC 久々に0から環境を作ったらこうなりました
kaz29
1
230
Core Audio tapを使ったリアルタイム音声処理のお話
yuta0306
0
180
Claude Code に プロジェクト管理やらせたみた
unson
0
190
開発生産性を組織全体の「生産性」へ! 部門間連携の壁を越える実践的ステップ
sudo5in5k
1
5.8k
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
KATA
mclloyd
30
14k
Testing 201, or: Great Expectations
jmmastey
42
7.6k
Navigating Team Friction
lara
187
15k
Building Adaptive Systems
keathley
43
2.6k
How to Ace a Technical Interview
jacobian
277
23k
BBQ
matthewcrist
89
9.7k
Bash Introduction
62gerente
614
210k
Become a Pro
speakerdeck
PRO
28
5.4k
For a Future-Friendly Web
brad_frost
179
9.8k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Six Lessons from altMBA
skipperchong
28
3.9k
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