さくらのクラウドでいちからk8sをインストールする

# 概要
さくらのクラウドで作ったUbuntu18.04.2 LTS のインスタンスにDocker入れるところから始めて
kubernetesが使えるようになるところまでを書いています。

# 前提

- インスタンスをUbuntu18.04.2 LTS で2つ作成済みで作成直後の状態とします。
- 2つのインスタンスは同じNWに属しているとします。
- pod network add-on は flannel を使います。
- Dockerのインストールではつまづかない

# マスターにしたい側での操作
## Dockerのインストール

ここのページをみて進めるとOK。
https://docs.docker.com/install/linux/docker-ce/ubuntu/

## kubeadmやkubectlのインストール

以下のコマンドを実行してインストールします。

```
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
```

## Cgroup Driverの確認
以下のコマンドを実行し、cgroupfsであるかを確認します。

``` bash
sudo docker info | grep "Cgroup Driver"

出力結果　cgroupfsって書いてる！
Cgroup Driver: cgroupfs
```

``` bash
cat /var/lib/kubelet/kubeadm-flags.env | grep cgroup

出力結果　cgroupfsって書いてる！
KUBELET_KUBEADM_ARGS=--cgroup-driver=cgroupfs (後略
```


## swapをoffにする

以下のコマンドを実行してswapをoffにする

``` bash
sudo swapoff -a
```

## kubeadm init の実行

--pod〜 の引数はflannelを使うために必要なものです。

``` bash
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
```

`Your Kubernetes control-plane has initialized successfully!` 的な
表示がされるとOKです。(他にもたくさん表示されるけど。)

以下のように `kubeadm join` で始まる記述は
ノードとなるサーバをノードとして追加するときに必要なのでコピーしておく。

``` bash
Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.1:6443 --token h21xhg.vmvb6ywu8wbb61e2 \
    --discovery-token-ca-cert-hash sha256:55614ef3e52c4e9e052708df737c7758ff0fcf5a9a00336788e126c52204b907
```

## root以外でkubectl を実行できるようにする

``` bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
```

## iptablesのチェーンにブリッジドIPv4トラフィックを渡せるようにする。

``` bash
sudo sysctl net.bridge.bridge-nf-call-iptables=1
```

## pod network add-on　のインストール

``` bash
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
```

CoreDNSのポットが起動して実行中であることを確認する。

```
kubectl get pods --all-namespaces

出力結果　　coredns ってNAMEのコンテナのSTATUSがRunningだ！

ubuntu@k8s-master:~$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-fb8b8dccf-cwh9d              1/1     Running   0          7m3s
kube-system   coredns-fb8b8dccf-mhnzp              1/1     Running   0          7m3s
kube-system   etcd-k8s-master                      1/1     Running   0          6m
kube-system   kube-apiserver-k8s-master            1/1     Running   0          6m15s
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          6m1s
kube-system   kube-flannel-ds-amd64-cns87          1/1     Running   0          43s
kube-system   kube-proxy-sdp4l                     1/1     Running   0          7m3s
kube-system   kube-scheduler-k8s-master            1/1     Running   0          6m23s
ubuntu@k8s-master:~$ 
```

## masterの状態を確認する

``` bash
kubectl get nodes

出力結果　STATUSが Readyになってる！
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   9m27s   v1.14.1
```

# ノードとなる側での操作
## Dockerのインストール

ここのページをみて進めるとOK。
https://docs.docker.com/install/linux/docker-ce/ubuntu/

## kubeadmやkubectlのインストール

以下のコマンドを実行してインストールします。

``` bash
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
```

## swapをoffにする

以下のコマンドを実行してswapをoffにします。

``` bash
swapoff -a
```

## ノードとして登録する

以下のコマンドを実行します。

``` bash
控えておいた kubeadm join ~ で始まるコマンドを実行する。

例)
kubeadm join 192.168.1.1:6443 --token h21xhg.vmvb6ywu8wbb61e2 \
    --discovery-token-ca-cert-hash sha256:55614ef3e52c4e9e052708df737c7758ff0fcf5a9a00336788e126c52204b907
```

以下みたいな出力結果が出ればOKOK。
`This node has joined the cluster:`

## master側で状態を確認する。

以下のコマンドを実行して確認する。

``` bash
kubectl get nodes

出力結果　　さっきの出力と比べると増えてる！
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   22m     v1.14.1
k8s-node01   Ready    <none>   2m58s   v1.14.1
ubuntu@k8s-master:~$ 
```

# 次はどうするの？
yaml書いたりして kubectl apply しよう！
グーグルに聞くと色々出てきます。

# TIPS
公式のページ
https://v1-13.docs.kubernetes.io/docs/setup/independent/install-kubeadm/
https://v1-13.docs.kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

# やり残し

- workerのラベルつける部分も記載しないと。