ubuntu上でMinikubeを動かそうとしたがCPUが足りないエラーとなった件(トラブルシューティングの個人的メモ)

<font color="Red">
2021/02/06 追記
minikubeのバージョン1.17.1が01/28にリリースされたようです。
バージョン1.17.1では以下記事に記載している不具合が発生せず、正しく起動することを確認しました。
</font>
- - -

## はじめに
時代の流れに何とか付いていこうと、Kubernetesの勉強を始めたが躓きそうになって、少し粘ってみたら何とか出来た、というのをメモしておく。
あとは、自分と同じ所でハマった方の参考になれば、と。
(この記事が出るころには既に何らかの対応がされているかもしれないが)

## 勉強してみた
できるエンジニアは動画で勉強している、と聞いたので自分もKubernetesの動画を見てみることにした

その動画は[コチラ](https://www.youtube.com/watch?v=PeRE90mSHQo)。初歩から説明してくれるし、ザ・勉強!のような堅苦しい感じが無いのでオススメです。

動画の後半で実機でのハンズオン（[参考手順](https://www.radishlogic.com/kubernetes/running-minikube-in-aws-ec2-ubuntu/)）もあったので「自分もやってみよう」と手順に沿って進めていたのだが、、、

```
root@ip-XXX-XXX-XXX-XXX:~# minikube start --vm-driver=none
* minikube v1.17.0 on Ubuntu 20.04
* Using the none driver based on user configuration

X Exiting due to RSRC_INSUFFICIENT_CORES: Requested cpu count 1 is less than the minimum allowed of 2

root@ip-XXX-XXX-XXX-XXX:~#
```
minikubeの起動でどうもエラーが出てしまう。

メッセージ的には、cpuが足りないよ？みたいなエラーだけど、
EC2選ぶときにちゃんとt3.micro(vCPUが2つのやつ)を選んだからそんなことはないはず…

違うとは思いつつも、t3.medium(vCPUは同じ2つだが、メモリが2GBから4GBに増えたタイプ)を選んでみても同じ結果に。

Youtubeのコメントには自分と同じエラーで進めない、という人もいないし
エラーメッセージでgoogle検索しても、目ぼしいエラーは出てこない。

もうイヤだーーーと思い、ふて寝しようと思ったが
これで投げ出したらしばらくKubernetesの勉強はしないだろうと思い、もう少し頑張ってみた。

そこで思いついたのが、minikubeダウンロード時のバージョン
`
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
`
ここのコマンドで最新(latest)のminikubeをダウンロードしているが、それがリリースされたのはいつだろうかと思い調べてみたら
どうやら2021/01/22に最新バージョン1.17.0がリリースされている模様。
https://github.com/kubernetes/minikube/releases

この記事を書いているのが2021/01/23、まさに前日にリリースされたバージョンのようだ。
もしかしたらこのバージョンが原因ということはないか？Youtubeのコメントも最新が3週間前だったし…

なので、最新バージョンではなく1世代前の1.16.0(2020/12/14リリース)でリトライすることにしてみた。
`/usr/local/bin/minikube`を削除してから、
minikubeのダウンロード部分を以下コマンドに変えて実施。
※googleapis？の仕組みが分からず、githubからの直接ダウンロードになってしまった

`curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.16.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/`

その結果、エラーメッセージの内容が変わりました。これはイケる感じ…？

```
root@ip-XXX-XXX-XXX-XXX:~# minikube start --vm-driver=none
* minikube v1.16.0 on Ubuntu 20.04
* Using the none driver based on user configuration

X Exiting due to GUEST_MISSING_CONNTRACK: Sorry, Kubernetes 1.20.0 requires conntrack to be installed in root's path

root@ip-XXX-XXX-XXX-XXX:~#
```

conntrackを導入して(これは既に動画のコメントにあった)リトライしたら、正常に起動しました！やったーーー！！

```
root@ip-XXX-XXX-XXX-XXX:~# minikube start --vm-driver=none
* minikube v1.16.0 on Ubuntu 20.04
* Using the none driver based on user configuration
* Starting control plane node minikube in cluster minikube
* minikube 1.17.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.17.0
* To disable this notice, run: 'minikube config set WantUpdateNotification false'
～～～省略～～～
* Verifying Kubernetes components...
* Enabled addons: storage-provisioner, default-storageclass
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
root@ip-XXX-XXX-XXX-XXX:~# echo $?
0
root@ip-XXX-XXX-XXX-XXX:~#
```

色々メッセージが出るけど、リターンコード0だから
ちゃんと動いているはず。
[後続の内容](https://github.com/kubernetes/examples/blob/master/staging/simple-nginx.md)も手順通りに実施でき、テストページの表示まで進めました。
やっぱりハンズオンが出来ると達成感もあるし、「このコマンドを変えたらどうなる」「ここでこのコマンドを実行したら結果はどうなる」というのが試せるのが良いですね。

## 思ったこと
情報技術は日々、進歩していく。昨日まで上手くいっていた手順が今日はNG、ということがあるかもしれない。
手順通りにやってみて、上手くいかないという時に諦めず、「上手くいった人と自分の違いは何だろう」という視点から調査していくのは大事と感じました。
今回の成功体験が今後も自分の中で活かしていけると良いなと思いました(小並感)