Fedora41を1台つかっておうちKubernetesを準備する


前回の記事はこちら

https://qiita.com/every-month/items/d2bc7f8c0d83590eec50

## やりたいこと

おうちKubernetesを準備したい！

## Kubernetesがうごくまで

### 結論

結論だけ先に書きます。↓これだけです。

```bash:今回実行するコマンド全部
sudo dnf -y update
sudo dnf -y install kubernetes iproute-tc cri-o
sudo systemctl enable --now kubelet crio

sudo dnf -y remove zram-generator-defaults
sudo swapoff -a
sudo zramctl /dev/zram0 --reset

sudo modprobe br_netfilter
echo br_netfilter |sudo tee -a /etc/modules-load.d/br_netfilter.conf
printf '\nnet.bridge.bridge-nf-call-iptables=1\nnet.ipv4.ip_forward=1\n' |sudo tee -a /etc/sysctl.conf
sudo sysctl --system

sudo kubeadm init --v=5 --pod-network-cidr=10.244.0.0/16

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

kubectl taint node --all node-role.kubernetes.io/control-plane-
kubectl get cm -n kube-system coredns -o yaml |sed '/ loop/d' |kubectl apply -f -
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
```


### 説明

まず使うパッケージをインストールします。

```bash
sudo dnf -y update
sudo dnf -y install kubernetes iproute-tc cri-o
```

swap無効にします。

```bash
sudo dnf remove zram-generator-defaults
sudo swapoff -a
sudo zramctl /dev/zram0 --reset
```

ネットの設定を変えます。

```bash
sudo modprobe br_netfilter
echo br_netfilter |sudo tee /etc/modules-load.d/br_netfilter.conf
printf '\nnet.bridge.bridge-nf-call-iptables=1\nnet.ipv4.ip_forward=1\n' |sudo tee -a /etc/sysctl.conf
sudo sysctl --system
```

コンテナのサービスを有効にします。

```bash
sudo systemctl enable --now crio
```

kubeadmを初期化します。

```bash
sudo kubeadm init --v=5 --pod-network-cidr=10.244.0.0/16
```

しばらく放置すると↓こうなります。（こうなることを目指します）

```
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
```

おとなしく言われたとおりにします。

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

Control planeにもスケジュールできるようにします。

```bash
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
```

CoreDNSのloopが問題ありのようなので消します。

```bash
kubectl get cm -n kube-system coredns -o yaml |sed '/ loop/d' |kubectl apply -f -
```

定番のflannelをインストールします。

```bash
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
```

## 確認

まずちゃんと動いてるか確認します。

```bash
kubectl get pods --all-namespaces
```

```
NAMESPACE      NAME                             READY   STATUS    RESTARTS   AGE
kube-flannel   kube-flannel-ds-7jgqk            1/1     Running   0          3m24s
kube-system    coredns-76f75df574-2v5g7         1/1     Running   0          3m24s
kube-system    coredns-76f75df574-vh4hf         1/1     Running   0          3m24s
kube-system    etcd-fedora                      1/1     Running   0          3m39s
kube-system    kube-apiserver-fedora            1/1     Running   0          3m38s
kube-system    kube-controller-manager-fedora   1/1     Running   0          3m40s
kube-system    kube-proxy-ztgxj                 1/1     Running   0          3m24s
kube-system    kube-scheduler-fedora            1/1     Running   0          3m35s
```

こんな感じで`STATUS`のところが全部`Running`になればOKです。

再起動して、もう一度上記コマンドでステータスを確認します。

手元の環境では全部`Running`になりました。

やったね✨🎉🥳