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
GeminiとNotebookLMによる金融実務の業務革新
abenben
0
250
CursorによるPMO業務の代替 / Automating PMO Tasks with Cursor
motoyoshi_kakaku
2
820
ネットワーク保護はどう変わるのか?re:Inforce 2025最新アップデート解説
tokushun
0
160
Github Copilot エージェントモードで試してみた
ochtum
0
140
「Chatwork」の認証基盤の移行とログ活用によるプロダクト改善
kubell_hr
1
240
事業成長の裏側:エンジニア組織と開発生産性の進化 / 20250703 Rinto Ikenoue
shift_evolve
PRO
2
5.5k
PHPでWebブラウザのレンダリングエンジンを実装する
dip_tech
PRO
0
220
React開発にStorybookとCopilotを導入して、爆速でUIを編集・確認する方法
yu_kod
1
110
AI専用のリンターを作る #yumemi_patch
bengo4com
5
2.3k
整頓のジレンマとの戦い〜Tidy First?で振り返る事業とキャリアの歩み〜/Fighting the tidiness dilemma〜Business and Career Milestones Reflected on in Tidy First?〜
bitkey
1
3.7k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
940
AWS テクニカルサポートとエンドカスタマーの中間地点から見えるより良いサポートの活用方法
kazzpapa3
3
620
Featured
See All Featured
Become a Pro
speakerdeck
PRO
28
5.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
It's Worth the Effort
3n
185
28k
Into the Great Unknown - MozCon
thekraken
39
1.9k
GraphQLとの向き合い方2022年版
quramy
49
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
GitHub's CSS Performance
jonrohan
1031
460k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
The Invisible Side of Design
smashingmag
300
51k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
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