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
550
オイラ大地のマイクロサービス開発
オイラ大地では、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
シークレット管理だけじゃない!HashiCorp Vault でデータ暗号化をしよう / Beyond Secret Management! Let's Encrypt Data with HashiCorp Vault
nnstt1
3
230
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.1k
品質視点から考える組織デザイン/Organizational Design from Quality
mii3king
0
160
Obsidian応用活用術
onikun94
1
450
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
500
人工衛星のファームウェアをRustで書く理由
koba789
11
6.5k
エラーとアクセシビリティ
schktjm
1
1.2k
5分でカオスエンジニアリングを分かった気になろう
pandayumi
0
180
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.2k
AWSで始める実践Dagster入門
kitagawaz
1
570
Agile PBL at New Grads Trainings
kawaguti
PRO
1
380
20250910_障害注入から効率的復旧へ_カオスエンジニアリング_生成AIで考えるAWS障害対応.pdf
sh_fk2
3
200
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Facilitating Awesome Meetings
lara
55
6.5k
A designer walks into a library…
pauljervisheath
207
24k
Unsuck your backbone
ammeep
671
58k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Thoughts on Productivity
jonyablonski
70
4.8k
Designing for humans not robots
tammielis
253
25k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Code Review Best Practice
trishagee
70
19k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Why Our Code Smells
bkeepers
PRO
339
57k
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