unless’s blog

日々のちょっとした技術的なことの羅列

今更ながらおうちKubernatesクラスター作ってみた

はじめに

k8sもいろいろなシステムで採用されるようになった昨今、仕事でk8sを触ることも増えてきた
概要などは把握しているが仕事で触ることも増えてきたので、k8sの勉強を本格的にしようかと思ったりした
資格を取るのもありだが、自分で触ってみるのが一番速いという経験のもと、ひと昔前に流行ったおうちKubernatesクラスターを作ってみることにした

おうちKubernatesクラスターを作ろう(物理編)

今回はせっかくなのでRaspberry Piを使って物理てきに構築した VM上で構築しなかった理由は、物理端末があったほうがテンションがあがるじゃん?

パーツたち

Kubernatesクラスターを作るのに用意した素材は下記

商品 個数 値段 備考
Raspberry Pi4 ModelB 4GB 2 9,660 Amazonプライムデーで買った
Raspberry Pi4クラスターケース 1 1,990 冷却ファンとかついてるし安いしかっこいいよね
TP-Link TL-SG105E スイッチ 1 2,350 プライムデーで安かったので
BUFFALO microSDXC 64GB 2 700 とりま64GBあれば足りるかなって思って
Micro HDMI to HDMI 変換ケーブル 1 890 これが必要なのがだるいとこ
LANケーブル 4 priceless 家とかに余ってるよね。短いの3本、長いの1本で足りた

最初は3台構成にしようかなって思ったけどラズパイ本体が高くて2台で妥協した

パーツたち

Kubernatesクラスターの構築(物理)

物理構築はそんなに難しいものではない クラスターケースに書いてる組み立て方をみて、あとは雰囲気で作っていけばそれらしいものが1,2時間ほどで完成する
ガンプラのHGのほうが難しいので小学生でも作れるはず

Raspberry Pi4は熱を発しやすいので発熱対策はしたほうがよさそう

一段目

二段目

そんなこんなで完成
やっぱり物理端末があるほうがかっこいいし所有欲を満たしてくれるからいいよね

完成

おうちKubernatesクラスターを作ろう(論理編)

kubeadm

勉強のためだし1から構築するのもアリだが、サクッと作って動かした方が楽しいかなって思ったので今回はkubeadmを使って構築していく

github.com

CRI

コンテナランタイムはcontainerdを使用する

CNI

ネットワーク部分には無難にCalicoを使用する

github.com

OSのインストール

Raspberry Pi Imagerというツールが公式から出ているので、指示に従っていけばOSのインストールは簡単にできる

Raspberry Pi OS – Raspberry Pi

なんなら動画もあるのでこれ見れば一発でわかる

youtu.be

今回はUbuntu 23.04(64-bit) を使った
理由は使い慣れてるから

hostnameの設定

今回は2台なのでどちらでも設定する

hostnamectl set-hostname k8s1
hostnamectl set-hostname k8s2

IPの固定

/etc/hosts に払い出されたIPを設定

10.0.0.11  k8s1
10.0.0.12  k8s2

kubeadm, kubelet and kubectlのインストール

公式の手順に準ずる
ドキュメントにも書いてあるけど、swapを無効化するのを忘れないように

kubernetes.io

kubeadmでk8sクラスターの初期化

$ kubeadm init --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=k8s1 --apiserver-cert-extra-sans=k8s1

基本的にkubeadm initを打てばその後に実行すべきコマンドの指示があるのでそれに従えばよい

kubectlコマンドが使用する認証情報をコピーする

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

Worker NodeのJoin

Worker Nodeでクラスタへのjoinコマンドを実行
kubeadm initで表示されるトークンを使ってjoinする

$ kubeadm join k8s1:6443 --token xxxxxxxx \
    --discovery-token-ca-cert-hash sha256:yyyyyyyyyyyyyy

CNIのインストール

ドキュメントに準ずる   これにより各ノードで実行されるPod同士が通信できるようになる

docs.tigera.io

Kubernetesクラスタの状態確認

下記などでクラスタの状態を確認する

$ kubectl get nodes
$ kubectl cluster-info

さいごに

数年前に流行ったおうちk8sクラスターをいまさらながら作ってみた
最近になってk8sを仕事で使う機会も増えてきたのもあり勉強ついでに作ってみたりしたが、やはり手を動かしながらのほうが覚えられるし理解が進むなと改めて思った
クラスタ作って力尽きたので、今度はPrometheusとGrafanaで定番のダッシュボードでも作ろうかなと思ってる

image

というわけで、みなさんもたのしいKubernates Lifeを!