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
12
小江戸らぐ 自宅にkubernetesクラスターを構築した話
2022/9/10
小江戸らぐ 9月のオフな集まり(第242回)
世良泰明
September 10, 2022
Tweet
Share
More Decks by 世良泰明
See All by 世良泰明
EKS勉強会
y_sera15
1
55
自宅k8s構築日記 冬休み編
y_sera15
0
87
自宅k8sクラスター構築日記
y_sera15
0
40
EKSを動かしてみた話
y_sera15
0
36
ちょっと大きめのOSSにコントリビュートしかけた話
y_sera15
0
71
小江戸らぐ kubernetesクラスターを再構築した話
y_sera15
0
150
Other Decks in Technology
See All in Technology
CI/CDがあたりまえの今の時代にAPIテスティングツールに求められていること / CI/CD Test Night #7
k1low
12
3.1k
Why do you get AWS certificates
hirosys
0
120
バッチ処理のSLOをどう設計するか
rynsuke
7
590
#51 “Empowering Azure Storage with RDMA”
cafenero_777
3
220
イチから学ぶdbt / Learn dbt from scratch
shinyaa31
0
160
関数型DDDの理論と実践:「決定を遅らせる」を先につくり、 ビジネスの機動力と価値をあげる
knih
2
500
20240321_生成AI時代のDevOps
kzkmaeda
2
620
TypeScript Quiz (Encraft #12 Frontend Quiz Night)
uhyo
6
800
Vos logs méritent mieux que la config par défaut
lyrixx
2
420
データ化エンジニアとしての1年を振り返る
sansantech
PRO
3
260
継続的テストモデルを実現するためにスリーアミーゴスを用いた10Xでのシフトレフトの事例
nihonbuson
3
260
KTC_DBRE.pdf
_awache
1
290
Featured
See All Featured
Code Review Best Practice
trishagee
54
15k
Music & Morning Musume
bryan
39
5.5k
[RailsConf 2023] Rails as a piece of cake
palkan
21
3.8k
What's new in Ruby 2.0
geeforr
335
31k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
225
51k
jQuery: Nuts, Bolts and Bling
dougneiner
57
7.1k
Ruby is Unlike a Banana
tanoku
95
10k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
219
21k
Rails Girls Zürich Keynote
gr2m
91
13k
Into the Great Unknown - MozCon
thekraken
10
830
ReactJS: Keep Simple. Everything can be a component!
pedronauck
657
120k
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 ・ サーバーレス ・ワーカー,
マスター障害テスト 構築して放置。。。バージョンアップ対応もしなければ。。。