CentOS7でminikubeを爆速で試す

# はじめに
~~kubernetesクラスタ構成に挫折したので~~ひとまず手っ取り早く試すのにminikubeを使ってみました。

# 環境

## OS

```
# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
```

## docker

```
# docker --version
Docker version 18.03.0-ce, build 0520e24
```

dockerはplaybook化したものを使いまわしています。

[chaspy/playbook-centos](https://github.com/chaspy/playbook-centos/blob/master/roles/docker/tasks/main.yml)

yum update -yをしておきます。

# port解放
8443をあけておきます。

```
# firewall-cmd --add-port=8443/tcp --zone=public --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources: 
  services: dhcpv6-client ssh
  ports: 8443/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
```

あけないとサンプル実行時に失敗します。

```
# kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
error: failed to discover supported resources: Get https://XX.XXX.XXX.XXX:8443/apis/extensions/v1beta1: Service Unavailable
```

# 構築
公式に従うだけでできました。

## kubectl

[linux-continuous-integration-with-cm-support](https://github.com/kubernetes/minikube/blob/v0.25.2/README.md#linux-continuous-integration-with-vm-support)

```
# curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 51.7M  100 51.7M    0     0  2048k      0  0:00:25  0:00:25 --:--:-- 2019k
```

PATHを通しておきます。

```
# mv kubectl /usr/local/bin/
```

## minikube

```
# export MINIKUBE_WANTUPDATENOTIFICATION=false
# export MINIKUBE_WANTREPORTERRORPROMPT=false
# export MINIKUBE_HOME=$HOME
# export CHANGE_MINIKUBE_NONE_USER=true
# mkdir $HOME/.kube || true
# touch $HOME/.kube/config
# export KUBECONFIG=$HOME/.kube/config
# sudo -E ./minikube start --vm-driver=none

Starting local Kubernetes v1.9.4 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Downloading localkube binary
 163.02 MB / 163.02 MB [============================================] 100.00% 0s
 65 B / 65 B [======================================================] 100.00% 0s
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
```

# QuickStart

[QuickStart](https://github.com/kubernetes/minikube/blob/v0.25.2/README.md#quickstart)

```
# kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
deployment.apps "hello-minikube" created
```

たぶん8080を受けるとhelloを返すだけのアプリケーション(サービス)を、imageから構築してるんでしょう。

```
# kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed
```

たぶん8080 portで受付可能なようにしたんでしょう。

```
# curl $(minikube service hello-minikube --url)
CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://XX.XXX.XXX.XXX:8080/

SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001

HEADERS RECEIVED:
accept=*/*
cache-control=max-stale=0
connection=Keep-Alive
host=XX.XXX.XXX.XXX:30282
user-agent=curl/7.29.0
BODY:
-no body in request-
```

たぶんminikubeコマンドで、hello-minikubeのurlを取得し、そこに対してGETをしているんでしょう。

# その他
公式手順通りにできてしまったので、理解のためにいろいろ観察してみましょう。

## サンプルのイメージ
nginxが動いてるっぽいですが、今回ダウンロードしたイメージ`k8s.gcr.io/echoserver:1.4`は、google container registryからpullしているようですね。

DockerHubのように公開されてるかと思って探したんですが見つけきれませんでした。

## ダッシュボード
ノードの30000番にアクセスするとダッシュボードに行けます。

```
# minikube dashboard --url=true
http://XX.XXX.XXX.XXX:30000
```

![kubernetes.png](https://qiita-image-store.s3.amazonaws.com/0/64903/ad1e521b-e8a0-36bc-e624-f0b830bfa124.png)

めちゃくちゃリッチだ、、、すごい、、、

# おわりに
ひとまず遊べる環境ができたので今後も遊び倒したいと思います。