初学者がKubernetesをはじめてみた ~#1 Minikube導入編~

#はじめに
30代未経験からエンジニアを目指して勉強中のYNと申します。
インフラを勉強しだすと、k8sありきみたいな空気感に焦りますよね。キャッチアップのために学んだことなどを記録していきたいと思います。

#やったこと
Minikubeをインストールしてk8s環境をローカルPC（Mac）に構築。
全体像の理解を（正しいか自信ないが）可視化するとこんな感じ。
![スクリーンショット 2020-12-01 10.30.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/749851fc-001b-abe7-2ec8-9dc0dcbc0b9e.png)
#Minikubeとは
ローカルPCなどで簡単なデモにつかうためのk8s環境。単一のNodeを擁するclusterを実行できる。
Docker-Desktopでもk8sを実行できるが、今回はMinikube×VirtualBoxを選択。

#kubectlの導入
なければインストール。

```
brew install kubectl
```
#Minikubeの導入
まずはインストール。

```
brew install minikube
```
ここで、driverはデフォルトでDocker-Desktopに設定されるため、今回はVirtualBoxを指定。

```
minikube config set driver virtualbox #driverをVirtualBoxに設定
minikube start #起動
```
![スクリーンショット 2020-12-01 10.14.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/104bfa6b-883c-fa55-b399-bb35fb608d05.png)

このとき、`ifconfig`で設定をみると、Macのプライベートipが`192.168.100.144`でVirtualBoxのプライベートでipが`192.168.99.1`であることがわかる。

```
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=400<CHANNEL_IO>
        ether a4:83:e7:9f:6e:13 
        inet6 fe80::1453:7e43:4759:8eac%en0 prefixlen 64 secured scopeid 0x6 
        inet 192.168.100.144 netmask 0xffffff00 broadcast 192.168.100.255
vboxnet0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        ether 0a:00:27:00:00:00 
        inet 192.168.99.1 netmask 0xffffff00 broadcast 192.168.99.255
```
これを（自信ないが）図にするとこんな感じ。
![スクリーンショット 2020-12-01 11.07.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/dd7e2495-d2f9-f354-22e0-4a11448274b0.png)



ちなみに、driverを再指定する場合は、いったんdeleteする必要がある。

```
minikube status #状態確認
minikube stop #停止
minikube delete #破棄
```
#kubectlの設定確認
```
kubectl config view
```
で設定が確認できる。

```
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://kubernetes.docker.internal:6443
  name: docker-desktop
- cluster:
    certificate-authority: /Users/xxx/.minikube/ca.crt
    server: https://192.168.99.100:8443
  name: minikube
contexts:
- context:
    cluster: docker-desktop
    user: docker-desktop
  name: docker-desktop
- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: docker-desktop
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
- name: minikube
  user:
    client-certificate: /Users/xxx/.minikube/profiles/minikube/client.crt
    client-key: /Users/xxx/.minikube/profiles/minikube/client.key
```
いま、下図に示すとおり、clusterはDocker-DesktopとMinikubeの2つがあるが、current-contextはMinikubeとなっていることがわかる。
また、Minikubeは`192.168.99.100`の8443ポートで動いており、kubectlとのSSL通信をするにあたってユーザ認証は`/Users/xxx/.minikube/ca.crt`で行い、ユーザkeyは`/Users/xxx/.minikube/profiles/minikube/client.key`にあることが分かる。
![スクリーンショット 2020-12-01 10.49.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/be33019f-7583-b3f7-4cec-eff4b68ce55c.png)

一応、k8s実行環境(context)がMinikubeになってることが実行中のDocker-Desktopアプリでも確認できる↓

![スクリーンショット 2020-11-30 11.19.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/24304bad-6aaf-911d-e928-7493187c505e.png)

#参考にさせていただいた記事
https://ubiteku.oinker.me/2017/02/21/docker-and-kubernetes-intro/
https://kubernetes.io/ja/docs/concepts/overview/components/
https://github.com/kubernetes/community/tree/master/icons
https://minikube.sigs.k8s.io/docs/drivers/virtualbox/　
https://cstoku.dev/posts/2018/k8sdojo-01/