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
自宅k8sクラスター構築日記
Search
世良泰明
October 03, 2023
Technology
0
170
自宅k8sクラスター構築日記
2023/2/11
小江戸らぐ 2月のオフな集まり(第247回)
当日作ったスライドなので、一部未完でアドリブで乗り切ってます(が、そのまま公開します)。
世良泰明
October 03, 2023
Tweet
Share
More Decks by 世良泰明
See All by 世良泰明
ラズパイ奮闘記 その1
y_sera15
0
46
metrics-serverをセキュアなTLSでデプロイしてみた
y_sera15
0
400
EKS勉強会
y_sera15
1
120
自宅k8s構築日記 冬休み編
y_sera15
0
210
EKSを動かしてみた話
y_sera15
0
92
ちょっと大きめのOSSにコントリビュートしかけた話
y_sera15
0
230
小江戸らぐ kubernetesクラスターを再構築した話
y_sera15
0
190
小江戸らぐ 自宅にkubernetesクラスターを構築した話
y_sera15
0
33
Other Decks in Technology
See All in Technology
20250328_RubyKaigiで出会い鯛_____RubyKaigiから始まったはじめてのOSSコントリビュート.pdf
mterada1228
0
390
React Server Componentは 何を解決し何を解決しないのか / What do React Server Components solve, and what do they not solve?
kaminashi
6
1.3k
大規模アジャイル開発のリアル!コミュニケーション×進捗管理×高品質
findy_eventslides
0
680
MCP Documentation Server @AI Coding Meetup #1
yyoshiki41
1
1.1k
バックエンド留学した話/Backend study abroad story
kaonavi
0
120
Symfony in 2025: Scaling to 0
fabpot
2
270
Cline、めっちゃ便利、お金が飛ぶ💸
iwamot
20
19k
チームの性質によって変わる ADR との向き合い方と、生成 AI 時代のこれから / How to deal with ADR depends on the characteristics of the team
mh4gf
4
360
”知のインストール”戦略:テキスト資産をAIの文脈理解に活かす
kworkdev
PRO
8
2.4k
スケールアップ企業のQA組織のバリューを最大限に引き出すための取り組み
tarappo
4
1.1k
AIエージェントの地上戦 〜開発計画と運用実践 / 2025/04/08 Findy W&Bミートアップ #19
smiyawaki0820
17
4.2k
30 代子育て SRE が考える SRE ナレッジマネジメントの現在と将来
kworkdev
PRO
0
170
Featured
See All Featured
Scaling GitHub
holman
459
140k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Typedesign – Prime Four
hannesfritz
41
2.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Writing Fast Ruby
sferik
628
61k
The Language of Interfaces
destraynor
157
24k
Facilitating Awesome Meetings
lara
53
6.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
28
1.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
360
Making Projects Easy
brettharned
116
6.1k
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クラスターを ドキュメントが英語なのと、何が分からないか分からないので難しい…