ラズパイクラスタに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 ハブを使ってMacMicroSDカードを接続。

認識したディスクを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程度しか認識していない。

dffdisk -lで確認すると、/dev/mmcblk0MicroSDカード本体で、これが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を入れ直すためにラズパイから取り出したMicroSDMacにつないで初期化する。

以下のコマンドで初期化

$ 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にアップデートしたものの結果は変わらず。

最終的には同じ機種を使っていた記事を見つけることができた。この記事を書いている間は実家に帰省していたこともあり、その場しのぎができればそれでよかった。そのため、この記事に習って実家にいるうちは有線でスイッチングハブとネットを接続することで解決することにした。

参考にしたサイト