1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry Pi 4とArch Linux(64bit)で作るKubernetesクラスタ

Posted at

はじめに

Raspberry PiでKubernetesクラスタを構築する記事はたくさんありますが、備忘のため試行錯誤してうまくいった結果をまとめます。アプリケーションをデプロイして動かせるように、FlannelやIngressのインストールまでしました。
64ビット版のLinuxを使っているのがポイントです。

ハードウェア

以下の部品を組み合わせて作成。

Raspberry_Pi_Kubernetes.jpg

1台がマスターノードで2台がワーカーノード。
一番下の段にUSB電源アダプタを入れようとしましたがサイズが合わず入りませんでした・・・

ソフトウェア

Arch Linux

どうせなら64ビット版のOSを使いたいと思いいろいろ調べた結果、以下を参考にしてArch Linux ARMの64ビット版のインストールに成功。
https://raspberrypi.stackexchange.com/questions/111011/aarch64-or-armv8-with-arch-on-a-raspberry-pi-4
ここからファイルをダウンロードして、後は手順通りにSDカードに書き込み。

今見たら公式ページに「AArch64 Installation」の記述があったので、今は公式のファイルを使ってインストールできそうです。

あとはWiFi接続など一通りのOSの設定を実施。

Docker / Kubernetes

全ノードに必要なパッケージをインストール。AURのパッケージもインストールする必要があるので、AURヘルパーであるyayを利用。

$ yay -S docker kubelet-bin kubeadm-bin kubectl-bin ebtables ethtool socat conntrack-tools

マスターノードでkubeadmを実行してKubernetesのクラスタを構築。

# kubeadm init --pod-network-cidr=10.244.0.0/16

kubectlを使えるようにするための設定方法が表示されるので、表示されたコマンドを実行。
また、ワーカーノードをKubernetesクラスタに参加させる方法が表示されるので、表示されたコマンドをワーカーノードで実行。

Flannel

全ノードにcni-pluginsをインストール。

$ yay -S cni-plugins

cni-pluginsのインストール場所が異なるため、Flannelがうまく動くようにシンボリックリンクを作成。

# mkdir /opt/cni
# ln -s /usr/lib/cni /opt/cni/bin

Flannelをインストール。vxlanをhost-gwに変更するとうまくいきました。

$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
$ cat kube-flannel.yml | sed "s/vxlan/host-gw/" > kube-flannel-hostgw.yml
$ kubectl apply -f kube-flannel-hostgw.yml

MetalLB

ServiceのタイプをLoadBalancerにした場合、クラウドでは外部公開用のIPアドレスを自動で割り当ててくれるようですが、オンプレではうまく動きません。そのため、オンプレでも外部公開用のIPアドレスが自動で割り振られるようにMetalLBを手順に従ってインストール。
ここを参考にL2モードの設定をして、LAN内のある範囲のIPアドレスが割り当てられるようにしました。

$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml
$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml
$ kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
$ wget https://raw.githubusercontent.com/metallb/metallb/main/manifests/example-layer2-config.yaml
$ mv example-layer2-config.yaml metallb-config.yaml
$ vim metallb-config.yaml
$ kubectl apply -f metallb-config.yaml

Ingress

リバースプロキシの構成を作れるようにするため、NGINX Ingress Controllerを手順に従ってインストール。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/cloud/deploy.yaml

さいごに

アプリケーションをデプロイして動かせる状態になったので、自宅サーバで動かしているアプリケーションはこのKubernetesクラスタに移すようにしていきたいです。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?