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
160
自宅k8sクラスター構築日記
2023/2/11
小江戸らぐ 2月のオフな集まり(第247回)
当日作ったスライドなので、一部未完でアドリブで乗り切ってます(が、そのまま公開します)。
世良泰明
October 03, 2023
Tweet
Share
More Decks by 世良泰明
See All by 世良泰明
ラズパイ奮闘記 その1
y_sera15
0
39
metrics-serverをセキュアなTLSでデプロイしてみた
y_sera15
0
360
EKS勉強会
y_sera15
1
110
自宅k8s構築日記 冬休み編
y_sera15
0
200
EKSを動かしてみた話
y_sera15
0
88
ちょっと大きめのOSSにコントリビュートしかけた話
y_sera15
0
220
小江戸らぐ kubernetesクラスターを再構築した話
y_sera15
0
180
小江戸らぐ 自宅にkubernetesクラスターを構築した話
y_sera15
0
29
Other Decks in Technology
See All in Technology
地方拠点で エンジニアリングマネージャーってできるの? 〜地方という制約を楽しむオーナーシップとコミュニティ作り〜
1coin
1
230
分解して理解する Aspire
nenonaninu
1
240
CZII - CryoET Object Identification 参加振り返り・解法共有
tattaka
0
380
2025-02-21 ゆるSRE勉強会 Enhancing SRE Using AI
yoshiiryo1
1
370
君も受託系GISエンジニアにならないか
sudataka
2
440
Goで作って学ぶWebSocket
ryuichi1208
2
1.3k
個人開発から公式機能へ: PlaywrightとRailsをつなげた3年の軌跡
yusukeiwaki
11
3k
株式会社EventHub・エンジニア採用資料
eventhub
0
4.3k
現場で役立つAPIデザイン
nagix
33
12k
OpenID Connect for Identity Assurance の概要と翻訳版のご紹介 / 20250219-BizDay17-OIDC4IDA-Intro
oidfj
0
280
明日からできる!技術的負債の返済を加速するための実践ガイド~『ホットペッパービューティー』の事例をもとに~
recruitengineers
PRO
3
410
TAMとre:Capセキュリティ編 〜拡張脅威検出デモを添えて〜
fujiihda
2
250
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
Raft: Consensus for Rubyists
vanstee
137
6.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
240
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
51k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.3k
Designing for Performance
lara
604
68k
Done Done
chrislema
182
16k
Producing Creativity
orderedlist
PRO
344
39k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
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クラスターを ドキュメントが英語なのと、何が分からないか分からないので難しい…