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
第100回 雲勉【オンライン:中級者向け】EKSのアップデートを安全に行う
Search
l_tanno
March 24, 2023
Technology
91
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
120
第94回 雲勉【オンライン:初心者向け】第2回24/365運用業務を支えるMSP〜クラウド運用業務に必要なもの〜
l_tanno
0
66
第91回 雲勉【オンライン:初心者向け】サーバレスでブログサイト開設〜Amplify Studio〜
l_tanno
1
120
第89回 雲勉【オンライン:初心者向け】実践!SLI/SLO with New Relic!
l_tanno
0
170
第88回 雲勉【オンライン:中級者向け】DeepSecurity(C1WS)機能紹介 _現場から出た_にもこたえてみた
l_tanno
0
540
第87回 雲勉【オンライン:初心者向け】AWSの構築・運用でインフラエンジニアが意図せずハマった事象と対策をご紹介
l_tanno
0
110
第85回 雲勉【オンライン:初心者向け】EKSを触ってみよう 〜Kubernetes知らない人大集合〜
l_tanno
0
150
Other Decks in Technology
See All in Technology
個人の発見を、組織の知恵に 〜生成AI活用を"探索"から"組織の仕組み"へ〜
kintotechdev
2
1k
OCI Oracle AI Database Services新機能アップデート(2026/03-2026/05)
oracle4engineer
PRO
0
250
BigQuery の Cross-cloud Lakehouse への歩み
phaya72
2
590
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
220
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
200
AI フレンドリーなエラー監視を TypeScript で実現する
shinyaigeek
2
270
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
1
170
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
asumikam
0
520
Terraformモジュールは、なぜ「魔境」化するのか
hayama17
1
210
Cloud Run のアップデート 触ってみる&紹介
gre212
0
320
AI駆動開発が変える、大規模開発の前提 ーHuman in the Loop から Human on the Loop へ / AIE2026
visional_engineering_and_design
24
13k
LLMを「主役」にしないための 3つの原則
techtekt
PRO
0
120
Featured
See All Featured
From π to Pie charts
rasagy
0
200
The Spectacular Lies of Maps
axbom
PRO
1
790
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
310
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
ラッコキーワード サービス紹介資料
rakko
1
3.6M
Git: the NoSQL Database
bkeepers
PRO
432
67k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
380
30 Presentation Tips
portentint
PRO
1
320
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
140
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Code Reviewing Like a Champion
maltzj
528
40k
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