メインコンテンツまでスキップ

Raspberry PiにKubernetes環境を構築する

· 約4分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

何番煎じかわかりませんが、Raspberry PiにKubernetes環境を構築したので、記録を残します。 複数台でクラスターを組むこともなく、1台構成です。

環境

Raspberry Pi 4 (8GBメモリ) Raspberry Pi OS 64bit https://www.raspberrypi.org/forums/viewtopic.php?f=117&t=275370

手順

Swapの無効化

sudo apt-get purge -y --auto-remove dphys-swapfile
sudo rm -fr /var/swap

cgroupの有効化

/boot/cmdline.txtの末尾にcgroup_enable=memory cgroup_memory=1を追加。(改行はせず、1行目の末尾に追加)

/boot/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=8226b72e-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cgroup_enable=memory cgroup_memory=1

設定後、再起動しましょう

Dockerのインストール

https://docs.docker.com/engine/install/debian/

sudo apt remove docker docker-engine docker.io containerd runc
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=arm64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y

kubectlのインストール

https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

Minikubeにkubectlコマンドが内蔵されているようでしたが、別でインストールしたほうが使いやすい気がしましたのでインストールしました。 kubeadmkubeletはminikubeがインストールしているような気がしましたので、インストールしません。

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt update
sudo apt install -y kubectl

Minikubeのインストール

https://kubernetes.io/ja/docs/tasks/tools/install-minikube/

Raspberry PiはARM64アーキテクチャのため、ダウンロードする実行ファイルはminikube-linux-amd64ではなくminikube-linux-arm64です。

sudo apt install conntrack -y

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64
chmod +x minikube
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/

kubernetesクラスタの作成

vm-driverはnoneとします

sudo minikube start --vm-driver=none

aliasと入力補完の設定

minikubekubectlも毎回sudoが必要で、毎回入力するのは面倒なのでaliasを作成します。 また、入力補完のcompletionも設定します。

~/.bashrc
alias minikube='sudo minikube'
source <(minikube completion bash)
alias kubectl='sudo kubectl'
source <(kubectl completion bash)

動作確認

動作確認としてNginxコンテナを起動してみます。

nginx.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-nodeport
spec:
type: NodePort
selector:
app: nginx-app
ports:
- protocol: "TCP"
port: 80
nodePort: 30080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx-app
template:
metadata:
labels:
app: nginx-app
spec:
containers:
- name: nginx-container
image: nginx:latest
kubectl apply -f nginx.yaml

Raspberry Piからはcurl http://localhost:30080で応答がありますし、外部のPCからはhttp://raspberrypi.local:30080/で応答が受け取れました。

感想

  • ARM64対応のイメージが有るものと無いものがあるので注意
  • kubeadmでの構築を試みたのですが、なぜかPOD間通信ができなかったので、Minikubeにしました
  • さてどう活用しようかな