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
0
23
小江戸らぐ 自宅にkubernetesクラスターを構築した話
2022/9/10
小江戸らぐ 9月のオフな集まり(第242回)
世良泰明
September 10, 2022
Tweet
Share
More Decks by 世良泰明
See All by 世良泰明
ラズパイ奮闘記 その1
y_sera15
0
28
metrics-serverをセキュアなTLSでデプロイしてみた
y_sera15
0
230
EKS勉強会
y_sera15
1
87
自宅k8s構築日記 冬休み編
y_sera15
0
180
自宅k8sクラスター構築日記
y_sera15
0
120
EKSを動かしてみた話
y_sera15
0
69
ちょっと大きめのOSSにコントリビュートしかけた話
y_sera15
0
200
小江戸らぐ kubernetesクラスターを再構築した話
y_sera15
0
170
Other Decks in Technology
See All in Technology
SageMaker学習のツボ / The Key Points of Learning SageMaker
cmhiranofumio
0
210
Deno Deploy で Web Cache API を 使えるようになったので試した知見
toranoana
1
110
CData Virtuality を活かせるキーシナリオと製品デモ
cdataj
0
300
Amazon ECS & AWS Fargate 今昔物語 / past and present stories of Amazon ECS and AWS Fargate
iselegant
15
2.8k
AWS Lambdaで実現するスケーラブルで低コストなWebサービス構築/YAPC::Hakodate2024
fujiwara3
7
3.7k
寒冷地稲作の歴史にみるコミュニティ
miu_crescent
2
120
What a Good Platform Looks Like and How to Get There @ Large Financial Organization, Oct 2024
mfpais
PRO
0
100
Unlearn Modularity
lemiorhan
6
180
軽いノリで"自動化"に取り組んではいけないという話
tetsuyaooooo
1
610
エムスリー全チーム紹介資料 / Introduction of M3 All Teams
m3_engineering
1
330
Microsoft 365 でデータセキュリティを強化しよう
sophiakunii
2
330
LINEヤフー新卒採用 コーディングテスト解説 アルゴリズム問題編
lycorp_recruit_jp
0
13k
Featured
See All Featured
Six Lessons from altMBA
skipperchong
26
3.4k
The Invisible Customer
myddelton
119
13k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.7k
Facilitating Awesome Meetings
lara
49
6k
[RailsConf 2023] Rails as a piece of cake
palkan
49
4.8k
Pencils Down: Stop Designing & Start Developing
hursman
119
11k
Docker and Python
trallard
40
3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
59k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.1k
The Language of Interfaces
destraynor
154
24k
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 ・ サーバーレス ・ワーカー,
マスター障害テスト 構築して放置。。。バージョンアップ対応もしなければ。。。