はじめに
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を使って構築していく
CRI
コンテナランタイムはcontainerdを使用する
CNI
ネットワーク部分には無難にCalicoを使用する
OSのインストール
Raspberry Pi Imagerというツールが公式から出ているので、指示に従っていけばOSのインストールは簡単にできる
Raspberry Pi OS – Raspberry Pi
なんなら動画もあるのでこれ見れば一発でわかる
今回は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を無効化するのを忘れないように
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同士が通信できるようになる
Kubernetesクラスタの状態確認
下記などでクラスタの状態を確認する
$ kubectl get nodes $ kubectl cluster-info
さいごに
数年前に流行ったおうちk8sクラスターをいまさらながら作ってみた
最近になってk8sを仕事で使う機会も増えてきたのもあり勉強ついでに作ってみたりしたが、やはり手を動かしながらのほうが覚えられるし理解が進むなと改めて思った
クラスタ作って力尽きたので、今度はPrometheusとGrafanaで定番のダッシュボードでも作ろうかなと思ってる
というわけで、みなさんもたのしいKubernates Lifeを!