Raspberry Pi 4(1台)でKubernetes環境を構築 (Raspberry Pi 4 + Ubuntu 19.10 + MicroK8s)

# Raspberry Pi でKubernetes(k8s)環境構築を検索
Raspberry Piを使用してKubernetes(k8s)のインストールする記事を探したところ、
複数のRaspberry Piを使用してKubernetesのクラスタ環境を作る記事をいくつか見ました。
[Raspberry Pi 4 でおうちKubernetesを作ろう（Raspbian Buster Lite対応版）](https://qiita.com/kentarok/items/6e818c2e6cf66c55f19a)
[ラズパイ4で作るディスプレイ付きKubernetesクラスター](https://qiita.com/reireias/items/0d87de18f43f27a8ed9b)
[ラズパイでKubernetesクラスタを構築する](https://qiita.com/sotoiwa/items/e350579d4c81c4a65260)
etc...
##### 一家に一台 Kubernetesクラスター。憧れますよね(●´ω｀●)

# Raspberry Pi 1台で簡単にKubernetes(k8s)

Raspberry Pi 1台でKubernetes環境を作りたかったため、もう少し調べてみました。

すると、

[Ubuntu 19.10がリリース、ラズパイ4やMicroK8sサポートでエッジ領域を強化](https://monoist.atmarkit.co.jp/mn/articles/1910/21/news021.html)

[「Ubuntu 19.10」リリース、エッジでのKubernetes、AI／ML開発環境も強化](https://codezine.jp/article/detail/11786)

という記事を見つけたので、

「Raspberry Pi 4 + Ubuntu 19.10 + MicroK8s」

を試してみることにしました。


# Raspberry Pi 4 Model B を購入
#### [Raspberry Pi 4 Model B 4GB RAM](https://www.amazon.co.jp/gp/product/B081YD3VL5/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)
![Raspberry Pi 4 Model B.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/6d67efde-9ca2-5849-a24f-978b5b610d7d.jpeg)

#### [Raspberry Pi 4モデルB用 ラックケース](https://www.amazon.co.jp/gp/product/B07TJ15YL1/ref=ppx_yo_dt_b_asin_title_o00_s01?ie=UTF8&psc=1)
![Raspberry Pi 4 クラスターケース.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/baf7c70a-e42d-40b7-12ca-4fd1c51b7f6c.jpeg)

複数台でクラスタを組みたくなるかも？と思い、ケースはラズパイが4台付けれるクラスタ用を購入しました。

他にも[microSD 32GB](https://www.amazon.co.jp/gp/product/B07YLT539N/ref=ppx_yo_dt_b_asin_title_o00_s01?ie=UTF8&psc=1)、[USB電源アダプタ](https://www.amazon.co.jp/gp/product/B07KC4W1WL/ref=ppx_yo_dt_b_asin_title_o00_s01?ie=UTF8&psc=1)、[USB Type C ケーブル](https://www.amazon.co.jp/gp/product/B07V8RBTVD/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)、[Micro HDMI変換アダプタ](https://www.amazon.co.jp/gp/product/B00JDRHQ58/ref=ppx_yo_dt_b_asin_title_o00_s01?ie=UTF8&psc=1)なども購入しています。


## Raspberry Pi 4 Model B を組み立て

まずは[公式HP](https://www.raspberrypi.org/documentation/usage/gpio/)からRaspberry Pi 4 Model B のGPIOを確認してファンの取り付け位置を確認します。

![GPIO.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/4a4a0740-b4e7-c0ef-08c1-d4a74fc86f7b.png)

#### 左上から2、3番目の「5v」と「ground」にファンを接続
![Raspberry Pi 4 組み立て1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/71863eea-4d7f-c171-9f8c-9933a8f11b77.jpeg)

#### 組み立て完成！！
![Raspberry Pi 4 組み立て2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/79a5672e-c36b-01cb-93bc-9228e28f3d88.jpeg)





# Raspberry Pi 4のOSに Ubuntu 19.10 をインストール
今回はMicroK8sを試したいので、OSは通常の「Raspbian」ではなく「Ubuntu 19.10」をインストールします。

まずはUbuntuのホームページからRaspberry Pi 4のOSイメージをダウンロード。

[Install Ubuntu Server on a Raspberry Pi 2, 3 or 4](https://ubuntu.com/download/raspberry-pi)


![RaspberryPi_Ubuntu_19.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/b162bb11-c674-d1f0-b938-60cb2b755960.png)


「Raspberry Pi 4」の「Ubuntu 19.10」の「Download 64-bit」を選択

「ubuntu-19.10.1-preinstalled-server-arm64+raspi3.img.xz」
がダウンロードされました。

## OSイメージを MicroSD へ書き込み
[Balena Etcher](https://www.balena.io/etcher/)
使用しているOSのEtcherをダウンロード。

私の場合は作業端末がWindows10なので「Download for Windows (x86|x64)」を選択。※MacやLinux版も選択できます。

「balenaEtcher-Portable-1.5.79.exe」
がダウンロードされました。

EtcherでUbuntuのイメージをSDカードに書き込みます。
![Etcher.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/e6149482-dd3c-a01e-1360-aca19ee76dc3.png)


## Raspberry Pi 4 起動
Raspberry Pi 4にmicroSDカードを差し込み、電源、ディスプレイ、有線LANで接続し起動します。
※ キーボードは接続しませんでした。

#### Ubuntu起動確認
![ubuntu起動確認.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/7bd376b8-9f98-11e6-ea1d-7a10ae53ae33.jpeg)

2、3分ぐらいしたら上記のような画面が出ます。
※ 画面はここでしか確認しなかったのでHDMIは必要なかったかも(´・ω・｀)

ルーター画面などでIPを確認してください。
私の場合はBuffalo ルーターだったので http://192.168.11.1/ で確認

## TeraTeamなどでSSH接続
ubuntu/ubuntu
でログイン

初回接続時はパスワードの変更を求められるのでパスワード変更し再度接続

```
$ sudo apt update
$ sudo apt upgrade
```

などをして最新状態にすればUbuntuの準備は完了です。


# MicroK8sのインストール

[MicroK8s](https://microk8s.io/docs/)の公式HPを参考にインストール


## boot設定を変更
Raspberry Pi 4を使用する場合、cgroupの設定が必要らしいのでbootファイルに書き込み

```
$ sudo vi /boot/firmware/nobtcmd.txt
```
```
cgroup_enable=memory cgroup_memory=1
```
を最後に追加し再起動

```
$ sudo reboot now
```

## MicroK8sをsnapでインストールする
```
$ sudo snap install microk8s --classic --channel=1.17/stable
```

## microk8sグループに参加する
microk8sコマンドに毎回 sudo とつけるのは面倒なのでmicrok8sグループに参加する

```
$ sudo usermod -a -G microk8s $USER
```
※ 設定を反映させるため一度ログアウト

## 状態を確認する
正しく設定できていれば下記のように状態が見れます

```
$ microk8s.status
microk8s is running
addons:
cilium: disabled
dashboard: disabled
dns: disabled
fluentd: disabled
gpu: disabled
helm: disabled
ingress: disabled
istio: disabled
jaeger: disabled
juju: disabled
knative: disabled
kubeflow: disabled
linkerd: disabled
metallb: disabled
metrics-server: disabled
prometheus: disabled
rbac: disabled
registry: disabled
storage: disabled
ubuntu@ubuntu:~$
```
色々アドオンがありますが最初はすべてdisabledになっていますね

※ ここでアドオンではなく

```
$ microk8s.status
microk8s is not running. Use microk8s.inspect for a deeper inspection.
```
と出ている場合はboot設定を行っていない可能性があります。（私は最初これが出ていました）

## エイリアス設定
毎回microk8s.kubectlなど打つのも面倒なのでエイリアスを作成

```
$ sudo snap alias microk8s.kubectl kubectl
```
## kubectl コマンドの確認
ノードを確認する

```
$ kubectl get node
NAME     STATUS   ROLES    AGE   VERSION
ubuntu   Ready    <none>   10m   v1.17.3
```

## Kubernetes環境作成完了
とりあえずここまで出来ればKubernetesの動作環境は完成です。
少し調べたり、記事用に写真などもとりながら進めましたが、2時間ぐらいでここまで作成できたと思います。分かっていたら30分もかからないかもですね。

かなり簡単にKubernetes環境が作成できましたね。
以前CentOSにkubeadmでインストールしたときは、なかなかうまくいかなかったので驚きです。


# microk8s コマンド一覧
```
$ microk8s.
microk8s.add-node     microk8s.enable       microk8s.juju         microk8s.reset
microk8s.cilium       microk8s.helm         microk8s.kubectl      microk8s.start
microk8s.config       microk8s.inspect      microk8s.leave        microk8s.status
microk8s.ctr          microk8s.istioctl     microk8s.linkerd      microk8s.stop
microk8s.disable      microk8s.join         microk8s.remove-node
```
色々ありますね。
Microk8s公式の [Command Reference](https://microk8s.io/docs/commands) でコマンドの内容は確認できます。

# Kubernetesダッシュボードの設定
microk8sには「microk8s.status」コマンドで出てきた、色々なアドオンがついているみたいです。
そのうちのKubernetesダッシュボードを確認してみます。
※ dnsやstorageもあったほうがいいらしいのでついでに追加

```
$ microk8s.enable dashboard dns storage
```

## ポート番号やユーザなどを確認

```
~$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://127.0.0.1:16443
  name: microk8s-cluster
contexts:
- context:
    cluster: microk8s-cluster
    user: admin
  name: microk8s
current-context: microk8s
kind: Config
preferences: {}
users:
- name: admin
  user:
    password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    username: admin
```
のような情報が出るのでRaspberry Pi 4のIP(例えば192.168.11.20)+「server: https://127.0.0.1:16443」のポートで接続してみます。

https://192.168.11.20:16443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

ログイン画面が出たら「username」「password」を入力してログイン
![dashboard_login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/6db3ba29-20fc-a54e-668b-a40627b4dfba.png)

## トークンは下記コマンドで取得

```
$ kubectl -n kube-system describe secret   $(microk8s.kubectl -n kube-system get secret | grep kubernetes-dashboard-token | awk '{print $1}')
 ----------省略-------------
token:      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ca.crt:     1103 bytes
namespace:  11 bytes
```
で出てきたトークンを入力してサインイン
![dashboard_token.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/7b5ff52f-597a-c1d5-e65c-d0397b065c08.png)


## Kubernetesダッシュボードのトップ画面
![dashboard_top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/5f007bbf-7637-ea1b-6ea4-5074b5c262e1.png)
が表示されれば成功です！



# まとめ
これで自宅でも簡単に kubectl コマンドの動作確認などが出来ますね。

Raspberry Pi などのエッジ側でもKubernetesが簡単に起動できるのであれば、5Gももうすぐ始まりますし、いろいろな用途に使えそうですよね(●´ω｀●) 

~~実際に動作確認の記事なども書いていこうと思います！！~~

記事の続きを書きました！！
[Raspberry Pi 4(1台)でKubernetes環境を構築 (Raspberry Pi 4 + Ubuntu 19.10 + MicroK8s) Part2 (Webアプリ編)]
(https://qiita.com/toyotoyo_/items/91c054f2a8c6d88724f0)