はじめに
開発者向けですが、Raspberry Piでもエンタープライズ向けOSが利用でき、実験的なエッジ向けOpenShift(MicroShift)が利用できます。
MicroShiftについては以下のサイトをご覧ください。
準備するもの
- Developer Programに参加しているRed Hatアカウント
- Raspberry Pi 4B
RAMは4GB以上 - MicroSDHC
UEFI Firmware用 - USBメモリ
8GB以上なら何でもOK - USBキーボード,マウス,HDMIディスプレイ
- USB接続のSSD
40GB以上あれば安心
UEFI Firmaware起動用microSDの作成
Raspberry Pi 4 UEFI FirmwareのZIPファイルをダウンロードしてPC上に展開し、展開したファイルをmicroSDにコピーします。
RHEL9 ISO用USBメモリの作成
「Red Hat Product Downloads」のページから[Red Hat Enterprise Linux]を選択するとページが切り替わるので、製品のバリアントで"Red Hat Enterprise Linux for ARM64"のバージョン"9.0"を選択します。
※事前にDeveloper Programに参加しているRed Hatアカウントでログインしておく必要があります。
ページ下部から"Red Hat Enterprise Linux 9.0 Binaly DVD"をダウンロードして「Raspberry Pi Imager」などでUSBメモリに書き込みます。
「Raspberry Pi Imager」を利用する場合は、OSの選択で「カスタムイメージを使う」からダウンロードしたISOファイルを選択します。
USBメモリの型番みたいなものを覚えておくと良いです。(上記画面は「Wii USB MEMORY」のものです。)
UEFI Setupの起動
Raspberry Piに、キーボード、マウス、ディスプレイを接続し、前述の手順で作成したmicroSDとUSBメモリも接続しておき、電源ケーブルを接続して電源を入れます。
木苺の絵が出たら[Esc]キーを押します。
右上のRAMの認識が3072MBとなっているので、制限解除します。
RAM3GB制限の解除
メニューから「Device Manager」→「Raspberry Pi Configuration」→「Advanced Configuration」と選んで、「Limit RAM to 3 GB」を"Disabled"にします。
設定後は再起動を促されるので、再起動したら再度木苺画面で[Esc]キーを押して「UEFI Setup」を起動します。
RHEL9インストーラの起動とインストール
USB SSDも接続し、メニューから「Boot Manager」→「UEFI XXXXX」(『RHEL9 ISO用USBメモリの作成』で確認した型番)を選択します。
すると、RHEL9のインストーラが起動するので、マニュアルなどを参照してインストールしてください。
今回は「ソフトウェアの選択」で以下の設定にして、USBのSSDにインストールしています。
- ベース環境:「最小限のインストール」
- 選択した環境用のその他のソフトウェア:「標準」「コンテナー管理」
GUI環境については全く試していません。
RHEL9の起動
USBメモリを外して、RHEL9をインストールしたUSBのSSDから起動します。
起動したらrootでログインして日時を確認してください。
日時を合わせていないと一部のコマンドが動作しませんので、できればNTPで同期させてください。
[root@rhel9 ~]# date -s "2022/7/15 23:30:00"
2022年 7月 15日 金曜日 23:30:00 JST
MicroShiftの構築
以下のサイトを参考に構築します。
RHEL9用のcri-oはまだ提供されていないので、cri-oのCentOS8 Streamリポジトリを登録します。
[root@rhel9 ~]# curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_8_Stream/devel:kubic:libcontainers:stable.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 380 100 380 0 0 309 0 0:00:01 0:00:01 --:--:-- 309
[root@rhel9 ~]# curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:1.21.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:1.21/CentOS_8_Stream/devel:kubic:libcontainers:stable:cri-o:1.21.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 432 100 432 0 0 350 0 0:00:01 0:00:01 --:--:-- 350
100 433 100 433 0 0 294 0 0:00:01 0:00:01 --:--:-- 0
100 434 100 434 0 0 252 0 0:00:01 0:00:01 --:--:-- 252
100 435 100 435 0 0 222 0 0:00:01 0:00:01 --:--:-- 222
100 436 100 436 0 0 197 0 0:00:02 0:00:02 --:--:-- 197
100 402 100 402 0 0 162 0 0:00:02 0:00:02 --:--:-- 0
cri-oとcri-toolsをインストールして、crioサービスを起動します。
[root@rhel9 ~]# dnf install -y cri-o cri-tools
サブスクリプション管理リポジトリーを更新しています。
Stable Releases of Upstream github.com/containers packages (CentOS_8_Stream) 17 kB/s | 66 kB 00:03
devel:kubic:libcontainers:stable:cri-o:1.21 (CentOS_8_Stream) 1.5 kB/s | 3.3 kB 00:02
依存関係が解決しました。
: (略)
インストール済み:
cri-o-1.21.7-5.1.el8.aarch64 cri-tools-1.24.0-.el8.1.2.aarch64 socat-1.7.4.1-5.el9.aarch64
完了しました!
[root@rhel9 ~]# systemctl enable crio --now
Created symlink /etc/systemd/system/multi-user.target.wants/crio.service → /usr/lib/systemd/system/crio.service.
jounalログにSELinuxのメッセージが出力されるので、メッセージ中にあるコマンドを実行します。
[root@rhel9 ~]# ausearch -c 'iptables' --raw | audit2allow -M my-iptables
******************** 重要 ***********************
このポリシーパッケージを有効にするには、以下を実行して下さい:
semodule -i my-iptables.pp
[root@rhel9 ~]# semodule -X 300 -i my-iptables.pp
microshiftサービスをデプロイします。
[root@rhel9 ~]# curl -o /etc/systemd/system/microshift.service https://raw.githubusercontent.com/redhat-et/microshift/main/packaging/systemd/microshift-containerized.service
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1191 100 1191 0 0 2460 0 --:--:-- --:--:-- --:--:-- 2455
[root@rhel9 ~]# firewall-cmd --zone=trusted --add-source=10.42.0.0/16 --permanent
success
[root@rhel9 ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@rhel9 ~]# firewall-cmd --zone=public --add-port=443/tcp --permanent
success
[root@rhel9 ~]# firewall-cmd --zone=public --add-port=5353/udp --permanent
success
[root@rhel9 ~]# firewall-cmd --reload
success
[root@rhel9 ~]# systemctl enable microshift --now
Created symlink /etc/systemd/system/multi-user.target.wants/microshift.service → /etc/systemd/system/microshift.service.
Created symlink /etc/systemd/system/default.target.wants/microshift.service → /etc/systemd/system/microshift.service.
jounalログにSELinuxのメッセージが出力されるので、メッセージ中にあるコマンドを実行します。
[root@rhel9 ~]# ausearch -c 'runc' --raw | audit2allow -M my-runc
******************** 重要 ***********************
このポリシーパッケージを有効にするには、以下を実行して下さい:
semodule -i my-runc.pp
[root@rhel9 ~]# semodule -X 300 -i my-runc.pp
ocとkubectlクライアントコマンドをインストールして、Kubeconfigをコピーします。
[root@rhel9 ~]# curl -O https://mirror.openshift.com/pub/openshift-v4/$(uname -m)/clients/ocp/stable/openshift-client-linux.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 45.3M 100 45.3M 0 0 7809k 0 0:00:05 0:00:05 --:--:-- 10.1M
[root@rhel9 ~]# tar -xf openshift-client-linux.tar.gz -C /usr/local/bin oc kubectl
[root@rhel9 ~]# mkdir ~/.kube
[root@rhel9 ~]# podman cp microshift:/var/lib/microshift/resources/kubeadmin/kubeconfig ~/.kube/config
[root@rhel9 ~]# chown `whoami`: ~/.kube/config
microshiftの起動までしばらく待ってから、Podの状況を確認します。
[root@rhel9 ~]# oc get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kube-flannel-ds-2fkcp 1/1 Running 0 2d
kubevirt-hostpath-provisioner kubevirt-hostpath-provisioner-99vdk 1/1 Running 0 2d
openshift-dns dns-default-5rp5h 2/2 Running 0 2d
openshift-dns node-resolver-7n8fq 1/1 Running 0 2d
openshift-ingress router-default-85bcfdd948-8nxxl 1/1 Running 0 2d
openshift-service-ca service-ca-5f8d7bdd7d-vqrzw 1/1 Running 1 47h
service-caのPodが起動しないようであれば、以下のコマンドを実行します。
[root@rhel9 ~]# oc patch deployments/service-ca -n openshift-service-ca -p '{"spec": {"template": {"spec": {"containers": [{"name": "service-ca-controller","args": ["-v=4"]}]}}}}'
deployment.apps/service-ca patched
トラブルシュートは以下のサイトも参考にさせていただきました。
おわりに
以上でございますが、実際に色々使ったわけではなく構築して満足しただけでございますので、うまく動作しなくても当方は一切責任を負いません。