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
How We Migrated K8S Without Downtime
Search
Kim, Hirokuni
March 11, 2021
Technology
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
How We Migrated K8S Without Downtime
CloudNative Days 2021登壇資料
Kim, Hirokuni
March 11, 2021
More Decks by Kim, Hirokuni
See All by Kim, Hirokuni
エンジニアが起業する意味: 起業経験ゼロから電動キックボード 事業を創る話
kimh
0
1.5k
K8sとTraefikでつくるマイクロフロントエンド
kimh
14
3.1k
CI/CDを使い倒して数段上のソフトウェア開発をしよう (デブサミ関西)
kimh
2
1.2k
デブサミ福岡: CI/CDを使い倒して数段上のソフトウェア開発をしよう
kimh
0
760
CircleCI 2.0を支える2つの コンテナクラスターとSRE
kimh
6
6.5k
なぜ今CI/CDがアジャイル組織に必要とされるのか?
kimh
0
380
CircleCI 2.0を支える2つのコンテナクラスター
kimh
2
4.9k
CircleCI 2.0を支えるインフラとSREの役割
kimh
5
2.5k
Orbsを使ってAWSへ簡単デプロイ
kimh
1
1.8k
Other Decks in Technology
See All in Technology
マルチアカウント環境での コーディングエージェントを使った障害調査が大変なので AIエージェントにReadOnly権限を付与してみた / ReadOnly AI Agents for Multi-Account AWS Incident Response
yamaguchitk333
2
110
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
150
新しいVibe Codingと”自走”について
watany
6
330
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
2026 TECHFRESH 畢業分享會 - 開發日常大解密!從領域驅動到企業級上線
line_developers_tw
PRO
0
1k
【2026年版】 ベクトル検索䛸 Embedding最前線
mocobeta
0
140
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
130
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
2.2k
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
370
エンジニアリング戦略の作り方 / Crafting Engineering Strategy
iwashi86
21
6.9k
やさしいA2A入門
minorun365
PRO
12
1.9k
FinOps × AIエージェントで実現する コストインシデントの自動調査
oasis1994liveforever
0
140
Featured
See All Featured
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
240
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Accessibility Awareness
sabderemane
1
140
Discover your Explorer Soul
emna__ayadi
2
1.1k
A designer walks into a library…
pauljervisheath
211
24k
Embracing the Ebb and Flow
colly
88
5.1k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
250
Code Reviewing Like a Champion
maltzj
528
40k
Typedesign – Prime Four
hannesfritz
42
3.1k
Believing is Seeing
oripsolob
1
140
Transcript
1 How We Migrated K8S Without Downtime Hirokuni Kim CircleCI,
Staff Site Reliability Engineer #CNDO2021
2 CircleCIについて ✓ 世界最大規模のクラウド CI/CD サービス ✓ より良いコードをより速く、簡単にリリースすることを可能に ✓ 2011年設立、サンフランシスコ本社
✓ 300人+の社員(米国、東京、英国にオフィス) ✓ 2020年4月 1億ドルのシリーズEを実施 Representative Customers
3 コミュニティーもやっています CircleCI・connpassで検索!
4 このプレゼンテーションについて • インハウスのK8SからEKSへ移行した時の話 • シームレスな移行方法 • これから移行する予定がある人の参考になれば
5 Kim, Hirokuni (金 洋国) Staff Site Reliability Engineer SREチーム
CircleCIで5年ほど働いています。サポート、開発、 日本支社立ち上げ、色々やってきました 自己紹介
6 Problems
7 CircleCIの構成 • マイクロサービス (約70) • 各チームは複数のサービスを管理 • SREがK8Sの構築・運用を担当
8 注ぎ足しで運用してきたK8Sクラスターの限界 • ワーカー数 (EC2インスタンス): ~100 • K8Sのバージョンが古い ◦ いろいろなものがサポートされてない
(e.g. Helm 3) • 自動化されてない ◦ ワーカーのローリングアップデートが大変
9 移行先: EKS GKEも検討したがEKSを選択 • Managed K8S単体ではGKEがよかった ◦ 特に欲しかったのはワーカーの自動アップデート •
ジョブの実行基盤はAWSにすでにある • GKEに移行したときのAWS <-> GCP間のトラフィックコストが莫大に
10 やりたいこと EC2で稼働しているK8Sをどうやって ダウンタイムなしでEKSへ移行するか
11 Plans
12 プランA: Big Bang Migration 新しいクラスターを用意してDNSで一気に切り替える Pros: • シンプル •
移行作業が早く終わる Cons: • EKSでは動かないサービスがあるかもしれない • 影響範囲が大きすぎる。ダウンタイムの可能性大
13 プランB: Gradual Migration サービスごとに新しいクラスターに移行する Pros: • 影響範囲を限定できる • 切り戻しが簡単
Cons: • 時間がかかる • 各サービスのオーナーと調整する必要がある
14 プランB: Gradual Migration サービスごとに新しいクラスターに移行する Pros: • 影響範囲を限定できる • 切り戻しが簡単
Cons: • 時間がかかる • 各サービスのオーナーと調整する必要がある
15 プランBでの課題 スパゲッティー化する懸念 service1 service2 service3 service4
16 スパゲッティー化しないために考えたこと • 各クラスター間にプロキシをはさむ • 他のサービスと通信する時は必ずプロキシを通るようにする • 移行のステップを明確にする • 全てのサービスが終わるまで次のステップには進まないようにする
17 Self-service Migration • SREの稼働を減らしたい • できるだけサービスオーナーに移行作業をしてもらう • 移行するためのツールはSREが用意 •
実作業は各チームのタイミングに任せる
18 Træfɪk Traefik is a leading modern reverse proxy and
load balancer that makes deploying microservices easy. Traefik integrates with your existing infrastructure components and configures itself automatically and dynamically. https://containo.us/traefik/
19 Traefikの特徴 ✓ NginxみたいなReverse Proxy ✓ HAProxyみたいなLoad Balancer ✓ Container
Native ✓ 動的な設定のリロード ◦ MFの変更ごとに再起動しなくてもいい ◦ Nginxだと設定変更の度に再起動が必要 詳しくはCloudNative Days 2020 Tokyoの スライドで!! https://speakerdeck.com/kimh/k8stotrae fikdetukurumaikurohurontoendo
20 K8s上ではIngress Controllerとして動作 今回の移行作業ではHost-Based Routingを使用
21 MigrationのIngressを作成 # GRPC traefikMigration: - host: my-service.migration.infra.circleci.com - servicePort:
80 - protocol: h2c # HTTP traefikMigration: - host: my-service.migration.infra.circleci.com - servicePort: 80 これを各サービスのK8Sマニフェストのラッパーツールにいれるだけ
22 HPA (水平 Pod 自動スケーリング)の導入 • 移行作業前に負荷テストを実施 • テストには https://locust.io/
を使用 • 高負荷時にはTraefik PodのCPUがボトルネックになった • HPAで自動でスケーリング 負荷テストで CPUがボトルネックになり Traefikが自動スケールする様子
23 移行作業
24 移行をステップで管理 1. EKSをたてる 2. サービス間通信に使うアドレスをPrivate DNSへ変更 3. 旧K8SとEKSにデプロイするようにする 4.
トラフィックの一部をEKSへ切り替え 5. 全トラフィックをEKSへ切り替え
25 ステップ 1: EKSをたてる ELB service1 ELB service2.migration.infra.circleci.com 旧K8S EKS
service2 service2.default.svc.cluster.local
26 ステップ2: xxx.migration.infra.circleci.comへ切り替え ELB service1 ELB service2.migration.infra.circleci.com 旧K8S EKS service2
❌ 通信経路 service2.migration.infra.circleci.com ↓ ELB ↓ Traefik (Host-based routing) ↓ service2のPods service2.default.svc.cluster.localから service2.migration.infra.circleci.comへ変更
27 ステップ3: 旧K8SとEKSへ同時デプロイ サービスオーナー ELB service1 service2 ELB service2.migration.infra.circleci.com service2
デプロイシステムで 両クラスタへつねにデプロイする 旧K8S EKS
28 ステップ4: Weighted DNSでカナリー ELB service1 service2 ELB service2.migration.infra.circleci.com #
service2.migration.infra.circleci.com # 旧k8sのELBへ weighted_routing_policy { weight = 90 } # service2.migration.infra.circleci.com # EKSのELBへ weighted_routing_policy { weight = 10 } 旧K8S EKS service2 Weighted DNS 10%のトラフィックがEKSの service2へ流れる
29 ステップ5: EKSへトラフィックを切り替え ELB service1 service2 ELB service2.migration.infra.circleci.com 旧K8S EKS
service2 # service2.migration.infra.circleci.com # 旧k8sのELBへ weighted_routing_policy { weight = 0 } # service2.migration.infra.circleci.com # EKSのELBへ weighted_routing_policy { weight = 100 } Weighted DNS 100%のトラフィックがEKSの service2へ流れる
30 振り返り
31 Traefik • Host Based Routingを使うことでELBを節約 • 移行状況をサービスのコード (K8Sのマニュフェスト) で管理できる
• HTTPとgRPCの両方をサポート • HPAで負荷の増減にも対応 • 遅延は発生したが問題になるほどではなかった
32 チーム間コミュニケーション - • 実際にはほとんどのサービスオーナーは移行してくれなかった 😞 • 移行作業の多くはSREが実施 • 努力したつもりだったけどコミュニケーションが足りなかったよう
次は「移行しないとサービス落とす」くらいやる
33 What’s Next?
34 移行後の課題 • EKSの安全なバージョンアップ • Service Meshを使ってマルチクラスターのサポート
Thank you. 35