microk8s は まぁまぁだった件

あることを試すために、kubernetes 環境を手軽に作る
方式はいろいろあるが、今回は microk8s にて試す。

* On DigitalOcean Instance
* Ubuntu 18.04.2 LTS

| リソース  |  スペック |
|:------|------:
| Core  |  4 |
| Memory  |  8GB |
| SSD  |  160GB |

# Setup

```shell-session
$ sudo snap install microk8s --classic
2019-08-07T22:52:29Z INFO Waiting for restart...
microk8s v1.15.2 from Canonical✓ installed
```

* インストールは1,2分で完了

```shell-session
root@mk8s:~# kubectl get node -o wide
NAME   STATUS   ROLES    AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
mk8s   Ready    <none>   29m   v1.15.2   157.230.42.196   <none>        Ubuntu 18.04.2 LTS   4.15.0-52-generic   containerd://1.2.5
```

```shell-session
# snap info microk8s
name:      microk8s
summary:   Kubernetes for workstations and appliances
publisher: Canonical*
contact:   https://github.com/ubuntu/microk8s
license:   unset
description: |
  MicroK8s is a small, fast, secure, single node Kubernetes that installs on
  just about any Linux box. Use it for offline development, prototyping,
  testing, or use it on a VM as a small, cheap, reliable k8s for CI/CD. It's
  also a great k8s for appliances - develop your IoT apps for k8s and deploy
  them to MicroK8s on your boxes.

（略）
```

```shell-session
# microk8s.status
microk8s is running
addons:
knative: disabled
jaeger: disabled
fluentd: disabled
gpu: disabled
storage: disabled
registry: disabled
rbac: disabled
ingress: disabled
dns: disabled
metrics-server: disabled
linkerd: disabled
prometheus: disabled
istio: disabled
dashboard: disabled
```



# microk8s.kubectl config view --raw > $HOME/.kube/config




* アドオンで立ち上げられるサービスがいくつかあるよう。結構いろいろある。とりあえず、dns,dashboardあげてみる

```shell-session

# microk8s.enable dashboard
Applying manifest
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created
service/monitoring-grafana created
service/monitoring-influxdb created
service/heapster created
deployment.extensions/monitoring-influxdb-grafana-v4 created
serviceaccount/heapster created
clusterrolebinding.rbac.authorization.k8s.io/heapster created
configmap/heapster-config created
configmap/eventer-config created
deployment.extensions/heapster-v1.5.2 created

If RBAC is not enabled access the dashboard using the default token retrieved with:

token=$(microk8s.kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
microk8s.kubectl -n kube-system describe secret $token

In an RBAC enabled setup (microk8s.enable RBAC) you need to create a user with restricted
permissions as shown in https://github.com/kubernetes/dashboard/wiki/Creating-sample-user
```

```shell-session
# microk8s.kubectl get pod -n kube-system
NAME                                              READY   STATUS    RESTARTS   AGE
heapster-v1.5.2-844b564688-vq9s9                  4/4     Running   0          4m19s
kubernetes-dashboard-7d75c474bb-n7crm             1/1     Running   0          5m24s
monitoring-influxdb-grafana-v4-6b6954958c-pp6xt   2/2     Running   0          5m23s
```

こんな感じ。マニフェストがapplyされているわけ。

毎度、microk8s.kubectlと打つのはかったるいので、エイリアス

```shell-session
# snap alias microk8s.kubectl kubectl
Added:
  - microk8s.kubectl as kubectl
```

# おまけ
## すべての Add-ons を enable にしてみた
* あげるときはいっぺんじゃなくて１つずつがよさそう
* 機能がかぶるやつものあるので結構無理やり
* GPU add-on はGPUでないので無理だった
* knative のステータスは enabled にならなかった
  * CrashLoopBackOff な Pod がいくつか
* 母艦の Memory は 8GB じゃたらなかったので、16GB（6Core）でやりなおした
  * 終わってみたらだいたい、**11GB** 消費してた
  * Install した直後は **500MB** 程度の Memory 使用量
* microk8s.reset でリセットするのもやたら時間がかかる（このスペックのインスタンスで15分～20分くらい）
  * しかも最後ハングった
  * それぞれの add-on でできあがった namespace が消えてない
  * microk8s.stop / start でもだめ
  * snap remove してから install してやって復活



結論としては、「使うやつだけ enabled にしましょう」。

# Ref

* https://microk8s.io/
* https://microk8s.io/docs/