$30 off During Our Annual Pro Sale. View Details »
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
3
860
徹底比較!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
【2025改訂版】ITエンジニアとして知っておいてほしい、電子メールという大きな穴
logica0419
2
110
Fundamentals of Memory Management in Go: Learning Through the History
logica0419
0
100
GopherCon Tourのつくりかた
logica0419
2
76
Go言語はstack overflowの夢を見るか?
logica0419
2
750
あなたの言葉に力を与える、演繹的なアプローチ
logica0419
1
250
GC25 Recap+: Advancing Go Garbage Collection with Green Tea
logica0419
3
850
GopherCon Tour 概略
logica0419
2
490
言葉の壁を越えて ~Gophers EXと歩む海外登壇への道~
logica0419
1
68
Maintainer Meetupで「生の声」を聞く ~講演だけじゃないKubeCon
logica0419
1
720
Other Decks in Technology
See All in Technology
子育てで想像してなかった「見えないダメージ」 / Unforeseen "hidden burdens" of raising children.
pauli
2
320
意外と知らない状態遷移テストの世界
nihonbuson
PRO
1
220
Amazon Bedrock Knowledge Bases × メタデータ活用で実現する検証可能な RAG 設計
tomoaki25
6
2.2k
AWS re:Invent 2025~初参加の成果と学び~
kubomasataka
0
180
AIエージェント開発と活用を加速するワークフロー自動生成への挑戦
shibuiwilliam
4
810
アラフォーおじさん、はじめてre:Inventに行く / A 40-Something Guy’s First re:Invent Adventure
kaminashi
0
110
【U/Day Tokyo 2025】Cygames流 最新スマートフォンゲームの技術設計 〜『Shadowverse: Worlds Beyond』におけるアーキテクチャ再設計の挑戦~
cygames
PRO
2
1.4k
2025年 開発生産「可能」性向上報告 サイロ解消からチームが能動性を獲得するまで/ 20251216 Naoki Takahashi
shift_evolve
PRO
2
220
Strands Agents × インタリーブ思考 で変わるAIエージェント設計 / Strands Agents x Interleaved Thinking AI Agents
takanorig
4
1.9k
株式会社ビザスク_AI__Engineering_Summit_Tokyo_2025_登壇資料.pdf
eikohashiba
1
100
松尾研LLM講座2025 応用編Day3「軽量化」 講義資料
aratako
1
1.2k
Identity Management for Agentic AI 解説
fujie
0
440
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
66
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
510
Bash Introduction
62gerente
615
210k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
A Tale of Four Properties
chriscoyier
162
23k
SEO for Brand Visibility & Recognition
aleyda
0
4.1k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
How Software Deployment tools have changed in the past 20 years
geshan
0
30k
WCS-LA-2024
lcolladotor
0
390
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として働く • 外部からの接続は考えていない
まとめ
ありがとう ございました 参考になれば幸いです