Docker on Ubuntuにminikubeをインストールした話

# はじめに
１台の物理マシンでKubernetesを学習したいと思い、Docker on Ubuntu環境をバージョンアップしてみた。
１台の物理マシンでKubernets環境を構築する場合は、以下２つの方法がメジャーだと思う。
1. kind
1. minikube

kindは「kubernetes in Docker」の略でkubernetes自体のテストにも使われている。しかも、マルチノードクラスタを構築できる特徴があります。
一方、minikubeはドライバーを選択ができて、Docker、Virtual Boxなど色々な環境でkubernetesの検証ができるのが特徴です。ただシングルノードクラスタになりますが。

今回は、動作検証を目的としているのでminikubeを選択しました。

早速、:point_down:で構築したDocker on Ubuntuに導入していきます！

https://qiita.com/LittleBear-6w6/items/328c396ba51a00dfb4bd

# 構成
| 項目 | バージョン |
|:-:|:-:|
| OS  | Ubuntu 22.04  |
| minikube | minikube v1.31.2 |
| Driver  | Docker 24.0.4  |
| クラスタ  | Kubernetes v1.27.4   |

# 導入手順
公式サイトの手順に従って順番にコマンドを叩くだけで簡単に導入できます。
お手軽に導入できるのがいいですよね～！

https://minikube.sigs.k8s.io/docs/start/

１．minikubeのバイナリファイルをダウンロード
```bash:minikubeのバイナリファイルをダウンロード
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
```

２．クラスタを起動
初回はダウンロード等があって、ちょっと時間がかかります。

```bash:クラスタを起動
$ minikube start
```
Dockerがインストール済みなので、デフォルトでドライバーはdockerが選択されました。
Virtual BoxやKVM2でクラスタを構築した等がある場合はdriverオプションを付けることで起動できます。
この場合config設定をした方が便利だと思います。
公式サイトに設定手順等がありますので、ご参照ください。

https://minikube.sigs.k8s.io/docs/drivers/

３．kubectlをインストール
minikubeにもkubectlはインストールされていますが、`minikube kubectl`とタイプする必要がありちょっと長い。
別途kubectlをインストールすることにしました。
公式サイトの通りコマンドを叩くだけです！

https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/

```bash:kubectl導入
最新版のkubectlをダウンロード
$ curl -LO "https://dl.k8s.io/release/$(curl -LS https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

実行権限を付加
$ chmod +x ./kubectl

PATHが通っているディレクトリに移動
$ sudo mv ./kubectl /usr/local/bin/kubectl

稼働確認
$ kubectl version --client
$ kubectl cluster-info
```
４．kubectlのコマンド補完設定を追加　***※補完スクリプトはbash-completionに依存しているため、別途インストール必須***
```bash:kubectlインストール
bash-completionがインストール済みで設定も完了しているかの確認
$ type _init_completion

kubectlの自動補完有効化
$ echo 'source <(kubectl completion bash)' >>~/.bashrc
$ kubectl completion bash > kubectl
$ sudo mv ./kubctl /etc/bash_completion.d/kubectl
$ sudo chown root:root /etc/bash_completion.d/kubectl
$ sudo chmod 644 /etc/bash_completion.d/kubectl

以下の設定もついでに追加
$ echo 'alias k=kubectl' >>~/.bashrc
$ echo 'complete -F __start_kubectl k' >>~/.bashrc
```

# バージョンアップの方法
最新版のインストラーをダウンロードして、導入手順の1.と同様にインストールするだけ。
コマンドを再掲:point_down:
```bash:minikubeの最新版をインストール
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
```

この状態で`minikube start`を実行すると、kubernetesのバージョンアップもできると表示されるので以下のコマンドでバージョンアップする。

```bash:kubernetesのバージョンアップ
$ minikube start --kubernetes-version=v1.xx.x
                                         xx.x:kubernetesの最新バージョン
```

kubernetesをバージョンアップすると`kubectl`も最新のkubernetesに対応するバージョンにアップデートする必要がある。
これも導入手順と同様に最新バージョンをダウンロードするだけ。

```bash:kubectlのバージョンアップ
$ curl -LO "https://dl.k8s.io/release/$(curl -LS https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl
$ kubectl version --client
```

# kubernetesダッシュボードの全機能を使うために
ダッシュボードの全機能を使用するには、`matrics-server`のアドオンを有効にする必要があるよう。
そこで、以下のコマンドで有効化する。

```bash:matrics-serverアドオンを有効化
$ minikube addons enable metrics-server
```

# 今後の展望
:warning:***絶対にやるという予定ではないです。記事投稿時の気分を書いてます。***

ローカルでのkubernetes環境についてXにてアンケートを取ってみました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ローカルの <a href="https://twitter.com/hashtag/kubernetes?src=hash&amp;ref_src=twsrc%5Etfw">#kubernetes</a> 環境は？</p>&mdash; LittleBear🐻 (@littlebear_6w6) <a href="https://twitter.com/littlebear_6w6/status/1689999838547419136?ref_src=twsrc%5Etfw">August 11, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
母数が少ないですが、ローカル環境での検証としてminkubeを使用するのはメジャーなようです。

minikubeでローカルでのkubernetes検証を進めて、ゆくゆくはマルチノード構成のkubernetes環境を構築しようかと思います。
具体的には、以下をやってみようかな:thinking:と思っています。
1. Rasberry piでおうちkubernetsの構築
1. kindを使用したローカル環境でのマルチノード構成構築

1.については、CyberAgent社さんのインターンシップの記事が参考になりそうです。

https://developers.cyberagent.co.jp/blog/archives/27443/

https://github.com/CyberAgentHack/home-kubernetes-2020

おうちkubernets環境だと、@mochizuki875 さんとXとのやり取りでNUCにESXiをインストールしてVMで構築するのも興味深いなと思いました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">NUCにESXiインストールしてその上にVMで！笑<br>コントローラーとかの検証であればkind使うこともあります◎</p>&mdash; mochizuki875 (@mochizuki875) <a href="https://twitter.com/mochizuki875/status/1690722537406337024?ref_src=twsrc%5Etfw">August 13, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

<br/>
2.については、Cybozu社の記事が参考になりそうです。

https://blog.cybozu.io/entry/2019/07/03/170000