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
小江戸らぐ 自宅にkubernetesクラスターを構築した話
Search
世良泰明
September 10, 2022
Technology
58
0
Share
小江戸らぐ 自宅にkubernetesクラスターを構築した話
2022/9/10
小江戸らぐ 9月のオフな集まり(第242回)
世良泰明
September 10, 2022
More Decks by 世良泰明
See All by 世良泰明
Serendie Design Systemを使ってWebアプリケーションを開発してみた
y_sera15
0
130
Kubernetesの公式ドキュメントを翻訳してみた
y_sera15
0
58
ラズパイ奮闘記 その1
y_sera15
0
73
metrics-serverをセキュアなTLSでデプロイしてみた
y_sera15
0
640
EKS勉強会
y_sera15
1
160
自宅k8s構築日記 冬休み編
y_sera15
0
280
自宅k8sクラスター構築日記
y_sera15
0
240
EKSを動かしてみた話
y_sera15
0
120
ちょっと大きめのOSSにコントリビュートしかけた話
y_sera15
0
290
Other Decks in Technology
See All in Technology
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.5k
ECSのTerraformモジュールにコントリビュートした話
harukasakihara
0
270
Redmine次期バージョン7.0の注目新機能解説 — UI/UX強化と連携強化を中心に
vividtone
1
220
CARTA HOLDINGS エンジニア向け 採用ピッチ資料 / CARTA-GUIDE-for-Engineers
carta_engineering
0
47k
AWS WAFの運用を地道に改善し、自社で運用可能にするプラクティス
andpad
1
640
Cortex(Code) を ML モデルの 精度改善サイクルに組み込む.pdf
oimo23
0
250
続 運用改善、不都合な真実 〜 物理制約のない運用改善はほとんど無価値 / 20260518-ssmjp-kaizen-no-value-without-physical-constraints
opelab
2
300
【禁断】Obsidianの第二の脳に「知の巨人」と呼ばれた師匠の脳をロードしてみた
nagatsu
0
2.2k
AsyncStreamでマルチブロードキャストを実装する
1mash0
1
180
いつの間にかデータエンジニア以外の業務も増えていたけど、意外と経験が役に立ってる
zozotech
PRO
0
750
"スキルファースト"で作る、AIの自走環境
subroh0508
1
650
JTCでRedmine利用者2700人を実現した手法 第二部
nobuonakamura
0
150
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
52k
Claude Code のすすめ
schroneko
67
220k
The Cult of Friendly URLs
andyhume
79
6.9k
Documentation Writing (for coders)
carmenintech
77
5.3k
The browser strikes back
jonoalderson
0
1.1k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.7k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
170
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
330
Deep Space Network (abreviated)
tonyrice
0
150
Ethics towards AI in product and experience design
skipperchong
2
280
Transcript
自宅にkubernetesクラスターを 構築した話 2022/09/10 小江戸らぐ 9月のオフな集まり(第242回) 世良泰明
自己紹介 名前: 世良 泰明 (せら やすあき) 職業: ひよっこインフラエンジニア (2年目) 名古屋の某SIer所属
AWS上でインフラ構築・運用 趣味: 囲碁, サイクリング, 散歩, etc… twitter: @y_sera15
きっかけ 以前、AWS上にkubernetesクラスターを構築(EKS) 放置してると結構お金がかかる。。。 kubernetes環境を育てていきたいので、自宅でトライ ・マルチマスター構成で構築 ・なるべく公式ドキュメントに準拠
構成 物理マシン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
構成2 control plane 1 worker1 haproxy1 control plane 2 worker2
haproxy2 control plane 3 worker3 APIへのアクセス デスクトップ 端末 6443/tcp 6443/tcp kubectl kube- apiserver Load Balancer Worker Nodes CPU: 4core Memory: 16GB Storage: 300GB haproxy + keepalived CPU: 1core Memory: 4GB Storage: 30GB Control Plane nodes CPU: 2core Memory: 8GB Storage: 100GB
やったこと 1. ネットワーク設計 2. OSインストール/設定 3. haproxy構築 4. ノード構築 5.
コンテナネットワーク構築
ネットワーク設計 自宅LANのCIDR: 192.168.100.0/24 ・.0/27 : 固定マシン ・.32/27: NUC1 ・.64/27: NUC2
・.96/27: NUC3 ・.128/27: pool ・.160/27: DHCP ・.192/26: WiFi 各ノードのIP haproxy1 : 192.168.100.33 haproxy2 : 192.168.100.65 master1 : 192.168.100.34 master2 : 192.168.100.66 master3 : 192.168.100.98 worker1 : 192.168.100.35 worker2 : 192.168.100.67 worker3 : 192.168.100.99 NUC1 ESXi control plane 1 worker1 haproxy1 NUC2 ESXi control plane 2 worker2 haproxy2 NUC3 ESXi control plane 3 worker3 192.168.100.64/27 192.168.100.32/27 192.168.100.96/27 192.168.100.33 192.168.100.34 192.168.100.35 192.168.100.65 192.168.100.66 192.168.100.67 192.168.100.98 192.168.100.99
OSインストール/設定 OSインストール ubuntu22.04 server OS設定 ・タイムゾーン設定 ・NTP設定 ・hostname変更
haproxy構築 Control Plane nodeへのアクセスをLoadBalancer経由で行うために構築. haproxy + keepalivedで冗長化. haproxy: TLS終端が可能なロードバランサ keepalived:
ヘルスチェックによって管理された仮想IPを提供 ポート開放 sudo ufw allow 22/tcp # ssh sudo ufw allow 6443/tcp # kube-apiserver sudo ufw enable sudo ufw reload 参考 https://github.com/kubernetes/kubeadm/blob/main/docs/ha- considerations.md#options-for-software-load-balancing
ノード構築 Worker/ Control Plane nodes共通設定 ・swap無効化(kubeletがswapに対応していないため) ・カーネルパラメータ設定 ・iptablesがnftablesバックエンドを使用しないよう設定(kubeadmが未対応) ・CRI-Oインストール ・Firewall設定
・kubectl, kubeadm, kubeletインストール 1台目のmasterでkubeadm実行し、クラスター作成 2台目以降のmasterをkubeadmで追加 kubeadm join 192.168.100.4:6443 workerノードをkubeadmで追加
ノード構築 ポート開放 # master設定 sudo ufw allow 6443/tcp sudo ufw
allow 2379:2380/tcp sudo ufw allow 10250/tcp sudo ufw allow 10251/tcp sudo ufw allow 10252/tcp sudo ufw reload # worker設定 sudo ufw allow 10250/tcp sudo ufw allow 30000:32767/tcp sudo ufw reload
CNI選定 CNI(Container Network Interface)とは ・kubernetesで異なるNode上のPod間ネットワークを構築するソフトウェア Flannel, Calico等、さまざまなCNIが存在する 流行り廃り、ネットワーク構成で選ぶ 今回はCalicoを選択(理由は忘れてしまった…) https://www.tigera.io/project-calico/
図の引用 https://www.netstars.co.jp/ kubestarblog/k8s-3/
CNI(Calico)導入 curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O kubectl apply -f calico.yaml https://projectcalico.docs.tigera.io/getting-started/kubernetes/requirements 各ノードに対してBGP通信を許可する必要あり(179/TCP)
sudo ufw allow 179/tcp sudo ufw reload
結果
まとめ 自宅でkubernetesクラスターを構築した ・公式ドキュメントになるべく準拠して構築 ・マルチマスターで、手前にロードバランサーを設置する構成にした ・ネットワーク構成, マシンスペックの設計を今回初めて行った 構築しただけで何も手を付けてない。。。
今後やりたいこと ・サービスメッシュ(istio) ・分散ストレージ(rook) ・gitlab ・cicdパイプライン ・next cloud ・ サーバーレス ・ワーカー,
マスター障害テスト 構築して放置。。。バージョンアップ対応もしなければ。。。