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
徹底比較!HA Kubernetes ClusterにおけるControl Plane Loa...
Search
Takuto Nagami
November 07, 2024
Technology
2
740
徹底比較!HA Kubernetes ClusterにおけるControl Plane LoadBalancerの選択肢
2024/11/7 CloudNative Days Winter 2024 プレイベントにて登壇した際の資料です。
Takuto Nagami
November 07, 2024
Tweet
Share
More Decks by Takuto Nagami
See All by Takuto Nagami
GC25 Recap+: Advancing Go Garbage Collection with Green Tea
logica0419
1
430
GopherCon Tour 概略
logica0419
2
190
言葉の壁を越えて ~Gophers EXと歩む海外登壇への道~
logica0419
1
50
Maintainer Meetupで「生の声」を聞く ~講演だけじゃないKubeCon
logica0419
1
490
理想の英語力に一直線!最高効率な英語学習のすゝめ
logica0419
6
420
Gophers EX: What We’ve Been Up To in Feb–May 2025 / 2025年2~5月 Gophers EX活動報告書
logica0419
0
82
Gophers EX プロジェクト説明
logica0419
2
55
HA K8s Clusterのスタンダードが覆る!? Cilium 1.18の🔥激アツ🔥新機能
logica0419
0
290
External SecretsのさくらProvider初期実装を担当しています
logica0419
0
320
Other Decks in Technology
See All in Technology
生成AIとM5Stack / M5 Japan Tour 2025 Autumn 東京
you
PRO
0
230
Why React!?? Next.jsそしてReactを改めてイチから選ぶ
ypresto
10
4.5k
Modern_Data_Stack最新動向クイズ_買収_AI_激動の2025年_.pdf
sagara
0
220
PLaMoの事後学習を支える技術 / PFN LLMセミナー
pfn
PRO
9
3.9k
BirdCLEF+2025 Noir 5位解法紹介
myso
0
200
組織観点からIAM Identity CenterとIAMの設計を考える
nrinetcom
PRO
1
190
綺麗なデータマートをつくろう_データ整備を前向きに考える会 / Let's create clean data mart
brainpadpr
2
260
『OCI で学ぶクラウドネイティブ 実践 × 理論ガイド』 書籍概要
oracle4engineer
PRO
2
120
生成AIを活用したZennの取り組み事例
ryosukeigarashi
0
210
SoccerNet GSRの紹介と技術応用:選手視点映像を提供するサッカー作戦盤ツール
mixi_engineers
PRO
1
190
AI時代だからこそ考える、僕らが本当につくりたいスクラムチーム / A Scrum Team we really want to create in this AI era
takaking22
6
3.7k
Trust as Infrastructure
bcantrill
0
350
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
A better future with KSS
kneath
239
17k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Six Lessons from altMBA
skipperchong
28
4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Side Projects
sachag
455
43k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
9
580
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Raft: Consensus for Rubyists
vanstee
139
7.1k
Transcript
Takuto Nagami X: @logica0419 GitHub: @logica0419 徹底比較! HA Kubernetes Cluster
におけるControl Plane LoadBalancerの選択肢
自己紹介 • Takuto Nagami (logica) • 千葉工業大学 情報科学部 情報ネットワーク学科 3年
• ネットワークコンテンツ研究会 所属 ◦ 数人の自宅サーバーをVPNで繋いでクラウド基盤 作ろうとしてます • 最近はTraefikへのコントリビューション をしたり、さくらのクラウドでDual Stack クラスタに挑戦したりしていました
Highly AvailableなK8sクラスタ • コントロールプレーンが複数台あるクラスタのこと ◦ 公式ドキュメントの中では「Highly Available Topology」と呼ばれている ◦ etcd入りのコントロールプレーンを複数のタイプと
etcdを外部に持つタイプがある • コントロールプレーンが何個か落ちても大丈夫 ◦ 3台以上のコントロールプレーンが必要とされる
HAクラスタを 使ってるよって人? (仕事 / 趣味 問わず)
HAクラスタを 構築した経験が ある人? (マネージドを除く)
このプロポーザルが 落ちた原因が分かりましたね! (と言えるくらいの比率になる予定) 正直マネージドが多いので需要が少ないとは思ってた
HAクラスタの Control Plane ロードバランシング問題
Control Planeが複数ある Plane Plane Plane
どこ接続すればいいか、わからない Plane Plane Plane ???
固定してしまったら Plane Plane Plane
死んだとき Plane Plane Plane
一巻の終わり Plane Plane Plane 💥
死んだときには Plane Plane Plane
別の所に接続できるように欲しい Plane Plane Plane
Worker Nodeからも apiserverに接続が必要なので、 これはクラスタ自体の死活問題 意外とちゃんとやらないとダメな問題なんです
Control Planeのロードバランシング • コントロールプレーンを冗長化した際、apiserverに 常に接続できる状態を維持する ◦ 常に生きているプレーンにアクセスできる ◦ 同一のIPアドレスで常に接続できる •
Kubernetesエコシステムの中にはツールが無い ◦ “Since this is not part of Kubernetes or kubeadm, this must be taken care of separately.” とドキュメントに書いてある
何が必要でしょう?
何が必要でしょう? 1. Virtual IPアドレスの割り当て / 広報 2. VIPにきた通信のロードバランシング
Virtual IPの割り当て / 広報 192.168.0.1 192.168.0.2 192.168.0.4 192.168.0.3
Virtual IPの割り当て / 広報 仮想IP 192.168.0.5 192.168.0.1 192.168.0.2 192.168.0.4 192.168.0.3
192.168.0.1 192.168.0.2 192.168.0.4 192.168.0.3 仮想IP 192.168.0.5 Virtual IPの割り当て / 広報
192.168.0.1 192.168.0.2 192.168.0.4 192.168.0.3 仮想IP 192.168.0.5 Virtual IPの割り当て / 広報
192.168.0.5に 来た通信は ここに届けろ!!!
192.168.0.1 192.168.0.2 192.168.0.4 192.168.0.3 仮想IP 192.168.0.5 Virtual IPの割り当て / 広報
Virtual IPの割り当て / 広報 192.168.0.1 192.168.0.2 192.168.0.4 192.168.0.3 仮想IP 192.168.0.5
仮想IP 192.168.0.5
Virtual IPの割り当て / 広報 192.168.0.1 192.168.0.2 192.168.0.4 192.168.0.3 仮想IP 192.168.0.5
仮想IP 192.168.0.5 192.168.0.5に 来た通信は ここに届けろ!!!
Virtual IPの割り当て / 広報 • コントロールプレーンへの通信の「受け口」を定める ◦ 生きているマシンのどれかに必ず到達する ◦ 「同一のIPアドレスで常に接続できる」を満たす
• 参考: DNSラウンドロビン ◦ これは条件を満たさない ▪ 死活監視ができず、生きている保証ができない ◦ 死活監視をいれた高度なDNSなら満たすが、セルフ ホスト界隈でスタンダードな手法ではない
VIPにきた通信のロードバランシング 仮想IP 適当なLB Plane Plane Plane
• 来た通信を複数台のコントロールプレーンにロードバラ ンシングする ◦ VIPとコントロールプレーンを繋ぐ ◦ 落ちていれば別の所に自動的に振り分ける • 一般的なHTTPリバースプロキシなら条件を満たす ◦
kube-apiserverのAPIはHTTPなので ◦ 設定のしやすさで選ぶのが良さそう VIPにきた通信のロードバランシング
デプロイについて • デプロイの方法 ◦ 受け口は、コントロールプレーンと別でも良い ◦ LB専用のマシンを設けるか、コントロールプレーン と同居させるかという選択 • Static
Pod - 同居の場合使える技術 ◦ Kubeletベースの機能 (K3sとかは対応してない) ◦ Kubernetesと別のライフサイクルを持つコンテナ をKubeletが建てて、保全してくれる
VIP割り当てとLBを組み合わせる LB Plane Plane Plane VIP割り当て 仮想IP LB VIP LB
VIP
VIP割り当ての選択肢
マネージドサービスの場合 例えばEKSなら、EKS public endpoint と ENI
Keepalived • VRRP (Virtual Router Redundancy Protocol)を用いて VIPを割り当ててくれるOSS ◦ 本来はルーターの冗長化などに使うプロトコル
• 「Keepalivedクラスタ」を構築し、そのクラスタ内で Masterのマシンに通信を振り分ける ◦ 全てのLB用マシンが同じL2ネットワーク上にいる必 要があり、そのL2ネットワークに広報 ▪ インターネットへの広報はネットワーク次第
kube-vip • Kubernetes用に設計されたVIPの割り当てOSS ◦ ARPとBGPが選べる ◦ ARPはL2ネットワークのみに広報だが、BGPならば 外部のルータに対して広報できる • Kubernetes本体に強く依存
◦ コントロールプレーン同居型セットアップのみ ◦ Kubernetes APIへの接続が必要 ▪ これが問題となった事件がある
唐突にv1.29で壊れたkube-vip https://github.com/kube-vip/kube-vip/issues/684
v1.29で何が起こったか • admin.confの権限変更と、super-admin.confの追加が 行われた ◦ 無駄に高い権限がついていた所なので良いこと 設定ファイル ユーザグループ 権限 備考
admin.conf kubeadm:cluster- admins cluster- admin system:masters だった super-admin .conf system:masters 組み込み 権限 新設
kube-vipからのapiserver参照 • kube-vipはkube-apiserverに接続する必要がある ◦ 通常Podからアクセスするときは、Podに置かれた 認証情報でアクセスできる ◦ Static Podはセットされない (K8s管理じゃない)
• これまでの接続方法 ◦ kubeadmが生成するadmin.confを使っていた ◦ /etc/kubernetes/admin.conf に置かれる
admin.conf終了のお知らせ E1214 09:30:38.907904 1 leaderelection.go:332] error retrieving resource lock kube-system/plndr-cp-lock:
leases.coordination.k8s.io "plndr-cp-lock" is forbidden: User "kubernetes-admin" cannot get resource "leases" in API group "coordination.k8s.io" in the namespace "kube-system" 権限が…!足りない…!!!!!!
super-admin.confを使えばいいのでは? Plane + kube-vip Plane + kube-vip Plane + kube-vip
admin.conf admin.conf admin.conf super- admin.conf super- admin.conf super- admin.conf
残念ながら… Plane + kube-vip Plane + kube-vip Plane + kube-vip
admin.conf admin.conf admin.conf super- admin.conf initしたやつ joinしたやつ joinしたやつ
これによって kube-vip on kubeadmは 非常に苦しくなった まだ解決の兆しが立っていません
その他 • lelastic ◦ LinodeというAkamaiの子会社クラウドが開発した BGPベースの仮想IP割り当てOSS ◦ Linode内で使う事しか想定されてなさそう • とにかくソリューションが少ない!
◦ 現状これが欲しいユースケースが少なそう ◦ BGPを用いた、Keepalivedの完全代替みたいなOSS が欲しいなぁという思いがあります
ロードバランサーの選択肢
あらゆるHTTPリバースプロキシで良い • HAProxy • Nginx • Caddy • Envoy •
kube-vip ◦ なんとロードバランサー機能も備えている などなど
これらを組み合わせた ユースケース
Kubernetes公式ドキュメント • https://github.com/kubernetes/kubeadm/blob/main /docs/ha-considerations.md#options-for-software- load-balancing で公式のオススメが提示されている ◦ Keepalived + HAProxy
◦ kube-vip • Keepalived + HAProxy が安定していてオススメ ◦ HAProxyの部分は、自分の設定しやすいリバース プロキシに置き換えるのが良いでしょう
kubespray • kubesprayでは、HAクラスタを自動構築できる ◦ Worker Nodeからコントロールプレーンへの接続は ロードバランシングが必要 • localhost +
Nginx を使用 ◦ Worker Node上でlocalhostをlistenするNginxを 用意し、Nginxでロードバランシング ◦ localhostがVirtual IPとして働く • 外部からの接続は考えていない
まとめ
ありがとう ございました 参考になれば幸いです