ラズパイクラスタにKubernetesをインストール(失敗編)
この記事はラズパイでKubernetesクラスタを構築する(物理編)の続きにあたる。
OSの選定を間違ってしまい作業が詰んだので失敗編としてまとめることにした。
正しい手順はラズパイクラスタにKubernetesのインストール(成功編)にまとめる。
OSとDockerのインストール
ラズパイ初心者なのでインストール可能なOSを一通り把握しておきたい。
Raspberry Pi で動く様々なOS一覧まとめ13種類!という2018.11.19の記事を読んでベーシックなRaspbianと普段業務で使っているCentOSで迷ったが、今後実際に使っていくことを考えるとKubernetesとして利用事例が多いCentOSを採用することにした。(そしてこれが失敗編を書くことになった理由である)
OSイメージをダウンロードする。 ラズパイのCPUはarmなので候補の一覧からarm向けを調べCentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xzというラズパイ向けのminimalイメージをダウンロードした。
解凍にはxzコマンドが必要。brewでインストールする。
$ brew install xz
解凍する。
$ xz -d CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz $ ls CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw
続いて、このイメージファイルをddコマンドでMicroSDカードに書き込む。
USB Type-C ハブを使ってMacにMicroSDカードを接続。
認識したディスクをdiskutilで調べると/dev/disk2
で認識されている。
$ diskutil list /dev/disk0 (internal): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme 500.3 GB disk0 1: EFI EFI 314.6 MB disk0s1 2: Apple_CoreStorage Macintosh HD 499.3 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 /dev/disk1 (internal, virtual): #: TYPE NAME SIZE IDENTIFIER 0: Apple_HFS Macintosh HD +499.0 GB disk1 Logical Volume on disk0s2 EF1D93DE-2460-4A71-B9DD-9C2223020689 Unlocked Encrypted /dev/disk2 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *31.5 GB disk2 1: Windows_FAT_32 31.5 GB disk2s1
SDカードをUnMountしてからSDカードへ書き込む。1枚書き込むのにだいたい40分かかる。
$ diskutil unmountDisk /dev/disk2 Unmount of all volumes on disk2 was successful $ sudo dd bs=1m if=./CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw of=/dev/disk2 2712+0 records in 2712+0 records out 2843738112 bytes transferred in 2440.917174 secs (1165029 bytes/sec) # ディスクの取り出し $ diskutil eject /dev/disk2 Disk /dev/disk2 ejected
なお、購入したUSB Type-C ハブは接続中Wifiが使えなくなったので、調べ物をしたくなるたびにケーブルを抜く必要があった。
配線済みのラズパイクラスタにOSを書き込んだSDカードを差し込む。しかしディスプレイに何も表示されない。どうやら電源ケーブルを刺した状態で後からSDカードを差し込んでも認識しないらしい。一度USBを抜いてもう一度刺し直すと認識しだした。
しばらくするとログインプロンプトが出てくる。
初期アカウント: root
初期パスワード: centos
でログインする。
続いて以下を実行。
- 各種パッケージをアップデート:
yum update -y
- 日本語配列を受け付けるように変更:
localectl set-keymap jp106
- 初期パスワードを変更:
passwd
- ホスト名の設定:
hostname XXX
df -h
を実行すると32GBのMicroSDを使っているにもかかわらずCentOSは2.7GB程度しか認識していない。
df
とfdisk -l
で確認すると、/dev/mmcblk0
がMicroSDカード本体で、これが3つのパーティション/dev/mmcblk0p1
,/dev/mmcblk0p2
,/dev/mmcblk0p3
で区切られており、この3つの合計が2.7GBほどだった。
ここで問題になったのは/
がマウントしている/dev/mmcblk0p3
には1.4GBしか割り当てられておらず、そのうち1.2GBがすでに使われてしまっていること。このままではKubernetesをインストールできない。
そんな時、/root/README
に参考になる情報があると書かれているサイトを見つけた。
開いてみると以下の内容であった。
# cat /root/README == CentOS 7 userland == If you want to automatically resize your / partition, just type the following (as root user): rootfs-expand
どうやらパーティションを拡張するためのコマンドが用意されているらしい。
manを実行しても何もでなかったのでrootfs-expand --help
と適当に叩くとオプションが無視されそのまま実行されてしまい慌てたものの、実行が完了すると/
が28GBに拡張された。
つづいて、Dockerをインストールする。
Dockerの公式ドキュメントでCentOS向けのインストールガイド通りに従いdocker-ce用のリポジトリを追加してyumでインストールしようとするとhttps://download.docker.com/linux/centos/7/armhfp/stable/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
が返ってくる。
armhfp向けのパッケージが存在しないようだ。
代わりに、ラズパイ公式サイトの手順に従い以下のコマンドでインストールする。
curl -sSL https://get.docker.com | sh
すると、今度はEither your platform is not easily detectable or is not supported by this installer scrypt.
のエラーになった。
Docker CEのドキュメントを見ると、CentOS向けのDocker CEはARM64 / AARCH64
をサポートしているがARM
(32bit版)をサポートしていないとのこと。
どうやらOS選定の段階で詰んでしまった様子。
OSを32bitでも対応しているDebian系(Rassbianとか)に変えるか、CentOSにこだわるのであればラズパイで動かせる非公式の64bit版のOSイメージをいれるしかない(一応見つけることはできた)。
どうにかならないかと調べたところ、Raspberry Pi 3B系の 64bitモードに対応している OSの一覧まとめ 2018年版というサイトを見つけた。
これによると先ほどのサイトに書かれていなかったUbuntu 18.04も動かせるらしい。これなら32bit版でも64bit版でもdocker-ceをインストールできそうである。MicroSDカードの作り直しから実施して今度こそKubernetesのインストールを成功させる。
MicroSDをフォーマットする
OSを入れ直すためにラズパイから取り出したMicroSDをMacにつないで初期化する。
以下のコマンドで初期化
$ diskutil eraseDisk FAT32 RPI /dev/disk2 Started erase on disk2 Unmounting disk Creating the partition map Waiting for partitions to activate Formatting disk2s2 as MS-DOS (FAT32) with name RPI 512 bytes per physical sector /dev/rdisk2s2: 60996480 sectors in 1906140 FAT32 clusters (16384 bytes/cluster) bps=512 spc=32 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=411648 drv=0x80 bsec=61026304 bspf=14892 rdcl=2 infs=1 bkbs=6 Mounting disk Finished erase on disk2
初期化前と初期化後で比較してみる
# 初期化前 $ diskutil list /dev/disk0 (internal): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme 500.3 GB disk0 1: EFI EFI 314.6 MB disk0s1 2: Apple_CoreStorage Macintosh HD 499.3 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 /dev/disk1 (internal, virtual): #: TYPE NAME SIZE IDENTIFIER 0: Apple_HFS Macintosh HD +499.0 GB disk1 Logical Volume on disk0s2 EF1D93DE-2460-4A71-B9DD-9C2223020689 Unlocked Encrypted /dev/disk2 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *31.5 GB disk2 1: DOS_FAT_32 NO NAME 700.4 MB disk2s1 2: Linux_Swap 511.7 MB disk2s2 3: Linux 30.2 GB disk2s3 #初期化後 $ diskutil list /dev/disk0 (internal): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme 500.3 GB disk0 1: EFI EFI 314.6 MB disk0s1 2: Apple_CoreStorage Macintosh HD 499.3 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 /dev/disk1 (internal, virtual): #: TYPE NAME SIZE IDENTIFIER 0: Apple_HFS Macintosh HD +499.0 GB disk1 Logical Volume on disk0s2 EF1D93DE-2460-4A71-B9DD-9C2223020689 Unlocked Encrypted /dev/disk2 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *31.5 GB disk2 1: EFI EFI 209.7 MB disk2s1 2: Microsoft Basic Data RPI 31.2 GB disk2s2
ネットワークトラブル
無線親機を実家のネットワークに接続しようとしたら、「接続がタイムアウトしました」と出る。
使っている無線親機はBUFFEROのWMR-433W。調べるとファームウェアをアップデートするといいとのこと。参考
最新版のv1.5.2にアップデートしたものの結果は変わらず。
最終的には同じ機種を使っていた記事を見つけることができた。この記事を書いている間は実家に帰省していたこともあり、その場しのぎができればそれでよかった。そのため、この記事に習って実家にいるうちは有線でスイッチングハブとネットを接続することで解決することにした。
参考にしたサイト
- MacでRaspberryPi入門
- 3日間クッキング【Kubernetes のラズペリーパイ包み “サイバーエージェント風”】
- kubernetesのラズパイ包みが美味しそうだったので、kubeadmを使って作ってみた
- Raspberry Pi で動く様々なOS一覧まとめ13種類!
- RaspberryPi3でCentOS7を使う。
- MAC OS上でのオペレーティングシステムイメージのインストール
- Using CentOS 7.2.1511 Minimal on the Raspberry PI 3
- Docker comes to Raspberry Pi
- Raspberry Pi 3B系の 64bitモードに対応している OSの一覧まとめ 2018年版
- MacでSDカードをフォーマット(初期化)する方法【El Capitan 対応版】