kind試す


いわゆる Kubernetes in Docker。（いわゆるもくそも、だから名前が "kind"）

たくさんのクラスタがDockerコンテナ１つで上がる！？感じ。

Learningに使えるかという点で評価してみる。

とりあえずはセットアップと軽めのApp立ち上げ確認。

# Pre Setup

* GCPにて、約メモリ8GB積んだCentOS7 x86_64を用意
* git
* docker 18.09.5
* kubectl 1.14.1


# Install Golang

よしなに、

```shell-session
# curl -LO https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz
# tar zxf go1.12.4.linux-amd64.tar.gz 
# mv go /usr/local/bin/
```

# Install kind

```shell-session
# export GOPATH=/usr/local/bin/go/bin
# export PATH=$PATH:$GOPATH
# go get -u sigs.k8s.io/kind
```

**2019/9/4 Update** 母艦が Ubuntu 18.04 のとき kind 入れるときに gcc ないと言われたので入れた。

そこそこかかる

**2019/7/29 Update** インストール部分が以下の様になっていた。
>GO111MODULE="on" go get sigs.k8s.io/kind@v0.4.0

```shell-session
# export KINDPATH=/usr/local/bin/go/bin/bin
# export PATH=$PATH:$KINDPATH

# kind create cluster
Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.13.4) 🖼
 ✓ Preparing nodes 📦 
 ✓ Creating kubeadm config 📜 
 ✓ Starting control-plane 🕹️ 
Cluster creation complete. You can now use the cluster with:

export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
kubectl cluster-info
```

そこそこかかる

docker コマンドうってみると・・・・

```shell-session
# docker container ls
CONTAINER ID        IMAGE                  COMMAND                  CREATED              STATUS              PORTS                                  NAMES
c7f23eb8af62        kindest/node:v1.13.4   "/usr/local/bin/entr…"   About a minute ago   Up About a minute   34487/tcp, 127.0.0.1:34487->6443/tcp   kind-control-plane
```


```shell-session
# kind get kubeconfig-path
/root/.kube/kind-config-kind
# export KUBECONFIG="$(kind get kubeconfig-path)"
# kubectl cluster-info
Kubernetes master is running at https://localhost:37608
KubeDNS is running at https://localhost:37608/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
```


# Wordpressあげてみる

https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/#add-resource-configs-for-mysql-and-wordpress

```shell-session
# kubectl get secrets
NAME                    TYPE                                  DATA   AGE
default-token-bkh8n     kubernetes.io/service-account-token   3      36m
mysql-pass-59cdgt95hd   Opaque                                1      14m

# kubectl get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-pv-claim   Bound    pvc-a8f2baf5-5f5b-11e9-989b-0242a2b9ea4d   20Gi       RWO            standard       15m
wp-pv-claim      Bound    pvc-a8f6eb33-5f5b-11e9-989b-0242a2b9ea4d   20Gi       RWO            standard       15m

# kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
wordpress-c6b7fcdd-sfc8d         1/1     Running   0          15m
wordpress-mysql-b4447dd8-xr668   1/1     Running   0          15m

# kubectl get services wordpress
NAME        TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
wordpress   LoadBalancer   10.101.188.12   <pending>     80:32617/TCP   15m
```
ちゃんとあがっとるので、そとからアクセスできるようにポートフォワード

```shell-session
# kubectl port-forward --address 0.0.0.0 svc/wordpress 80:80
```

＝＞ブラウザで確認、ばっちりあがる！

# もいっちょクラスタCreate

```shell-session
# kind create cluster --name tk
Creating cluster "tk" ...
 ✓ Ensuring node image (kindest/node:v1.13.4) 🖼
 ✓ Preparing nodes 📦 
 ✓ Creating kubeadm config 📜 
 ✓ Starting control-plane 🕹️ 
Cluster creation complete. You can now use the cluster with:

export KUBECONFIG="$(kind get kubeconfig-path --name="tk")"
kubectl cluster-info

# kind get clusters
tk
kind
```

追加されてる！ので宛先を変えて、再度Wordpress

```shell-session
# export KUBECONFIG="$(kind get kubeconfig-path --name="tk")"
# kubectl cluster-info
Kubernetes master is running at https://localhost:33629
KubeDNS is running at https://localhost:33629/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
```

なにがちがうって、さっきとちゃんとMasterの宛先ポートが違う。

同じYAML使ってWordpress上げて、ポートフォワーディングして、ブラウザアクセス。
ばっちりあがった。

が・・・クラスタが２つで外からのアクセスをそれぞれのクラスタのPodにアクセスするようにするのは！？

ちゃんと確認・・・これから。

# クラスタ・消す

```shell-session
kind delete cluster --name kind
```

すぐ消える

# Ref

* https://golang.org/dl/
* https://kind.sigs.k8s.io/
* https://kubernetes.io/docs/tasks/tools/install-kubectl/
* https://docs.docker.com/install/linux/docker-ce/centos/
* https://itnext.io/starting-local-kubernetes-using-kind-and-docker-c6089acfc1c0