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
自宅k8sクラスター構築日記
Search
世良泰明
October 03, 2023
Technology
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
自宅k8sクラスター構築日記
2023/2/11
小江戸らぐ 2月のオフな集まり(第247回)
当日作ったスライドなので、一部未完でアドリブで乗り切ってます(が、そのまま公開します)。
世良泰明
October 03, 2023
More Decks by 世良泰明
See All by 世良泰明
ホームラボ紹介
y_sera15
0
280
Serendie Design Systemを使ってWebアプリケーションを開発してみた
y_sera15
0
160
Kubernetesの公式ドキュメントを翻訳してみた
y_sera15
0
79
ラズパイ奮闘記 その1
y_sera15
0
81
metrics-serverをセキュアなTLSでデプロイしてみた
y_sera15
0
710
EKS勉強会
y_sera15
1
190
自宅k8s構築日記 冬休み編
y_sera15
0
320
EKSを動かしてみた話
y_sera15
0
130
ちょっと大きめのOSSにコントリビュートしかけた話
y_sera15
0
320
Other Decks in Technology
See All in Technology
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
220
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
3
1k
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
250
The Knowledge Spine: A Machine-Executable Ontology for Governed Marketing Activation
vananth22
0
120
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
33
29k
おい、エージェントを使って終わらせろ
nwiizo
2
790
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.4k
C#未経験の僕がAIに読めるコードを書かせるまで
maguroalternative
0
140
AI de Idea
kawaguti
PRO
2
130
絵ではじめるKubernetesセキュリティ
aoi1
4
690
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
130
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
460
Crafting Experiences
bethany
1
350
Ethics towards AI in product and experience design
skipperchong
2
380
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
240
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
Balancing Empowerment & Direction
lara
6
1.3k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
230
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Transcript
自宅k8sクラスター構築日記 2023/2/11 小江戸らぐ 1月のオフな集まり(第247回) 世良泰明
自己紹介 名前: 世良 泰明 (せら やすあき) 職業: ひよっこインフラエンジニア (2年目) 名古屋の某SIer所属
AWS上でインフラ構築・運用 趣味: 囲碁, サイクリング, 散歩, etc… twitter: @y_sera15 自宅K8sクラスター
今日の話 お家で育てているk8sクラスター コンテナアプリをIPを持たせて(自宅LAN内で)公開したい そのための試行錯誤の記録 やったこと ・BGP不通の検証 ・新規LAN構築 ・クラスター移行 ・ESXi管理用NWとVM用NWの分離
構成 物理マシン3台の上に仮想マシンを立てた(Ubuntu22.04) ・control plane node 3台 ・worker node 3台 ・ロードバランサー(haproxy+
keepalive) 2台 NUC1 ESXi control plane 1 worker1 haproxy1 NUC2 ESXi control plane 2 worker2 haproxy2 NUC3 ESXi control plane 3 worker3
worker3 やりたいこと control plane 1 haproxy1 control plane 2 worker2
haproxy2 control plane 3 APIへのアクセス デスクトップ 端末 6443/tcp kubectl kube-apiserver Load Balancer kubernetesの クラスターを制御 するノード 6443/tcp コンテナを動かす ノード worker1 kubernetes上で動かすコンテナにアクセスしたい
worker3 やりたいこと kubernetes上で動かすコンテナにアクセスしたい control plane 1 worker1 haproxy1 control plane
2 worker2 haproxy2 control plane 3 APIへのアクセス デスクトップ 端末 6443/tcp kubectl kube-apiserver Load Balancer kubernetesの クラスターを制御 するノード 6443/tcp コンテナを動かす ノード コンテナのアプリ にアクセスできる ようにしたい http:80
当時の構成の前に 前提知識 ・kubernetesのネットワーク ・コンテナへのアクセス方法
kubernetesのネットワーク ・各ノードのネットワーク 192.168.100.0/24 ・コンテナの世界のネットワーク 10.0.0.0/8 worker3 worker1 worker2 192.168.100.0/24 192.168.100.34
192.168.100.66 192.168.100.98 kubernetesは2つの層のネットワークがある 10.0.0.0/8 ノード間でコンテナの世界のネットワークを繋げる機能 ⇒ CNIというプラグインにより提供
コンテナへのアクセス方法 方法としては(ざっくり)3つ 1.ノードのポートと紐づける ⇒ノード依存する, ポート被りを意識しないといけないから嫌 2.外部のロードバランサーを利用する ⇒ 管理対象が増えるのは面倒 3.k8s上でロードバランサーとして機能するアプリを利用する(例:metallb) ⇒
これを使いたい worker worker worker 8080:80 デスクトップ 端末 8080 デスクトップ 端末 Loadbarancer worker worker デスクトップ 端末 Loadbarancer
metallb ベアメタルなkubernetesに構築できる, クラスター外のIPでアクセス可能なロードバランサー https://metallb.universe.tf/ L2プロトコルかBGPを利用. (L2だと負荷分散はできない)
cilium k8s用のネットワークプラグインの1つ https://cilium.io/get-started eBPFという, カーネルに動的にプログラムを埋め込む機能を利用している. metallbと同様の機能も提供. 今回のクラスター構築で採用.
やったこと ・BGP不通の検証 ・新規LAN構築 ・クラスター移行 ・ESXi管理用NWとVM用NWの分離
前回までの進捗 ciliumを用いてクラスター再構築 ↓ ルータのBGPの設定方法分からん ←1月小江戸らぐ 昼の部 ↓ ルータのBGP設定したけどつながらん ←1月小江戸らぐ 夜の部
今回は原因調査からスタート
原因調査 BGPパケットを送信しているpodに入り, tcpdumpをしてみた $ kubectl exec -n kube-system cilium-wmjw8 -it
/bin/bash $ apt update $ apt install tcpdump $ tcpdump -n -v -i any tcp port 179
原因調査 結果
原因調査 結果 要点 ・TCP通信は疎通している ・BGP通信の開始を試みて, 失敗している ・Optional BGPのパラメータエラーと怒られている. ・Optional パラメータとして,
Multiprotocol Extentionというワードあり
原因調査 裏付け調査 自宅ルータ(RTX1220)が 拡張BGPに対応してなかった Multiprotocol BGPとは ・複数のアドレスタイプを指定できるように拡張されたBGPのこと. ・BGP-4ではipv4のユニキャストしか利用できなかったが、 MP-BGPではipv6及びマルチキャストを利用できる. ・RFC4760(現在はRFC7606にupdateされている)
https://www.rfc-editor.org/rfc/rfc4760 (https://www.rfc-editor.org/rfc/rfc7606) 利用していたルーター(YAMAHA RTX1220) http://www.rtpro.yamaha.co.jp/RT/docs/bgp/index.html#rt
Edgeルータ購入 EdgeRouter X ・k8s自宅クラスタ勢がよく使用してるルータ ・業務用ルータ並みの豊富な機能 ・価格は安め(amazonで1.6万円くらい) ・ベースOSはlinux
自宅LAN拡張 FWの設定で躓くも, 無事開通
クラスター移行(失敗) せっかくなので, k8sクラスターを生きたまま移行させようと試みた etcd内の設定が悪さをしたか何かでmasterノードは移行失敗. (etcd, apiServerのpodが上がりきらない) 諦めてゼロから再構築へ. ・master3, worker3をシャットダウン ・ESXiホスト3をEdgeRouter配下へ移動
・master3, worker3の起動 ・再度クラスターへ参加
再構築 ESXiホストを全てEdgeRouter配下へ移動 各ノード, apiServer用ロードバランサのIP変更 kubeadmで1台ずつノード構築 ・kube-proxy無効化 k8sクラスター設定 ・BGP広報するCIDRレンジ登録 ciliumインストール ・BGP設定有効化
edgeRouter側のBGP設定 ・AS番号, neighborのIP設定 疎通確認 ⇒無事疎通!!! 参考(EdgeRouterのBGP設定) https://qiita.com/suzuyui/items/c83554 dd055ef0f4253a
おまけ ESXiの管理用NWとVM用NWの分離
まとめ 自宅k8sクラスタでアプリ公開ができるLBを立てた やったこと ・パケット解析 ・自宅LANを拡張 ・k8sクラスターライブマイグレーション(失敗) ・アプリ用, VM用, ESXi管理用のセグメント分離 やり残したこと
・各セグメントのFW設定 ・現在のBGP設定は
まとめ&現状/今後 まとめ&現状 metallbをBGPを利用して動作させるため, CNIを入れ替えてkubernetesクラスターを ドキュメントが英語なのと、何が分からないか分からないので難しい…