microk8sとhelmを使ったローカルKubernetesクラスタの構築(追加設定)

# はじめに
[前回の記事](https://qiita.com/hidenki/items/7f0110d1b7b10c8a7e57)でWindows10上にmicrok8sを使ってKubernetesクラスタを構築しました。
いくつか関連記事を読んでいたら足りなさそうな設定がありましたのでこの記事で補足します。

# 概要
以下の追加設定を行います。

* microk8sのデフォルトで無効となっている機能(storage dns dashboard metrics-server)を有効にする
* Host OSであるWindows 10上からkubectlを使えるようにする

# 設定手順
手順はUbuntu上での操作、その後Windows上での操作の2段階です。

## Ubuntu側
`microk8s.enable`コマンド一発でいろいろ有効になります。
`storage`を有効かするとvarフォルダにファイルが生成されるので、sudoの付与が必要です。

```bash:Ubuntu上のbash
# microk8sのstorage,dns,dashboard,metrics-serverを有効にする
$ sudo microk8s.enable storage dns dashboard metrics-server

# Kubernetesクラスタの状態を確認する(storage,dns,metrics-server,dashboardがenableになっている)
$ microk8s.status
microk8s is running
addons:
jaeger: disabled
fluentd: disabled
gpu: disabled
storage: enabled
registry: disabled
ingress: disabled
dns: enabled
metrics-server: enabled
prometheus: disabled
istio: disabled
dashboard: enabled

# Kubernetesクラスタの全ての状態を取得する(いろいろ増えている)
$ kubectl get all --all-namespaces
NAMESPACE     NAME                                                  READY   STATUS    RESTARTS   AGE
kube-system   pod/heapster-v1.5.2-64874f6bc6-dw7vs                  4/4     Running   4          3m59s
kube-system   pod/hostpath-provisioner-599db8d5fb-lh4rn             1/1     Running   2          32m
kube-system   pod/kube-dns-6ccd496668-rwtd9                         3/3     Running   11         88m
kube-system   pod/kubernetes-dashboard-654cfb4879-n9v2d             1/1     Running   1          5m19s
kube-system   pod/metrics-server-v0.2.1-6f76659f47-2grd2            2/2     Running   2          4m11s
kube-system   pod/monitoring-influxdb-grafana-v4-6679c46745-xr8js   2/2     Running   2          5m19s
kube-system   pod/tiller-deploy-664d6bdc7b-bvjrb                    1/1     Running   4          3h3m

NAMESPACE     NAME                           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
default       service/kubernetes             ClusterIP   10.152.183.1     <none>        443/TCP             3h4m
kube-system   service/heapster               ClusterIP   10.152.183.55    <none>        80/TCP              5m19s
kube-system   service/kube-dns               ClusterIP   10.152.183.10    <none>        53/UDP,53/TCP       88m
kube-system   service/kubernetes-dashboard   ClusterIP   10.152.183.163   <none>        443/TCP             5m19s
kube-system   service/metrics-server         ClusterIP   10.152.183.231   <none>        443/TCP             4m53s
kube-system   service/monitoring-grafana     ClusterIP   10.152.183.57    <none>        80/TCP              5m19s
kube-system   service/monitoring-influxdb    ClusterIP   10.152.183.49    <none>        8083/TCP,8086/TCP   5m19s
kube-system   service/tiller-deploy          ClusterIP   10.152.183.165   <none>        44134/TCP           3h3m

NAMESPACE     NAME                                             READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/heapster-v1.5.2                  1/1     1            1           5m19s
kube-system   deployment.apps/hostpath-provisioner             1/1     1            1           32m
kube-system   deployment.apps/kube-dns                         1/1     1            1           88m
kube-system   deployment.apps/kubernetes-dashboard             1/1     1            1           5m19s
kube-system   deployment.apps/metrics-server-v0.2.1            1/1     1            1           4m54s
kube-system   deployment.apps/monitoring-influxdb-grafana-v4   1/1     1            1           5m19s
kube-system   deployment.apps/tiller-deploy                    1/1     1            1           3h3m

NAMESPACE     NAME                                                        DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/heapster-v1.5.2-56c546dbb8                  0         0         0       4m14s
kube-system   replicaset.apps/heapster-v1.5.2-64874f6bc6                  1         1         1       3m59s
kube-system   replicaset.apps/heapster-v1.5.2-6bc7c4965d                  0         0         0       5m19s
kube-system   replicaset.apps/hostpath-provisioner-599db8d5fb             1         1         1       32m
kube-system   replicaset.apps/kube-dns-6ccd496668                         1         1         1       88m
kube-system   replicaset.apps/kubernetes-dashboard-654cfb4879             1         1         1       5m19s
kube-system   replicaset.apps/metrics-server-v0.2.1-6f76659f47            1         1         1       4m12s
kube-system   replicaset.apps/metrics-server-v0.2.1-7d7d77666c            0         0         0       4m53s
kube-system   replicaset.apps/monitoring-influxdb-grafana-v4-6679c46745   1         1         1       5m19s
kube-system   replicaset.apps/tiller-deploy-664d6bdc7b                    1         1         1       3h3m

# cluster-infoを確認し、サービスへアクセスするURLが生成されていることを確認する
$ kubectl cluster-info
Kubernetes master is running at http://127.0.0.1:8080
Heapster is running at http://127.0.0.1:8080/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at http://127.0.0.1:8080/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at http://127.0.0.1:8080/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
Grafana is running at http://127.0.0.1:8080/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
InfluxDB is running at http://127.0.0.1:8080/api/v1/namespaces/kube-system/services/monitoring-influxdb:http/proxy
```

次の手順で必要になるので、kubectlの設定情報をダンプしておきます。

```bash
$ cat /snap/microk8s/current/client.config
apiVersion: v1
clusters:
- cluster:
    server: http://127.0.0.1:8080
  name: microk8s-cluster
contexts:
- context:
    cluster: microk8s-cluster
    user: admin
  name: microk8s
current-context: microk8s
kind: Config
preferences: {}
users:
- name: admin
  user:
    username: admin
```

## Windows10側

### Chocolateyのインストール
管理者権限でコマンドプロンプトを起動した状態で操作する。
[Chocolateyの公式サイト](https://chocolatey.org/install)を参考にしてください。
以下の文字列をコマンドプロンプトにペーストしてエンターキー一発でインストールされます。

```bash:管理者権限のコマンドプロンプト
C:\> @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
```
### kubectlのインストール
chocolateyをインストールしたコマンドプロンプトの続きでそのまま実行する。

```bash:管理者権限のコマンドプロンプト
C:\> choco install kubernetes-cli
```
### kubectlとkubectlの関連付け

Ubuntu上(IPアドレス：192.168.33.10)で動作するmicrok8sで構築したKubernetesクラスタにアクセスするための情報をkubectlに設定する。

```bash:通常のコマンドプロンプト
# 現在の設定を表示(有効なKubernetesクラスタはひとつもない状態)
C:\> kubectl config view
apiVersion: v1
clusters: []
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []

# ユーザ(admin)を作成する。
C:\> kubectl config set-credentials admin --username=admin
user "admin" set.

# クラスタを作成する。
C:\> kubectl config set-cluster microk8s-cluster --server=http://192.168.33.10:8080
cluster "microk8s-cluster" set.

# コンテキスト(microk8s)を作成する。ユーザ(admin)とクラスタ(cluster)を関係付ける。
C:\> kubectl config set-context microk8s --user=admin --cluster=microk8s-cluster
context "microk8s" set.

# 利用するコンテキストを選択する。ここでは、microk8sを使う。
C:\> kubectl config use-context microk8s
switched to context "microk8s-cluster".

# 現在利用中のコンテキストを確認する。microk8sであることがわかる。
C:\> kubectl config get-contexts
CURRENT   NAME       CLUSTER   AUTHINFO   NAMESPACE
*         microk8s   cluster   admin

# microk8sで構築したKubernetesクラスタのcluster-infoを確認する
C:\> kubectl cluster-info
Kubernetes master is running at http://192.168.33.10:8080
Heapster is running at http://192.168.33.10:8080/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at http://192.168.33.10:8080/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at http://192.168.33.10:8080/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
Grafana is running at http://192.168.33.10:8080/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
InfluxDB is running at http://192.168.33.10:8080/api/v1/namespaces/kube-system/services/monitoring-influxdb:http/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
```
### Grafanaの画面を表示させる
Host PCであるWindows10上で`kubectl cluster-info`で確認したGrafanaのURLをブラウザからアクセスする。

```bash:cluster-infoで確認したGrafanaのURL
Grafana is running at http://192.168.33.10:8080/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
```

以下の表示が出たらアクセスが成功しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271532/df14b3b5-3e72-56f3-25cc-e8d8f1f0ba6e.png)

# さいごに
記事を書いていて思うのがmicrok8sの簡単さに素直に驚きました。
実は前回の記事の続きでこの記事を書いていましたが、VirtualBox上のUbuntuに割り当てたメモリ1GBでは足りず2GBに増やしています:sweat_smile:
まだ有効にしたadd-onの使い方もわかっていませんが、徐々にその辺は勉強していこうかと思います。

# 参考記事

* [Windows10にChocolateyをインストールする - Qiita](https://qiita.com/salty_7/items/c5551b21ff6896c244b9)
* [Chocolatey Gallery | Kubernetes Command Line Interface (CLI) 1.14.1](https://chocolatey.org/packages/kubernetes-cli)
* [multipassでOSX上にmicro-k8sを立てる。 - nがひとつ多い。](https://nnao45.hatenadiary.com/entry/2018/12/20/085706)
* [kubectlコマンドの使い方(1.4) - Qiita](https://qiita.com/hana_shin/items/b7a947511a89accea6d4#2-kubectl-config)