Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
マルチクラウド・コンテナに最適化したリスクを最小化するContinuous Delivery
Search
NAVITIME JAPAN
PRO
November 30, 2019
Technology
48
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
マルチクラウド・コンテナに最適化したリスクを最小化するContinuous Delivery
2019/11/30に開催された「Developers Boost 2019~U30エンジニアの登竜門~」にて発表した資料です。
NAVITIME JAPAN
PRO
November 30, 2019
More Decks by NAVITIME JAPAN
See All by NAVITIME JAPAN
株式会社ナビタイムジャパン 会社紹介資料2026
navitimejapan
PRO
1
2.7k
つよつよリーダーが 抜けたらどうする? 〜ナビタイムのAgile⽀援組織の変遷〜
navitimejapan
PRO
23
16k
実践ジオフェンス 効率的に開発するために
navitimejapan
PRO
3
1.1k
安全で使いやすいCarPlayアプリの 魅せ方:HIGと実例から学ぶ
navitimejapan
PRO
1
310
見えないユーザの声はログに埋もれている! ~ログから具体的なユーザの体験を数値化した事例紹介~
navitimejapan
PRO
6
3.5k
ユーザーのためなら 『デザイン』 以外にも手を伸ばせる
navitimejapan
PRO
2
2k
フツーのIT女子が、 Engineering Managerになるまで
navitimejapan
PRO
3
480
不確実性に打ち勝つOKR戦略/How to manage uncertainty with OKR strategy
navitimejapan
PRO
4
4.1k
アジャイルを小さいままで 組織に広める 二周目 / Agile Transformation in NAVITIME JAPAN iteration 2
navitimejapan
PRO
4
1.6k
Other Decks in Technology
See All in Technology
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
110
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
1
240
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
150
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
530
Screen Lens - 今見てる画面を翻訳する
komagata
0
260
家のリアーキテクト・リファクタリング
suguruooki
0
130
ASTを使って影響範囲を特定する
nealle
0
180
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
0
380
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
740
安心して変更できるWebフロントエンドの作り方
pirosikick
4
1.8k
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
250
アリアドネの糸と、20年ごとの建て替え ── 長尾真『電子図書館』を、伊勢で読み直す / Rereading Makoto Nagao’s "Electronic Library" in Ise
ykiyota
0
160
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
450
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
460
sira's awesome portfolio website redesign presentation
elsirapls
0
410
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
720
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
520
Being A Developer After 40
akosma
91
590k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
700
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Transcript
マルチクラウド・コンテナに 最適化したリスクを最小化する 株式会社ナビタイムジャパン 研究開発 インフラグループ 清水健司
自己紹介 清水 健司 • クラウド移行メインの インフラエンジニア • Docker/Kubernetes/Spinnaker • たまにJavaとGo
• AWS Re:Invent2019参加予定! • 筆圧強め
今日話す内容 デプロイパイプライン クラウド環境上にあるKubernetesに対して Spinnakerを使用して、リスクの低く安全なデプロイを実現させた話 ※ ビルド / 単体テストなど所謂CIの部分に関しては今回触れません Commit Stage
Automated Acceptance Test Manual Test Release
ナビタイムジャパンについて
ナビタイムジャパンのサービス概要 公共交通 ドライブ ツーリング 外国人&海外 トラベル & フィットネス PC /
SPブラウザ NAVITIME 乗換NAVITIME バスNAVITIME こみれぽ ドライブサポーター カーナビタイム トラックカーナビ ツーリングサポーター 自転車NAVITIME NAVITIME for Japan Travel NAVITIME Transit NAVITIME Travel ALKOO PLAT
ナビタイムジャパンのサービス概要 ビジネスナビタイム 動態管理ソリューション ビジネスナビタイム 交通費精算パッケージ 広告 / アライアンス オウンドメディア 交通コンサルティング
電鉄・バス事業者向け ソリューション API / SDK テレマティクスサービス
ナビタイムジャパンでのクラウド活用 メインとしてAWSを利用しつつ、 GCPやAlibabaでもサービスを展開 機械学習ではAzureをメインに使用している コンピューティングリソース 機械学習 ログ基盤
ナビタイムジャパンでの 活用 全てマネージドサービスを利用して Kuberntesクラスタを構築しています ※ コンテナ活用という意味ではAmazon ECSが多くの割合を占める コンピューティングリソース 機械学習 ログ基盤
Why Spinnaker?
きっかけ EKSが東京リージョンにやってまいりました! 全文検索エンジンのSolrをAmazon EC2の固定台数で運用しているんだけ ど、輻輳の抑制や運用コストの削減のためにオートスケーリングできるように ならないかな…? 社内でGKEでの構築事例もあるしEKS上に構築するか!
きっかけ EKSが東京リージョンにやってまいりました! 全文検索エンジンのSolrをAmazon EC2の固定台数で運用しているんだけ ど、輻輳の抑制や運用コストの削減のためにオートスケーリングできるように ならないかな…? 社内でGKEでの構築事例もあるしEKS上に構築するか! Kubernetesを使う上での デプロイフローも考え直すことに
ソフトウェアデリバリの原則 ソフトウェアをリリースするための、 反復可能で信頼できるプロセスを 作り上げよ − 第1章7節より • 全てを自動化すること • アプリケーションをビルド・デプロイ・テスト・リリースす
るのに必要なものを全てバージョン管理下に置くこと
全て自動化すること 全社的に利用されている Jenkins を使う? • 学習コストが少ない • 既存の環境で事足りるので新しくコストが発生することが無い 1
• マニフェストを取得して、kubectl applyするだけのジョブであれば 既に運用に載っているため検証が必要ない
全て自動化すること 高度なデプロイメント戦略 • Rolling Updateでは要件が満たせないことが存在 ◦ リスクの高いリリースを行ったときに直ぐに戻せない ◦ 新しいバージョンを出す前に本番と全く同じ環境で検証したいという 要望を満たせない
Jenkins 採用時の問題点①
全て自動化すること 運用のコスト • いくつもあるPJ毎に所有しているため、 各サーバで共通の処理を用意するのが難しい ◦ 構築自体は各PJで行う ◦ 利用するPJが増えるたびに権限設定が必要になる ◦
pythonのライブラリが更新されてクラウド操作用のCLIが 動かなくなったり… Jenkins 採用時の問題点②
全て自動化すること ツールを増やすことを恐れるな 成熟した環境では汎用的なツールと専門的な ツールを組み合わせよ Kubernetesへのデプロイ専門のツールを採用 Kubernetesのエコシステムを成熟してきており デプロイのためのツールもたくさん出てきている NAVITIMEに必要な要素はなんだろう…?
全て自動化すること 必要なこと • クラウドプロバイダの違いが抽象化されていること(= マ ルチクラウドへのデプロイ可能) • B to B
事業もあるため Continuous Deployment で 共通化するのは難しい • 豊富なデプロイメント戦略が取れること • Helmを使用しない(Kustomizeで差分吸収する)
全て自動化すること 選ばれたのはSpinnakerでした Kubernetes V2 Provider (Manifest Based) が BetaからGAになったのも大きいです NETFLIXが公開したCDに特化したツール
必要なものをすべてバージョン管理下に置く Single Source of Truthは可能? • SpinnakerのパイプラインはJsonで吐ける + k8sリソースはyamlで宣言できる 実現において必要とされるテンプレートエンジン
• 2019年9月のリリースまでKustomizeサポートが 無かったため検証/本番で完全にファイルが別に
必要なものをすべてバージョン管理下に置く Spinnakerパイプラインの管理 • Jsonを直接作成/改修するのは辛い CloudFormationの比ではない • 運用フロー ◦ 検証環境はGUIでパイプラインを作成・編集 ◦
CLI(spin)を使用してJSONを取得してソースリポジトリに保存 ◦ パイプラインをリポジトリから取得し、CLI(spin)から本番環境へパイプ ラインを登録
How to Use it?
2つの事例 本番環境に対してSpinnakerを使用してデプロイを 行っているものを2つ取り上げます • 全文検索エンジンSolr • BtoBのオウンドメディア(Java製Webアプリ) どちらもBlue/Greenデプロイがベースにあり それぞれの要件に合わせてパイプラインに処理が加わる
我々の知る限りで最も強力なリリース管理である 本番環境としてまったく同じ環境を2組用意する それぞれをブルーおよびグリーンと呼ぶ 新しいバージョンを公開するのはルータ設定の更新のみとなる 公開するまでの作業はもう一つの環境に影響しない
での Podの管理にはReplicasetリソースを使うことになる ※ Deploymentリソースは使えません😢 Deployment Replicaset-1 Replicaset-2 Pod Container Pod
Container kind: Deployment metadata: name: sample-deployment spec: template: metadata: labels: app: sample-app ココを書き換えることによって ルーティングを変えている Deploymentリソースだと RollingUpdateがかかってしまう
での 考えられるデプロイの実行フロー DeployのStageはデフォルトで通信が流れるようになってるため、このま まだと新バージョンはデプロイ直後に通信が流れてしまう ※ Enable :指定したリソースにTrafficが流れるようにする Disable: 指定したリソースにTrafficを流さないようにする 新バージョンの
デプロイ (新バージョンに 対する処理) 新バージョンを Enableする 旧バージョンを Disableする
での 実際に有効なデプロイの実行フロー Podのreplica数を0で宣言したマニフェストでデプロイ その後にTrafficが流さないようにDisableを行ってから数を増やす Pod数が0で 新バージョンの デプロイ (新バージョンに 対する処理) 新バージョンを
enableする 旧バージョンを disableする 新バージョンへ Trafficを流さない Pod数を増加
全文検索エンジン での α Warming Up Query JobリソースとHeadless Serviceを組み合わせることで 新バージョンに均等にリクエストを送信した後に切替 Job
Pod Container Headless Service Pod Pod Pod ラウンドロビン
アプリでの α Manual Test 本番環境の新バージョンに対してテストを行う 結果によってManual Judegmentを行いデプロイを 継続するかRollbackするかを決める Test Service
に付与される を利用して を新しいバー ジョンのみに向ける new-version Pod Client
まとめ・今後の展望
• SolrをKubernetes基盤に移行 + Spinnakerの構成を 取ることで運用が楽に ◦ 今までと振る舞いを大きく変えることなく、オートスケーリングが出来るよ うになった ◦ 構築が簡単になったことで、Solrを扱うチームやインフラの負荷が減りま
した • デプロイをSpinnakerに集中させることで、 実行環境が統一された まとめ
• パイプラインテンプレート使って保守性を高めたい • より安全なロールバックを行いたい ◦ ソースリポジトリがサービス不全になった際に障害となった ◦ デプロイに必要な条件などを厳しく監視する • 社内でのSpinnaker布教
◦ プロダクトを知り尽くしている開発者の方がパイプラインを改善できる状 態に持っていく 今後の展望
ブースにて抽選会やってます ハズレ無しの抽選会 やってます! もし良かったらどうぞ!! 書籍販売の2つ隣の ブースにてお待ちして おります!
ご清聴ありがとうございました