CentOS7にKubernetes1.9をインストール

master node1台、worker node1台構成で作成します。
参考: https://www.linuxtechi.com/install-kubernetes-1-7-centos7-rhel7/

# master nodeの作成

###  初期設定

```
# まずhostnameを変える
[user@localhost ~]# sudo hostnamectl set-hostname 'k8s-master'
# 次に/etc/hostsを編集。アドレスはそれぞれ適切なものに変えて下さい。
[user@k8s-master ~]# cat /etc/hosts
10.26.5.22 k8s-master
10.26.5.23 worker-node1
```


```
[user@k8s-master ~]# setenforce 0
[user@k8s-master ~]# sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
# 本当はちゃんと設定すべき
[user@k8s-master ~]# systemctl stop firewalld
[user@k8s-master ~]# systemctl disable firewalld
```

### Kubernetes Repositoryの設定

```
[user@k8s-master ~]# cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
        https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
```

### Kubeadm と Dockerのインストール

Dockerはversion17以降を入れる。

```
[user@k8s-master ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
[user@k8s-master ~]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[user@k8s-master ~]# sudo yum makecache fast
[user@k8s-master ~]# sudo yum remove docker docker-common docker-selinux docker-engine
[user@k8s-master ~]# sudo yum install docker-ce
[user@k8s-master ~]# sudo yum install kubeadm -y

[user@k8s-master ~]# systemctl restart docker && systemctl enable docker
[user@k8s-master ~]# systemctl  restart kubelet && systemctl enable kubelet
```

### Kubernetes Masterの作成

```
[user@k8s-master ~]# sudo swapoff -a # offにしないとエラーになる
[user@k8s-master ~]# sudo kubeadm init
```

kubeadm initが成功したら、画面に以下のことをしろと表示されるので行う。あと画面に` kubeadm join --token 〜〜`というのも出力されているのでコピペしておく(node作成時に使う)。

```
[user@k8s-master ~]# mkdir -p $HOME/.kube
[user@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[user@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
```

### ネットワークの作成

ちなみに、Cluster Networkの選択肢はたくさんある。 https://kubernetes.io/docs/concepts/cluster-administration/networking/#how-to-achieve-this

```
[user@k8s-master ~]# export kubever=$(kubectl version | base64 | tr -d '\n')
[user@k8s-master ~]# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"
serviceaccount "weave-net" created
clusterrole "weave-net" created
clusterrolebinding "weave-net" created
daemonset "weave-net" created
```

以下のようになったらmaster作成成功。STATUSがReadyになるまでしばらくかかる。

```
[user@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES     AGE       VERSION
k8s-master   Ready      master    4m        v1.9.0
```


# worker nodeの作成

### 初期設定

```
# まずhostnameを変える
[user@localhost ~]# hostnamectl set-hostname 'worker-node1'
# 次に/etc/hostsを編集。アドレスはそれぞれ適切なものに変えて下さい。
[user@worker-node1 ~]# cat /etc/hosts
10.26.5.22 k8s-master
10.26.5.23 worker-node1
```

```
[user@worker-node1 ~]# setenforce 0
[user@worker-node1 ~]# sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
# 本当はちゃんと設定すべき
[user@worker-node1 ~]# systemctl stop firewalld
[user@worker-node1 ~]# systemctl disable firewalld
```

### Kubernetes Repositoryの設定

```
[user@worker-node1 ~]# cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
        https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
```

###  Kubeadm と Dockerのインストール

Dockerはversion17以降を入れる。

```
[user@k8s-master ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
[user@k8s-master ~]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[user@k8s-master ~]# sudo yum makecache fast
[user@k8s-master ~]# sudo yum remove docker docker-common docker-selinux docker-engine
[user@k8s-master ~]# sudo yum install docker-ce
[user@k8s-master ~]# sudo yum install kubeadm -y

[user@k8s-master ~]# systemctl restart docker && systemctl enable docker
[user@k8s-master ~]# systemctl  restart kubelet && systemctl enable kubelet
```

### worker nodeをmaster nodeにjoinさせる

```
[user@worker-node1 ~]# sudo swapoff -a
# 注意: kubeadm joinコマンドは、master上でkubeadm initをした結果出力されたkubeadm join文字列をコピーして実行すること。
[user@worker-node1 ~]# sudo kubeadm join --token 28733d.3d360974098917f2 10.26.5.22:6443 --discovery-token-ca-cert-hash sha256:be78688abb6dfad729928eccbc49b4413cd19278ccf60826ee82e6ffb9525a5c
```

```
もし以下のようなエラーになった場合
[user@worker-node1 ~]$ sudo kubeadm join --token 360314.00f9c2183f273d11 10.26.5.54:6443 --discovery-token-ca-cert-hash sha256:0639d11cf722491bf4ce5cf7aef1da122ec7ffaa78e7d9e93d27a4e2d1b7b5a9
[preflight] Running pre-flight checks.
	[WARNING FileExisting-crictl]: crictl not found in system path
[preflight] Some fatal errors occurred:
	[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

rootになって以下を行い、kubeadm joinコマンドを実行する
$ su -
$ echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
```


master nodeのほうで以下のようになったらworker node作成成功

```
[user@k8s-master ~]# kubectl get nodes
NAME           STATUS     ROLES     AGE       VERSION
k8s-master     Ready      master    12m       v1.9.0
worker-node1   Ready      <none>    11s       v1.9.0
```