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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
Unlocking the Apps
pimterry
0
250
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
4
1.8k
Platform Engineering as a Product: Criteria for Improvement and Multi-Tenant Design
kumorn5s
0
510
サイバーセキュリティ概論 / Introduction to Cybersecurity
ks91
PRO
0
170
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development
yoshidashingo
1
380
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
0
360
Dynamic Workersについて
yusukebe
2
610
protovalidate-es を導入してみた
bengo4com
0
140
Rancherの紹介&Update情報(RancherJP Online Meetup #09)
yoshiyuki_kono
0
120
noUncheckedIndexedAccess、3時間、1万円。 / noUncheckedIndexedAccess, 3 Hours, 10,000 JPY.
kaonavi
1
310
新アーキテクチャ「TiDB X」解説とDedicated比較 TiDB Cloud Premiumのゲーム運用活用を検証
staffrecruiter
0
120
Agentic Web
dynamis
1
160
Featured
See All Featured
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
260
Being A Developer After 40
akosma
91
590k
Everyday Curiosity
cassininazir
0
220
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
The Curious Case for Waylosing
cassininazir
1
380
A Soul's Torment
seathinner
6
2.9k
The untapped power of vector embeddings
frankvandijk
2
1.7k
Code Review Best Practice
trishagee
74
20k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
480
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