LoginSignup
2
2

数年ぶりに自宅サーバーを立ててKubernetesを入れてみる

Last updated at Posted at 2023-12-21

PONOS Advent Calendar 2023の21日目の記事です。
昨日は@tequila0725さんの『ChatGptとGASでSlackのメンバー追加をラクにした話』でした。

はじめに

こちらの記事を読んでよっしゃやってみっかと思ってやりました。
普段業務でKubernetesを使ってないので勉強も兼ねてます。
未完!!

未完なのでKubernetesの恩恵を得るところまでいっていません。
インストール大変だった話です。

PCを買う

Beelink Mini S12 Pro
https://www.amazon.co.jp/gp/product/B0BWMWFCSG
CPU: N100
メモリ: 16GB
ストレージ: 500GB
購入時の価格: 22,900円
PXL_20231125_135625655.jpg
軽くて小ちゃい。

書いてるときに見たらなんか高くなってました。

Ubuntuを入れる

Ubuntu Desktop 22.04.3 LTSをインストールしました。
最初は画面でポチポチやって、その後はsshで入って作業します。
アドレス固定したり鍵認証に変えたり等々。
こういう作業も久しぶり。

Ubuntuのisoファイルを焼くメディアが手元になかったので急遽購入しました。

Kubernetesを入れる

ディストリビューションは色々あるのですが
とりあえずkubeadmを入れることにしました。
以下のインストール手順を見たり他のサイトを参考にしました。

以下作業ログ

コンテナランタイムはcontainerdを入れた

sudo apt install containerd

curlがなかったのでインストール

sudo apt install curl

kubeadmと周辺ツールのインストール

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubeadm kubelet kubectl
sudo apt-mark hold kubelet kubeadm kubectl

なんかswap止めないといけないらしいので止める

sudo swapoff -a

これだと再起動で復活するので/etc/fstabでswapっぽいところをコメントアウト
再起動してswapが止まってることを確認

free -h

               total        used        free      shared  buff/cache   available
Mem:            15Gi       1.1Gi        12Gi       282Mi       2.3Gi        13Gi
Swap:             0B          0B          0B

マスターノードを起動!!

sudo kubeadm init --node-name master --pod-network-cidr=10.244.0.0/16

エラーが出る

error execution phase preflight: [preflight] Some fatal errors occurred:
	[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
	[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1

コンテナランタイムのところでForwarding IPv4 and letting iptables see bridged trafficをやってないのが原因らしいのでやる

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# sysctl params required by setup, params persist across reboots
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# Apply sysctl params without reboot
sudo sysctl --system

再度実行...成功:metal:

sudo kubeadm init --node-name master --pod-network-cidr=10.244.0.0/16

...

Your Kubernetescontrol-plane has initialized successfully!

成功するとこれをやれっていうのが出るので言われたとおりにやる

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

起動したノードを確認する

kubectl get nodes

エラーが出る

The connection to the server 192.168.x.x:6443 was refused - did you specify the right host or port?

またもやコンテナランタイムのところで必要な設定をやっていないのが原因らしいのでやる

sudo mkdir /etc/containerd
sudo sh -c "containerd config default > /etc/containerd/config.toml

tomlを編集してSystemdCgroupをtrueに変更

config.toml
SystemdCgroup = true

containerdを再起動してノードもリセットする

sudo systemctl restart containerd.service
sudo kubectl reset

再度init...成功!!!
...NotReady???

sudo kubeadm init --node-name master --pod-network-cidr=10.244.0.0/16
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
kubectl get nodes

NAME     STATUS     ROLES           AGE     VERSION
master   NotReady   control-plane   3m51s   v1.29.0

cni plugin not initializedらしい

kubectl describe node

container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized

flannelを入れる

sudo sysctl net.bridge.bridge-nf-call-iptables=1
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

成功!

kubectl get nodes

NAME     STATUS   ROLES           AGE     VERSION
master   Ready    control-plane   9m38s   v1.29.0

おわりに

ということでマスターノードを起動するところまでやりました。
コンソールポチポチーとかterraformでーとかできるのは凄くありがたいことだな〜。

以上

明日は@ANIZA_15さんの『「Loco」をCloud Runで実行する』です!!!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2