
はじめに
本記事では、Raspberry Pi 5とSSDを使い、LANケーブルから電源を供給するPoE(Power over Ethernet)環境の構築手順を紹介します。今回は、PoEに対応しSSDを接続可能な特別なHATを利用してセットアップを進めます。
近年、CentOSのサポート終了に伴い、企業や開発者の間で無償かつRHEL(Red Hat Enterprise Linux)互換のAlmaLinuxへの注目が高まっています。この記事では、Raspberry Pi 5にAlmaLinux 9.4をインストールし、MicroShiftという軽量Kubernetes環境を構築する手順を具体的に解説します。
本環境のメリットは以下の通りです。
- LANケーブル一本で電源とネットワーク接続を提供
- Raspberry Pi 5の性能を活かした軽量なコンテナ運用環境
- RHEL互換のOSを無償で利用できるため、企業の開発環境や教育用途としても最適
各手順を詳細に解説しているため、初心者の方でも迷わず環境構築が可能です。
それでは、必要な材料や設定手順について、順番に見ていきましょう。
準備するもの
今回はLANから電源を供給するため、PoE+SSD装着可能なHATを購入しました。以下の構成になっています。
材料 | 価格 | 数量 | 小計 | 備考 |
Raspberry Pi 5 16G | 24,200 | 4 | 96,800 | 公式代理店で購入 |
P33 M.2 NVME M-Key PoE+ ハット | 5,999 | 4 | 23,996 | SSDと電源 |
512GB M.2 SSD P300P512GM2 | 4,379 | 4 | 17,516 | SSD |
TL-SG105MPE | 10,975 | 1 | 10,975 | LAN & 電源 |
LANケーブル カテゴリ6a 50cm | 300 | 1 | 1,200 | PoE対応LANケーブル |
AlmaLinux 9.4
今回は、RHELの代わりに、AlmaLinux 9.4をインストールします。
AlmaLinuxは、Red Hat Enterprise Linux (RHEL) のクローンとして開発された無料のオープンソースLinuxディストリビューションです。CentOSのサポート終了を受けて、CloudLinux社が主導し、2021年にリリースされました。企業や開発者がRHELと互換性のある環境を無償で利用できるのが特徴です。
Raspberry Pi OS
AlmaLinux をSSDへインストールするために、Raspberry Pi OSを用意します。
micorSDにRaspberry Pi OSイメージを書き込みます。
SDカードをRaspberry Piに挿入、OSを起動します。
Raspberry Pi OSが起動したらAlmaLinuxをダウンロードしてから、SSDに書き込みます。
AlmaLinux 9.4のダウンロード
AlmaLinuxの現在の最新は9.5です。サイトからはダウンロードリンクが見つかりません。
古いバージョンのOSについては、
https://repo.almalinux.org/vault
においてあります。上記より、インストールしたいバージョンを選択してインストーラーをダウンロードします。
AlmaLinuxのRaspberry Pi向けのGNOMEデスクトップ環境付きイメージファイルを取得して試したのですが画面が表示できませんでしたので、CUIのAlmaLinux 9.4 のRaspberry Pi向けのイメージファイルで試します。
$ cd /tmp
$ curl -O https://raw.repo.almalinux.org/vault/9.4/raspberrypi/images/AlmaLinux-9-RaspberryPi-latest.aarch64.raw.xz
ZshSSDにAlmaLinuxイメージを書き込み
取得したAlmaLinux 9.4のRaspberry Pi用イメージは、ダウンロード後に解凍し、microSDカードに書き込んでRaspberry Piで起動できます。
- Raspberry Pi ImagerでOS>User custonを選択。
- ダウンロードしたイメージファイルを選択してOK。
- ストレージで書き込み先のmicroSDを選択
- 次へ

いいえ、を選択して書き込みを開始。

「本当に続けますか?」ダイアログで「はい」を選択。
書き込みが始まるので完了まで待ちます。

