Linux環境でのmicrok8sクラスタの作成方法

#microk8sとは
小規模なKubernetes環境を作成するために作られたパッケージ．

###特徴
・Linuxのシステムであれば簡単にインストールできる
・細かな調整が不要でインストール後，すぐにKubernetes環境として利用できる
・Kubernetesとともに利用することが多いレジストリやストレージなどのツールが無いようされていて，簡単に有効化できる
・コンテナランタイムとしてcontainerd,runcをランタイムとして採用し，内包している
・動作にDockerが不要
・コマンドは「microk8s kubectl」のような名称でインストールされるが，kuectlなどの名称で使えるように別名(alias)が設定できる



#マシン環境
##Master(マスター)
VM名：microk8s-master
OS：Linux
vCPU：4
メモリ：32GB
ハードディスク：45GB

##worker(ワーカー)

VM名：microk8s-worker-1
VM名：microk8s-worker-2

OS：Linux
vCPU：4
メモリ：32GB
ハードディスク：40GB

#Master側での構築
(1)ユーザーをmicrok8sグループに追加

```
nogisora@microk8s-master:~$ sudo usermod -a -G microk8s nogisora
```

(2)kube配下のキャッシュディレクトリにアクセスできるように権限を変更

```
nogisora@microk8s-master:~$ sudo chown -f -R nogisora ~/.kube
```

(3)kubernetesが使えるかの確認

```
nogisora@microk8s-master:~$ sudo microk8s kubectl get nodes
NAME              STATUS   ROLES    AGE    VERSION
microk8s-master   Ready    <none>   118m   v1.21.1-3+ba118484dd39df
```
※ワーカーノードのmicrok8s-Worker-1,microk8s-Worker-2でも上記を行う


(4)microk8s-master(マスターノード)を二つのワーカーノードに追加するためのコマンドを取得

```
nogisora@microk8s-master:~$ sudo microk8s add-node
From the node you wish to join to this cluster, run the following:
microk8s join 192.168.100.91:25000/e368a4d280b3b137b45ac03da4c31c54/5d41a4490d69　→ここの部分をコピー

If the node you are adding is not reachable through the default interface you can use one of the following:
 microk8s join 192.168.100.91:25000/e368a4d280b3b137b45ac03da4c31c54/5d41a4490d69
```

#Worker側での構築
(1)マスター側で行った(1)~(3)の作業を行う
※省略

(2)microk8s-worker-1,microk8s-worker-2にマスターを追加

```
nogisora@microk8s-worker-1:~$ microk8s join 192.168.100.91:25000/e368a4d280b3b137b45ac03da4c31c54/5d41a4490d69
Contacting cluster at 192.168.100.91
Waiting for this node to finish joining the cluster.
```

```
nogisora@microk8s-worker-2:~$ microk8s join 192.168.100.91:25000/e368a4d280b3b137b45ac03da4c31c54/5d41a4490d69
Contacting cluster at 192.168.100.91
Waiting for this node to finish joining the cluster.
```

(3)クラスター完成！

```
nogisora@microk8s-master:~$ sudo microk8s kubectl get nodes
NAME                STATUS   ROLES    AGE    VERSION
microk8s-worker-2   Ready    <none>   9m8s   v1.21.1-3+ba118484dd39df
microk8s-master     Ready    <none>   147m   v1.21.1-3+ba118484dd39df
microk8s-worker-1   Ready    <none>   10m    v1.21.1-3+ba118484dd39df
```

#おまけ
microk8s kubectlだと長いのでaliasを使って短縮させる

```
nogisora@microk8s-master:~$ ls -a
.  ..  .bash_history  .bash_logout  .bashrc  .cache  .gnupg  .kube  .profile  snap  .sudo_as_admin_successful  .viminfo
nogisora@microk8s-master:~$ vim .bashrc
```

.bashrcの一番下に以下のコードを書く

```php:.bashrc
alias kubectl='microk8s kubectl '
alias k='microk8s kubectl'
```


・確認

```
nogisora@microk8s-master:~$ kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   172m
nogisora@microk8s-master:~$ k get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   172m
```

#まとめ
今回はLinux環境をmicrok8sクラスタを作成した
kubernetes環境がとても簡単に使えるようになるのでぜひ試してほしいと思います


#参考文献
この記事は以下の情報を参考にして執筆しました。
[Microk8sとは（OSSのデージ－ネット）](https://www.designet.co.jp/faq/term/?id=TWljcm9rOHM#:~:text=Microk8s%E3%81%A8%E3%81%AF%E3%80%81%E5%B0%8F%E8%A6%8F%E6%A8%A1,%E3%81%A6%E9%85%8D%E5%B8%83%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82)

[microk8sを使ってkubernetesクラスタを構築してみる + metallbアドオンお試し](https://www.ntt-tx.co.jp/column/tec/20200904/)

[Clustering with MicroK8s](https://microk8s.io/docs/clustering)