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
第100回 雲勉【オンライン:中級者向け】EKSのアップデートを安全に行う
Search
l_tanno
March 24, 2023
Technology
98
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
第100回 雲勉【オンライン:中級者向け】EKSのアップデートを安全に行う
l_tanno
March 24, 2023
More Decks by l_tanno
See All by l_tanno
第97回 雲勉【オンライン:初心者向け】Google Cloudの基礎から学んで、Compute Engineを構築できるようになろう
l_tanno
0
140
第94回 雲勉【オンライン:初心者向け】第2回24/365運用業務を支えるMSP〜クラウド運用業務に必要なもの〜
l_tanno
0
70
第91回 雲勉【オンライン:初心者向け】サーバレスでブログサイト開設〜Amplify Studio〜
l_tanno
1
130
第89回 雲勉【オンライン:初心者向け】実践!SLI/SLO with New Relic!
l_tanno
0
180
第88回 雲勉【オンライン:中級者向け】DeepSecurity(C1WS)機能紹介 _現場から出た_にもこたえてみた
l_tanno
0
610
第87回 雲勉【オンライン:初心者向け】AWSの構築・運用でインフラエンジニアが意図せずハマった事象と対策をご紹介
l_tanno
0
120
第85回 雲勉【オンライン:初心者向け】EKSを触ってみよう 〜Kubernetes知らない人大集合〜
l_tanno
0
160
Other Decks in Technology
See All in Technology
20260930_Gemma4_Hands-on
tsho
0
230
Meet AgentCore Identity Consent Portal
hironobuiga
3
190
オンラインゲームのシステム全体像 - コロプラ 2026年度 新卒研修
colopl
0
860
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
310
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
0
300
AI時代に必要な脅威モデリング― 変化の速度に負けない理解とリスク判断
masakane55
4
1.1k
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
510
全社共通データ基盤をつくる。ソニーのDatabricks活用とデータガバナンス設計の裏側
sony
0
430
並行性の問題を防げ!実践トランザクション入門
occhi
0
280
freeeらしさをAIとともに作る / Creating the freee Experience with AI
ymrl
0
210
SREでアラート疲れを 解決しよう!
kairim0
1
210
2026-10-01_MagicPod_QAハーネスエンジニアリングとQA組織の未来像
ynisqa1988
1
550
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
Design in an AI World
tapps
1
350
Balancing Empowerment & Direction
lara
6
1.3k
Documentation Writing (for coders)
carmenintech
77
5.6k
We Are The Robots
honzajavorek
0
390
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
RailsConf 2023
tenderlove
30
1.6k
Navigating Team Friction
lara
192
16k
Technical Leadership for Architectural Decision Making
baasie
3
590
Why Our Code Smells
bkeepers
PRO
340
58k
Mind Mapping
helmedeiros
1
390
Transcript
EKSクラスターを安全にアップデートする⽅法
0.講師⾃⼰紹介 2 茅根 涼平(Ryohei Chinone) クラウドインテグレーション事業部 構築チーム グループリーダー アイレット歴5年⽬ AWS環境のインフラ設計、構築、運⽤
NewRelicを使⽤した監視設計・設定 TerraformやAnsibleなどのInfrastructure as Code対応
アジェンダ 3 0.⾃⼰紹介 1.前提知識 2.安全なバージョンアップ⽅法 3.検証 4.最後に 5.質疑応答
1. 前提知識 4
5 EKSカレンダー Kubernetesクラスタを運⽤していると、 必ずバージョンアップ作業に直⾯する • 新しいバージョンは、およそ 4か⽉ごとにリリースされます • 各マイナーバージョンは、最初にリリースされてから約 12
か⽉間サポートされます • ⽉と年のみの⽇付はおおよその⽇付であり、確定後に正確な⽇付で更新されます • Kubernetes における規定のマイナーバージョンのサポート終了⽇については、 サポート終了⽇の少なくとも 60 ⽇前に発表されます https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/kubernetes-versions.html#kubernetes-release-calendar 1. 前提知識
1. 前提知識 6 更新⽅法(ローリングアップデート) 1. 変更内容の確認 新しい Kubernetes バージョンでは、⼤幅な変更が加えられている場合があります。 そのため、更新前に
Kubernetes バージョン の前提条件 にリストされている変更を適⽤することが必要です。 (例)変更点 EKS はバージョン 1.24 で Dockershim のサポートを終了 Amazon EKS 1.24 リリースでサポートが最終的に削除される前に、ユーザーは containerd に移⾏する必要があります。 など https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/update-cluster.html https://aws.amazon.com/jp/blogs/news/amazon-eks-now-supports-kubernetes-1-23/
7 IUUQTEPDTBXTBNB[PODPNKB@KQFLTMBUFTUVTFSHVJEFVQEBUFDMVTUFSIUNM 1. バージョンの確認 コントロールプレーンを新しい Kubernetes バージョンに更新する前に、クラスター内のノードと Kubernetes マイナーバージョンが、コントロールプレーンのバージョンと同じであることを確認します。 異なる場合どうなるのか
更新⽅法(ローリングアップデート) 1. 前提知識
8 IUUQTEPDTBXTBNB[PODPNKB@KQFLTMBUFTUVTFSHVJEFVQEBUFDMVTUFSIUNM コンソール画⾯やeksctl, Terraformなど、各⾃が管理している⽅法でアップデートを実⾏します。 ※クラスターを更新する前に 対象のクラスターに Kubernetes Cluster Autoscaler をデプロイしている場合は、更新後のKubernetes
のメジャーバージョンと マイナーバージョンに⼀致するように、 事前にKubernetes Cluster Autoscaler を最新バージョンに更新します。 2.クラスターを更新 更新⽅法(ローリングアップデート) 3.ノードを更新 マネージド型ノードグループ セルフマネージド型ノード キャパシティ管理は⾃分で ⾏う(ASGなど利⽤) AWSがユーザーアカウントにASGを作成し、 キャパシティを管理します。 1. 前提知識
9 作業前の状態と同じにするには再構築する必要があります。 この再構築作業には⻑時間を要するため、万が⼀を想定してシステム稼働・運⽤に影響を与えずに作業完了できるように仕組みを考えます。 問題点 AWSの仕様上、クラスターを前のバージョンに戻すことはできない ステータス上は問題ないけどサービス影響が出た ↓ 対策前進に時間がかかりそう ↓ 作業前の状態と同じにする
• EKSクラスター/ノードの作成 • Helmfike(k8s マニフェスト)の作成 • 動作確認 1. 前提知識
2. 安全なバージョンアップ⽅法 10
11 • ローリングアップデート ソフトウェアの更新、⼊れ替えの⽅法の⼀つで、稼働中のシステムに直接ソフトウェアの更新や⼊れ替えを⾏うこと • Blue/Greenデプロイ 新旧の環境を⽤意して接続先を切り替えて公開する • カナリアリリース ⼀部のユーザに対して徐々に公開していく※Blue/Greenの⼀種
2. 安全なバージョンアップ⽅法 ⽅法 ⼯数 安全性 ローリングアップデート ワンクリックだから簡単 クラスターの切り戻し不可 Blue/Greenデプロイ 準備・切り替え・削除に時間がかかる 切り戻し可能 カナリアリリース 準備・切り替え・削除に時間がかかる 切り戻し可能
12 ⽅法 クラスター ノード ClusterAutoscaler / アドオン Helmfike(k8s マニフェスト)の適⽤ 切替え
ローリング ダウンタイムなしに 更新する仕様 ダウンタイムなしに 更新する仕様 アップデート実⾏ ダウンタイムが発⽣する 可能性があるので対策が必要 - Blue/Green カナリアリリース 新クラスターの構築 新ノードの構築 新しく構築 新しく構築 ALB/TGを更新する 2. 安全なバージョンアップ⽅法
13 2. 安全なバージョンアップ⽅法 Blue/Greenとは 意図した動作になるように変更される 意図しない動作が発⽣したら影響を最⼩限にできる [デプロイの実施] Blue環境のトラフィックをGreen環境に切替える [ロールバックの実施] Green環境のトラフィックをBlue環境に切替える
14 解決策その1 (LBのDNSを切替える) 作業⼿順 1. (切替前) EKSクラスタ/ノード/Podリソース等を構築 2. (当⽇)DNSを現ALBから新ALBに更新するように加重を更新する 3.
(当⽇)問題なければ更新完了/問題があれば加重を戻す Route53の加重ルーティング機能は、同⼀レコード名で登録し、重み (Weight) を 各レコードに設定することでその重みに応じた割合でリクエストを振り分けることができます。 Route53の加重ルーティング 切替え前はアクセス先の加重を0/1(新0%/現100%)、加重を徐々に変更し、切替え完了時に1/0(新100%/現0%)にすることができます。 切替え 2. 安全なバージョンアップ⽅法
15 2. 安全なバージョンアップ⽅法 解決策その1 (LBのDNSを切替える)
16 解決策その2(Weighted Target Groups) 作業⼿順 1. (切替前) EKSクラスタ/ノード/Podリソース等を構築 2. (切替前)
リスナールールに⼀致した場合は、 新環境にトラフィックが流れるようにする 3. (当⽇) ターゲットグループへ流す加重を変更する 4. (当⽇)問題なければ更新完了/問題があれば加重を戻す 2. 安全なバージョンアップ⽅法 加重ターゲットグループ機能は、転送先に複数のターゲットグループを設定し、重み (Weight) を ALBに設定することでその重みに応じた割合でリクエストを振り分けることができます。 Weighted Target Groups 切替え 切替え前はアクセス先の加重を0/1(新0%/現100%)、加重を徐々に変更し、切替え完了時に1/0(新100%/現0%)にすることができます。 また、リスナールールの追加で送信元IPを絞って新環境で動作確認することも可能です。
17 解決策その2(Weighted Target Groups) 2. 安全なバージョンアップ⽅法
18 更新時は並⾏して環境があるため、誤認識防⽌のためNameはEKSバージョンをプレフィックスにする 命名規則 2. 安全なバージョンアップ⽅法
3. 検証 19
20 EKSクラスター、ノード等を作成するのは時間がかかるため事前に⽤意した結果で解説します。 なお、実際に検証する際は「eksctl」などを使⽤すると便利です。 3. 検証 eksctlとはAmazon EKS の公式 CLI EC2
向けの Amazon マネージド Kubernetes サービスである EKS でクラスターを作成 および管理するためのシンプルな CLI ツールです。 ## 使⽤中とするEKSを準備 eksctl create cluster ﹨ --name chinone-kumoben ﹨ --version 1.22 ﹨ --region ap-northeast-1 ﹨ --node-type t3.small ﹨ --nodes 2 ﹨ --nodes-min 2 ﹨ --nodes-max 2 ##新クラスタを準備 eksctl create cluster ﹨ --name chinone-kumoben-124 ﹨ --version 1.24 ﹨ --region ap-northeast-1 ﹨ --node-type t3.small ﹨ --nodes 2 ﹨ --nodes-min 2 ﹨ --nodes-max 2 ﹨ --vpc-public-subnets=subnet-xxx,subnet-xxx,subnet-xxx ﹨ --vpc-private-subnets=subnet-xxx,subnet-xxx,subnet-xxx EKSの起動
21 AWS Load Balancer Controllerのインストール ドキュメントの⼿順に沿って、AWS Load Balancer Controllerをインストールします。 AWS
Load Balancer Controller は、Kubernetes クラスターで実⾏されているアプリケーションに トラフィックをルーティングする Elastic Load Balancing を構成および管理します。 3. 検証
22 アプリケーションをデプロイ 3. 検証 各⾃アプリを⽤意 または サンプルアプリケーションなどを使⽤ https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/sample-deployment.html IUUQTBSDIJWFFLTXPSLTIPQDPNCFHJOOFS@FYQPTJOHTFSWJDF apiVersion:
apps/v1 kind: Deployment … containers: - name: nginx image: public.ecr.aws/nginx/nginx:1.21 … apiVersion: apps/v1 kind: Deployment … containers: - name: app-2048 image: public.ecr.aws/l6m2t8p7/docker-2048:latest … コンテナーイメージ変更するなどして、 アクセス時の動作をわかりやすくします EKS1.22 EKS1.24
23 解決策その1 (LBのDNSを切替える) 3. 検証
24 解決策その1 (LBのDNSを切替える) % dig chinone-kumoben.xxxxx.xxx +short A 54.65.174.92 3.113.176.133
% dig chinone-kumoben.xxxxx.xxx +short A 3.113.176.133 54.65.174.92 % dig chinone-kumoben.xxxxx.xxx +short A 54.65.209.143 52.199.59.200 54.64.206.221 % dig chinone-kumoben.xxxxx.xxx +short A 54.64.206.221 54.65.209.143 52.199.59.200 % dig chinone-kumoben.xxxxx.xxx +short A 3.113.176.133 54.65.174.92 digコマンドでALBのIPアドレスが変わるがわかります 動作確認 3. 検証
25 3. 検証 解決策その1 (LBのDNSを切替える) 動作確認 2つの環境にアクセス可能な状態
26 3. 検証 解決策その2(Weighted Target Groups)
27 3. 検証 解決策その2(Weighted Target Groups) ALB Weighted Target Groups
とリスナールール(送信元IPで振り分け)を組み合わせて切り替えできる
28 動作確認 解決策その2(Weighted Target Groups) 3. 検証 リスナールールを使⽤することで、実際にトラフィックを流してから動作確認することができます。 ※ネイティブアプリでスマホやタブレット等でhosts設定が難しい場合 送信元IPの対象外
送信元IPの対象
29 3. 検証 無停⽌かつ数回の設定更新で移⾏可能
4. 最後に 30
31 4. 最後に 精神的負担が⼤きい サービス影響発⽣によるエンドユーザへの影響 αʔϏεதஅɺError Rate্ঢͳͲ ҰൃͰޭ͢Ε͍͍͚ͲɺΓ͕͠ඞཁʹͳͬͨΒΛߟ͑Δͱԯ߷ʹͳΔ ʮӡ༻ͰͳΜͱ͔͢Δʯɺʮτϥϒϧ͕ى͖͔ͯΒରԠ͢Δʯͱ͔ݴͱɺϲ݄ޙɺʹ௧͍ࢥ͍Λ͠·͢ɻ ͕ൃੜ͢ΔલʹɺͲͷΑ͏ʹEKSΛΞοϓσʔτ͢Δ͔͔ͬ͠Γߟ͑·͠ΐ͏
どのバージョンアップ⽅法があっているか考える
Thank you