Raspberry PiでおうちKubernetes構築【物理編】

### 目的・背景

一家に一台Kubernetesが当たり前の現代

<img width="530" alt="スクリーンショット 2018-12-31 5.52.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/553aab51-44f9-debd-1fd9-8ab1083e4498.png">

仕事でKubernetesクラスタを構築はしているものの、
自宅には開発用のMacと調べ物用のWindowsPCしかなく、
Kubernetesを動かす時はDocker for Mac備え付けのKubernetes(ノードはMac1台!)を
動かす日々です。

今月も重めのStatefulSetを3つ動かしたら、CPUが400%に高騰してMacが死にかけました。
やはり複数ノードあってこそのKubernetesだと思うも、クラウドはどのサービスを使おうか・・・
どのクラウドサービスも一長一短が・・・と悩んでいました。

[おうちKubernetesの記事](https://developers.cyberagent.co.jp/blog/archives/14721/)のように憧れていた一家に一台のKubernetesですが、
今回とあるご機会に材料を頂き(一部自分でも調達しました)、構築したレシピの備忘として記事を書きました。

記事は「物理編」「論理編」に分けています。
この記事は「物理編」です。

構築にあたっては下記を大いに参考にさせて頂きました。
[3日間クッキング【Kubernetes のラズペリーパイ包み　“サイバーエージェント風”】](https://developers.cyberagent.co.jp/blog/archives/14721/)
[Raspberry PI と kubeadm で自宅 Kubernetes クラスタを構築する](https://qiita.com/hatotaka/items/48a88ecb190e1f5e03c3)
[kubernetesのラズパイ包みが美味しそうだったので、kubeadmを使って作ってみた](https://qiita.com/shirot61/items/2321b70cd9c93f8f5cf0)

[3日間クッキング【Kubernetes のラズペリーパイ包み　“サイバーエージェント風”】](https://developers.cyberagent.co.jp/blog/archives/14721/)では1時間ほどの構築時間とのことでしたが、
物理的にハマった箇所もあり物理構築は3時間ほどかかりました。

### 最終ゴール

- Raspberry Pi 3 Model B+
  - OS: raspbian-stretch-lite(2018-11-13)
- Kubernetes v1.13.1
  - Pod Network: Flannel

・Master × 1
・Worker × 2
のクラスターを構築します 

### 材料類

|   |  |
|:--|:--|
| Raspberry Pi 3 Model B  | 3個 | 
| ヒートシンク  | 3セット |
| microSDカード 16GB  | 3枚 |
| 4段積層式 Raspberry Pi3 ケース  | 1個 |
| 5ポート 50W USB 充電器 | 1個 |
| 2.4A microUSB ケーブル  | 4本 |
| コンパクト無線親機 (WMR-433W-BK)  | 1個 |
| microUSB 給電 スイッチングハブ (LAN-SW05PSBE) | 1個 |
| 0.3m LAN ケーブル  | 5本 |

材料以外の道具

|   |  |
|:--|:--|
| ピンセット  | 1個 |
| ドライバー  | 1個 |
| 両面テープ  | 1個 |
| Mac用SDカードリーダー  | 1個 |
| アルミシート  | 1個 |

を利用しました。

# Raspberry Piを開封する

Raspberry Piを袋から開封します。
写真はRaspberry Piとヒートシンク大小のパーツです。

<img width="948" alt="スクリーンショット 2018-12-31 4.42.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/c95d01de-fda4-975b-a575-dc6b6e1679dc.png">

[参考記事](https://developers.cyberagent.co.jp/blog/archives/14721/)だとアルミのようなシートに包まれています。
写真を撮った後で気づきましたが、Raspberry Piは裏側も基盤が剥き出しなので、
保護する必要があります。
慌てて保護用のシートを敷きました。

> 用意がなかったので、今回は有り合わせの「お魚をフライパンで焼く用のシート」を敷きましたが、本質ではないので気にしないでください

Raspberry Pi本体にヒートシンクを貼ります。
ヒートシンクとはなんぞや？ と思って調べたところ、下記の用途の部品でした。

> ヒートシンク（英: heat sink）とは、放熱・吸熱を目的として機械の構造の一部をなす部品である。
> 引用: [Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%88%E3%82%B7%E3%83%B3%E3%82%AF)

ヒートシンクは裏側にテープが貼ってあります。

<img width="228" alt="スクリーンショット 2018-12-31 4.47.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/c00e42f5-d9dc-7837-b5c4-412163ab0d26.png">

これを剥がして、CPUとLANコントローラにそれぞれ大・小のヒートシンクを貼り付けます。
向きは自由です。

<img width="446" alt="スクリーンショット 2018-12-31 4.53.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/27c0a2e9-506f-7a49-34f3-ce7dd9b8a702.png">

よく見るとラズベリーが彫ってあります。芸が細かくてオシャレですね。

<img width="318" alt="スクリーンショット 2018-12-31 4.54.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/8fc78d34-d316-ed48-fc82-cbdbc7555b34.png">

# 4段積層式のケース組み立て

ヒートシンクを組み立てたRaspberry Piを4段積層式のケースに組み立てていきます。

その前に下ごしらえとして、アクリル板の保護シートを外します。
[3日間クッキング【Kubernetes のラズペリーパイ包み　“サイバーエージェント風”】](https://developers.cyberagent.co.jp/blog/archives/14721/)で「一番大変な作業」とあって、その通りだと思いました。
素手で剥がしにいきましたが、私は1時間くらいかかりました。

アクリル板
<img width="526" alt="スクリーンショット 2018-12-31 4.56.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/5aea7346-1c57-41ba-f12d-baddfd1a7efd.png">

保護シートは裏表の両面にあります
<img width="490" alt="スクリーンショット 2018-12-31 4.57.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/82248c74-7179-52c9-0288-6b13c72a0c8a.png">

剥がすとアクリル板が透明な色合いになります
<img width="521" alt="スクリーンショット 2018-12-31 4.57.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/33744d25-2045-67ba-052a-ebe6f2e7ee45.png">

ネジ・スペーサー・ナットを使ってRaspberry Piを固定します。
<img width="316" alt="スクリーンショット 2018-12-31 5.01.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/a2c84c89-f1a7-2a78-5369-07fda2074c0c.png">

ネジ -> スペーサーをアクリル板に取り付けます。
<img width="434" alt="スクリーンショット 2018-12-31 5.02.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/5fb56395-fd0e-c3b7-f83e-41c40776ae37.png">

スペーサー -> Raspberry Piを乗せたら、ナットを閉めます。
<img width="519" alt="スクリーンショット 2018-12-31 5.05.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/3f0e19c2-66c7-a09d-b59a-cbd95de1b4e0.png">

裏側にネジ穴があるので、ドライバーで締めます。
<img width="449" alt="スクリーンショット 2018-12-31 5.07.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/1e2c7057-70d4-6fd8-8654-2dc8e6c9d553.png">

3台ともナットを締めたら、1段目を構築していきます。
<img width="936" alt="スクリーンショット 2018-12-31 5.17.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/9d0fbf83-05f9-ce55-9985-5d0a2d64dd33.png">

<img width="376" alt="スクリーンショット 2018-12-31 5.18.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/46f5d17c-42a8-30bc-e5a1-607dd01e5a26.png">

<img width="514" alt="スクリーンショット 2018-12-31 5.20.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/8fbf821b-989b-26c6-0fb3-08e0976eb0e7.png">

２段目、3段目と構築していきます。
<img width="485" alt="スクリーンショット 2018-12-31 5.21.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/759fb3e3-63a4-e263-49ad-9600f2208e56.png">

<img width="489" alt="スクリーンショット 2018-12-31 5.22.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/1f2191f3-4b2f-c154-50c8-8f3f06c4b5c2.png">

4段目にUSB充電器を配置します。
隙間があり動いてしまうので、固定用の両面テープを貼ります。

<img width="473" alt="スクリーンショット 2018-12-31 5.25.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/ae1d3340-34ed-4bb9-30bb-75ccb1d0803c.png">

4段目までが完成しました。
<img width="494" alt="スクリーンショット 2018-12-31 5.24.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/ef4feb30-c808-ef4b-229d-fb0b3bd3d473.png">

幻の5段目にスイッチングハブとコンパクト無線親機を配置します。

両面テープを貼り付けましたが、最上段のラズベリーマークの跡が穴が空いて、
スカスカのため、多少動いてしまいました。
<img width="524" alt="スクリーンショット 2018-12-31 5.25.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/f3f790a0-dbb4-520c-34b9-29cb1418a103.png">

最上段が完成しました。
<img width="489" alt="スクリーンショット 2018-12-31 5.26.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/4eaa7dee-4d59-275e-2def-4461a537450f.png">

# ケーブリング

配線を行います。
まずはスイッチングハブとRaspberry Pi3台それぞれをLANケーブルで接続します。
<img width="520" alt="スクリーンショット 2018-12-31 5.41.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/97c89da4-c413-4064-09d6-76a80e1ad357.png">

続いて、スイッチングハブとコンパクト親無線機もLANケーブルで接続します。
<img width="516" alt="スクリーンショット 2018-12-31 5.44.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/6f6903c9-e1ad-41ac-d927-5ec6c5fabd43.png">

Raspberry PiとUSB充電器、スイッチングハブ・コンパクト親無線機とUSB充電器を繋げます。
<img width="531" alt="スクリーンショット 2018-12-31 5.45.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/a34695f2-8e8d-2993-8b7b-1b1f886bcdf3.png">

> うまくケーブリングができぬ・・・

表面から見た例
<img width="530" alt="スクリーンショット 2018-12-31 5.52.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/553aab51-44f9-debd-1fd9-8ab1083e4498.png">

USB充電器に電源アダプターをつければ電源がつきます。

Raspberry PiはPWRランプが赤くつくはずです。
>ガ○ダムみたいでかっこいいです

<img width="376" alt="スクリーンショット 2018-12-31 5.54.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/aac6303b-f127-c04d-94fc-afd0bcf25bd6.png">

# 無線設定

物理編の最後に、コンパクト無線親機の無線設定を行います。
無線親機のメーカーが用意している設定書に従って、設定をしてください。

> 当たり前ですが、メーカーが用意している説明書なので、一番丁寧です

以上で物理編を終わります。
肝心のKuberntesクラスタ構築は後半の[論理編](https://qiita.com/go_vargo/items/29f6d832ea0a289b4778)をご参照ください。

# 余談

3機中1機だけ左右を間違えてネジを止めてしまっていたことに、タワーを作ったこと後で気づきました。
当然、一度組み立てたものをバラして、正しい位置に直しました・・・

> 都度都度の確認が重要ですね

正しい向き
<img width="449" alt="スクリーンショット 2018-12-31 5.07.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/314463/1e2c7057-70d4-6fd8-8654-2dc8e6c9d553.png">

ガンプラを作らなくなって久しいですが、
子供の頃作っていた当時のような気持ちを思い出し、
作ってワクワク・ドキドキしました。

以上