AlmaLinuxの起動用microSDカードを作成
次に、同じ手順でAlmaLinux-9-RaspberryPi-latest.aarch64.raw.xzのイメージを、今度は別のmicrSDに書き込んでおきます。
AlmaLinux起動
Raspberry Pi OSのメニューよりラズパイ5をシャットダウンします。ラズパイ5に挿入されたmicroSDを抜いて、電源を入れます。
SSDよりAlmaLinuxが起動します。
https://wiki.almalinux.org/documentation/raspberry-pi.html#installation-steps
を参考にしながら、セットアップを行います。
パスワードによるSSHログインを許可します。(user1,user2,user3)
<任意:作業のためSSHログインを許可>
vi /etc/ssh/sshd_config
最下行に2行追加
Match User user1,user2,user3
PasswordAuthentication yes
$ sudo vi /etc/ssh/sshd_config
最下行に以下を追加
Match User
PasswordAuthentication yes
Zsh# 再起動
systemctl restart sshd
Zshログインしたらalmalinuxのパスワード変更しておきます
$ sudo passwd almalinux
Zsh新しいパスワードを入力し、確認のためにもう一度入力します。
変更が完了したら、exit
して再ログインできるか確認してください。
id_rsaで安全にSSHログイン
もしまだ id_rsa
鍵がない場合、ローカルマシンで作成します。
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
Zsh~/.ssh/id_rsa
(秘密鍵)と ~/.ssh/id_rsa.pub
(公開鍵)が作成されます。指紋の後ろに表示されている-C “your-email@example.com”はコメントとなります。この部分が不要な場合は-C “” としてもOKです。
公開鍵 (id_rsa.pub) をリモートホストに配置
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.0.5
Zsh192.168.0.5がラズパイ5のアドレスです。ホスト名またはIPアドレスを指定します。IPアドレスは、ラズパイの起動中に表示されますので控えておきます。
$ ssh-copy-id -i ~/.ssh/id_rsa.pub almalinux@192.168.0.5
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/hiro/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
almalinux@192.168.0.5's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'almalinux@192.168.0.5'"
and check to make sure that only the key(s) you wanted were added.
ZshSSH 設定ファイル (~/.ssh/config
) を編集
ローカルマシンの ~/.ssh/config
に以下を追加します。
Host RPI004
HostName 192.168.0.5
User almalinux
Port 22
IdentityFile ~/.ssh/id_rsa
Zsh
ログインしてみます。
$ ssh RPI004
Zshログインしたら、
vi /etc/ssh/sshd_configから2行を削除し、パスワードログインを無効にしておきます。
$ sudo vi /etc/ssh/sshd_config
最下行の次の2行を消して、パスワードログインを無効に戻す
Match User almalinux
PasswordAuthentication yes
Zshカーネルパラメータを更新
/boot/cmdline.txt の末尾に次の文言を追加
cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
Zsh改行しないで最後に追加します。
再起動します。
以下を実行して memory
とcpusetが有効になっているか確認してください
$ cat /sys/fs/cgroup/cgroup.controllers
cpuset cpu io memory pids
Zsh以下を実行して、memory と cpuset が有効(enabledが1)になっていることを確認します。
$ cat /proc/cgroups | column -t
#subsys_name hierarchy num_cgroups enabled
cpuset 0 66 1
cpu 0 66 1
cpuacct 0 66 1
blkio 0 66 1
memory 0 66 1
devices 0 66 1
freezer 0 66 1
net_cls 0 66 1
perf_event 0 66 1
net_prio 0 66 1
pids 0 66 1
Zsh開発環境用ソフトウェアのインストール
あとでVSCode Remote-SSH経由で作業するので環境を整えます。
$ sudo dnf update -y
$ sudo dnf install -y glibc-langpack-en tar unzip curl xz git
Zshリポジトリの有効化
$ sudo dnf install -y epel-release
$ sudo dnf config-manager --set-enabled crb
Zshcri-oのインストール
$ sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_8/devel:kubic:libcontainers:stable.repo
$ sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:1.24.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:1.24/CentOS_8/devel:kubic:libcontainers:stable:cri-o:1.24.repo
$ sudo dnf install -y cri-o
$ sudo crio --version
WARN[0000] Failed to decode the keys ["secret" "secret.opts"] from "/usr/share/containers/containers.conf".
crio version 1.24.6
Version: 1.24.6
GitCommit: 4bfe15a9feb74ffc95e66a21c04b15fa7bbc2b90
GitTreeState: clean
BuildDate: 2024-11-05T04:32:12Z
GoVersion: go1.18.2
Compiler: gc
Platform: linux/arm64
Linkmode: dynamic
BuildTags: exclude_graphdriver_devicemapper, seccomp
SeccompEnabled: true
AppArmorEnabled: false
ZshMicroShiftのインストール
Red Hat の MicroShift パッケージのリポジトリ(Coprリポジトリ)を有効にする
$ sudo dnf copr enable -y @redhat-et/microshift
ZshMicroshiftインストール
$ sudo dnf install -y microshift
ZshMicroshift インストール確認
$ microshift version
MicroShift Version: 4.8.0-0.microshift-2022-04-20-141053-1-gfa4bc871
Base OKD Version: 4.8.0-0.okd-2021-10-10-030117
ZshMicroShift(軽量 Kubernetes)のサービスを起動し、OS 再起動後も自動起動するように設定します
$ sudo systemctl enable --now microshift
ZshOCコマンドをインストールする
oc は OpenShift CLI(Command Line Interface) のコマンドです。
Kubernetes の kubectl と似ているが、OpenShift 独自の拡張機能も含まれています。
$ curl -O https://mirror.openshift.com/pub/openshift-v4/aarch64/clients/ocp/stable/openshift-client-linux.tar.gz
$ tar xvzf openshift-client-linux.tar.gz
$ sudo mv oc /usr/local/bin/
$ oc version
Client Version: 4.17.16
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Zshocコマンドのconfig設定
$ mkdir -p ~/.kube
$ sudo cat /var/lib/microshift/resources/kubeadmin/kubeconfig > ~/.kube/config
$ sudo chown $USER:$USER ~/.kube/config
$ chmod 600 ~/.kube/config
Zshmicroshiftのステータス確認
$ oc get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kube-flannel-ds-ff4p7 1/1 Running 0 7m6s
openshift-dns dns-default-7rh8x 0/2 ContainerCreating 0 7m7s
openshift-dns node-resolver-rfbj8 1/1 Running 0 7m7s
openshift-ingress router-default-85bcfdd948-72v2s 0/1 Pending 0 7m11s
openshift-service-ca service-ca-7764c85869-g5994 0/1 Pending 0 7m12s
Zsh13分後、、まだ起動していません。
$ oc get nodes
NAME STATUS ROLES AGE VERSION
almalinux.local NotReady <none> 13m v1.21.0
Zsh24分後、ようやく起動しました。初回の起動には結構時間がかかるようです。
$ oc get nodes
NAME STATUS ROLES AGE VERSION
almalinux.local Ready <none> 24m v1.21.0
Zsh