ラズパイ5でMicroShift(エッジ向けOpenShift)を構築

はじめに

本記事では、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 16G24,200496,800公式代理店で購入
P33 M.2 NVME M-Key PoE+ ハット5,999423,996SSDと電源
512GB M.2 SSD P300P512GM24,379417,516SSD
TL-SG105MPE10,975110,975LAN & 電源
LANケーブル カテゴリ6a 50cm30011,200PoE対応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向けのイメージファイルで試します。

https://raw.repo.almalinux.org/vault/9.4/raspberrypi/images/AlmaLinux-9-RaspberryPi-latest.aarch64.raw.xz

$ cd /tmp
$ curl -O https://raw.repo.almalinux.org/vault/9.4/raspberrypi/images/AlmaLinux-9-RaspberryPi-latest.aarch64.raw.xz
Zsh

SSDに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
Zsh

192.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.
Zsh

SSH 設定ファイル (~/.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
Zsh

cri-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
Zsh

MicroShiftのインストール

Red Hat の MicroShift パッケージのリポジトリ(Coprリポジトリ)を有効にする

$ sudo dnf copr enable -y @redhat-et/microshift
Zsh

Microshiftインストール

$ sudo dnf install -y microshift
Zsh

Microshift インストール確認

$ 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
Zsh

MicroShift(軽量 Kubernetes)のサービスを起動し、OS 再起動後も自動起動するように設定します

$ sudo systemctl enable --now microshift
Zsh

OCコマンドをインストールする

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
Zsh

ocコマンドのconfig設定

$ mkdir -p ~/.kube
$ sudo cat /var/lib/microshift/resources/kubeadmin/kubeconfig > ~/.kube/config
$ sudo chown $USER:$USER ~/.kube/config
$ chmod 600 ~/.kube/config
Zsh

microshiftのステータス確認

$ 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
Zsh

13分後、、まだ起動していません。

$ oc get nodes
NAME              STATUS     ROLES    AGE   VERSION
almalinux.local   NotReady   <none>   13m   v1.21.0
Zsh

24分後、ようやく起動しました。初回の起動には結構時間がかかるようです。

$ oc get nodes
NAME              STATUS   ROLES    AGE   VERSION
almalinux.local   Ready    <none>   24m   v1.21.0
Zsh

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

上部へスクロール