CentOS7にk3sをインストールする

# k3sとは
先人の方々がすでに色々とやられているので、割愛。
https://qiita.com/search?q=k3s
しかし、ネットにあるCentOSへのインストール手順だと動かないので、動くものを作ってみた。

## 構成
VirtualBoxにて以下のVMを構築

* MasterNode (CentOS7 Minimal Install)  
ネットワーク1：NAT (10.0.2.0/24)  
ネットワーク2：ホストオンリーアダプタ (192.168.56.0/24)
* WorkerNode1 (CentOS7 Minimal Install)  
ネットワーク1：NAT (10.0.2.0/24)   
ネットワーク2：ホストオンリーアダプタ (192.168.56.0/24)

## インストール手順
基本的には、以下をまるっとごそっとコピペしてもらえればよいはず。

### MasterNode
```
sudo hostnamectl set-hostname master
sudo sed -i 's/.*127.0.0.1/#&/g' /etc/hosts
sudo sed -i '$a 127.0.0.1 master localhost' /etc/hosts
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo yum -y update
sudo yum -y install iptables-services
sudo systemctl start iptables
sudo systemctl enable iptables
sudo systemctl stop iptables
sudo yum -y install policycoreutils-python
sudo sed -i '/22/a -A INPUT -p tcp -m state --state NEW -m tcp --dport 6443 -j ACCEPT' /etc/sysconfig/iptables
sudo systemctl restart iptables
sudo sh -c "curl -sfL https://get.k3s.io | sh -"
sudo cat /var/lib/rancher/k3s/server/node-token
```

### WorkerNode1
以下はMasterのインストールと並行で実施してよい。

``` 
sudo hostnamectl set-hostname worker1
sudo sed -i 's/.*127.0.0.1/#&/g' /etc/hosts
sudo sed -i '$a 127.0.0.1 worker1 localhost' /etc/hosts
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo yum -y update
sudo yum -y install iptables-services
sudo systemctl start iptables
sudo systemctl enable iptables
sudo yum -y install policycoreutils-python
sudo yum -y install wget
sudo wget https://github.com/rancher/k3s/releases/download/v0.4.0/k3s -O /usr/local/bin/k3s
sudo chmod +x /usr/local/bin/k3s
```

### ノード追加（Worker側）
ノード追加は、Master側でk3sのインストールが完了してから実施する。

```
sudo /usr/local/bin/k3s agent --server https://192.168.56.101:6443 --token [★★★Masterのtoken★★★]
```

## 解説
### ホスト名指定およびhostsファイル修正
ホスト名をmasterに変更し、hostsに"master"と"localhost"は"127.0.0.1"に設定。<br>これをしないと、k3sサーバ起動時にエラーが発生する。
https://tech-lab.sios.jp/archives/13564

```
sudo hostnamectl set-hostname master
sudo sed -i 's/.*127.0.0.1/#&/g' /etc/hosts
sudo sed -i '$a 127.0.0.1 master localhost' /etc/hosts
```

### firewalld無効化、iptablesインストール
k3sはfirewalld配下では動作しないので、firewalldを無効化し、iptablesをインストールする。<br>また、k3sサーバに必要なポート6443を開放する。よくネットのインストール手順では、SELinuxを無効化するように記載されているが、無効化せずにインストールしてみたところ、インストール時に設定を変更しているように見える。<br><font color=red><b>※製品側がSELinuxを無効にしろと記載していない限り、無効にしない方がよいと思う。</b></font>

```
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo yum -y update
sudo yum -y install iptables-services
sudo systemctl start iptables
sudo systemctl enable iptables
sudo systemctl stop iptables
sudo yum -y install policycoreutils-python
sudo sed -i '/22/a -A INPUT -p tcp -m state --state NEW -m tcp --dport 6443 -j ACCEPT' /etc/sysconfig/iptables
sudo systemctl restart iptables
```
### k3sインストール
k3sをインストールする。※今回はエージェント込み（master自体もエージェントとなる）

```
sudo sh -c "curl -sfL https://get.k3s.io | sh -"
```

### k3sトークン表示
workerノードを追加する際に必要なトークンを表示する

```
sudo cat /var/lib/rancher/k3s/server/node-token
```

## 動作確認
Masterノードにて、以下のコマンドを実行する。

```
sudo /usr/local/bin/k3s kubectl get node -o wide
```
次のような内容が出力され、masterおよびworker1が稼働していることが分かる。

```
[user@master ~]$ sudo /usr/local/bin/k3s kubectl get node -o wide
NAME      STATUS   ROLES    AGE   VERSION         INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
master    Ready    <none>   70m   v1.14.1-k3s.4   10.0.2.4      <none>        CentOS Linux 7 (Core)   3.10.0-957.10.1.el7.x86_64   containerd://1.2.5+unknown
worker1   Ready    <none>   69m   v1.14.1-k3s.4   10.0.2.15     <none>        CentOS Linux 7 (Core)   3.10.0-957.10.1.el7.x86_64   containerd://1.2.5+unknown
```

今回はここまで。次回はこの上に色々とコンテナを立ててみようと思う。
※k3sのポートフォワードがイマイチ分からない...。