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
徹底比較!HA Kubernetes ClusterにおけるControl Plane Loa...
Search
Takuto Nagami
November 07, 2024
Technology
1.2k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
徹底比較!HA Kubernetes ClusterにおけるControl Plane LoadBalancerの選択肢
2024/11/7 CloudNative Days Winter 2024 プレイベントにて登壇した際の資料です。
Takuto Nagami
November 07, 2024
More Decks by Takuto Nagami
See All by Takuto Nagami
GopherCon @シアトル に行ってきました
logica0419
0
790
型落ちシンクライアント端末のPoEモジュールを自作したかった話
logica0419
0
730
The Journey of Connecting Japan to the Global Go Community
logica0419
1
180
Discovering Cilium: What eBPF Enabled in K8s Networking
logica0419
0
220
Do Gophers Dream of Stack Overflow?
logica0419
0
72
今こそ学びたいKubernetesネットワーク ~CNIが繋ぐNWとプラットフォームの「フラッと」な対話
logica0419
10
1.8k
キャリア科目では教えてくれない、就活を生き抜く法則
logica0419
2
370
歴史から学ぶ、Goのメモリ管理基礎
logica0419
18
5.4k
【2025改訂版】ITエンジニアとして知っておいてほしい、電子メールという大きな穴
logica0419
2
540
Other Decks in Technology
See All in Technology
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
200
並列度を下げたら速くなった — go build の重複コンパイルを実測で見る
tomoaki25
2
930
IoTとは〜? 数字で見るSORACOM UG【SORACOM UG Explorer 2026】
soracom
PRO
0
330
Ebitengine製iOSアプリ公開ボタンを押す会
eiei114
0
110
AIコーディングはじめました
miso
0
160
AIエージェントの監視、思考を見るか行動を見るか / Monitoring AI Agents: Thoughts or Actions
yusukeshimizu
2
170
プロダクションコードにおける encoding/json から encoding/json/v2 へのスムーズな移行
sansantech
PRO
1
170
長い仕事を任せる (Workflows、クラウドセッション、Kiro Web) | 目指せ Kiro マスター 10
inariku
PRO
3
120
Kiro IDE 入門 (画面の各部から、頼み方、任せ方、戻し方まで) | 目指せ Kiro マスター 02
inariku
PRO
3
130
AI時代のエンジニアの情報発信〜個人の発信を組織の力に変える〜
ryo_kawamata
1
7.4k
新卒エンジニア、 介護士になる
ryu1013
1
690
AWSを利用する上で知っておきたい名前解決の話 2026
nagisa53
5
3.2k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
820
Navigating Team Friction
lara
192
16k
Everyday Curiosity
cassininazir
0
390
Six Lessons from altMBA
skipperchong
29
4.6k
Bash Introduction
62gerente
615
220k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
660
RailsConf 2023
tenderlove
30
1.6k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.4k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Context Engineering - Making Every Token Count
addyosmani
9
1.3k
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として働く • 外部からの接続は考えていない
まとめ
ありがとう ございました 参考になれば幸いです