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
0
180
How We Migrated K8S Without Downtime
CloudNative Days 2021登壇資料
Kim, Hirokuni
March 11, 2021
Tweet
Share
More Decks by Kim, Hirokuni
See All by Kim, Hirokuni
エンジニアが起業する意味: 起業経験ゼロから電動キックボード 事業を創る話
kimh
0
1.1k
K8sとTraefikでつくるマイクロフロントエンド
kimh
14
2.7k
CI/CDを使い倒して数段上のソフトウェア開発をしよう (デブサミ関西)
kimh
2
930
デブサミ福岡: CI/CDを使い倒して数段上のソフトウェア開発をしよう
kimh
0
500
CircleCI 2.0を支える2つの コンテナクラスターとSRE
kimh
6
6.1k
なぜ今CI/CDがアジャイル組織に必要とされるのか?
kimh
0
340
CircleCI 2.0を支える2つのコンテナクラスター
kimh
2
4.4k
CircleCI 2.0を支えるインフラとSREの役割
kimh
5
2.2k
Orbsを使ってAWSへ簡単デプロイ
kimh
1
1.6k
Other Decks in Technology
See All in Technology
I could be Wrong!! - Learning from Agile Experts
kawaguti
PRO
8
1.6k
rootful・rootless・privilegedコンテナの違い/rootful_rootless_privileged_container_difference
moz_sec_
0
100
20241220_S3 tablesの使い方を検証してみた
handy
4
850
OCI技術資料 : ファイル・ストレージ 概要
ocise
3
12k
エンジニアリングマネージャー視点での、自律的なスケーリングを実現するFASTという選択肢 / RSGT2025
yoshikiiida
4
1.9k
信頼されるためにやったこと、 やらなかったこと。/What we did to be trusted, What we did not do.
bitkey
PRO
0
980
AIエージェントに脈アリかどうかを分析させてみた
sonoda_mj
2
130
ネットワーク可視化の世界
likr
7
5.6k
MasterMemory v3 最速確認会
yucchiy
0
290
ガバナンスを支える新サービス / New Services to Support Governance
sejima1105
1
910
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
1
4.9k
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.6k
Featured
See All Featured
How to Ace a Technical Interview
jacobian
276
23k
Bash Introduction
62gerente
609
210k
Designing for humans not robots
tammielis
250
25k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
1
150
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
480
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
4 Signs Your Business is Dying
shpigford
182
21k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
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