kubeadmでのk8sクラスタの構築　2/3

#前回の内容
[kubeadmでのk8sクラスタの構築　1](https://qiita.com/dingtianhongjie/items/39c7e8e703a6f0722385)

#はじめに
masterノードにKubernetesの関連パッケージをインストールする。
workerノードはパッケージをインストールしたmasterをクローンして作る。

#事前準備（master）
今の状態のスナップショットを取っておく。

#masterノードのセットアップ
##swapの無効化
swapがあるとkubeletが起動しないので、無効化する。
swapoffだけだと再起動すると元に戻るので、/etc/fstabファイルのswapの記述をコメントアウトする。

```
$ sudo swapoff -a
$ sudo vi /etc/fstab
・・・
#/dev/mapper/centos-swap swap                    swap    defaults        0 0　<--コメントアウト
```
##ブリッジでのIPv4/IPv6トラフィックの許可
以下のファイルを作成する。

```/etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
```

##SELinuxの無効化

```
$ sudo setenforce 0
```

/etc/selinux/configファイルのSELINUXパラメータを「permissive」に変更する。

```/etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
・・・
```
##コンテナランタイムのインストール
ここでは、Docker CEを使用するので、CentOSにデフォルトでdocker関連のパッケージが入っているか確認する。入っていたら、削除する。

```
# yum list installed | grep docker
```

Docker CEのインストールに必要なパッケージがインストールされているか確認する。インストールされていなかったら、インストールする。

```
# yum list installed | grep yum-utils
yum-utils.noarch                           1.1.31-52.el7               @anaconda
# yum list installed | grep device-mapper-persistent-data
device-mapper-persistent-data.x86_64       0.8.5-1.el7                 @anaconda
# yum list installed | grep lvm2
lvm2.x86_64                                7:2.02.185-2.el7_7.2        @updates
lvm2-libs.x86_64                           7:2.02.185-2.el7_7.2        @updates
```

###yumリポジトリの登録

```
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
読み込んだプラグイン:fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
```

###Docker CEのインストール

```
# yum makecache fast
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
・・・
メタデータのキャッシュを作成しました

# yum install docker-ce.x86_64
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
依存性の解決をしています
・・・
依存性関連をインストールしました:
  audit-libs-python.x86_64 0:2.8.5-4.el7         checkpolicy.x86_64 0:2.5-8.el7                 container-selinux.noarch 2:2.107-3.el7             containerd.io.x86_64 0:1.2.10-3.2.el7
  docker-ce-cli.x86_64 1:19.03.6-3.el7           libsemanage-python.x86_64 0:2.5-14.el7         policycoreutils-python.x86_64 0:2.5-33.el7         python-IPy.noarch 0:0.75-6.el7
  setools-libs.x86_64 0:3.3.8-4.el7

完了しました!
```
念のため確認する。

```
# yum list installed | grep docker
containerd.io.x86_64                       1.2.10-3.2.el7              @docker-ce-stable
docker-ce.x86_64                           3:19.03.6-3.el7             @docker-ce-stable
docker-ce-cli.x86_64                       1:19.03.6-3.el7             @docker-ce-stable
```
###設定ファイルの作成
以下のファイルを作成する。

```
# mkdir /etc/docker
```
```json:/etc/docker/daemon.json
{
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-driver": "json-file",
        "log-opts": {
                "max-size": "100m"
        },
        "storage-driver": "overlay2",
        "storage-opts": [
                "overlay2.override_kernel_check=true"
        ]
}
```
###Dockerの起動

```
# mkdir -p /etc/systemd/system/docker.service.d
# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
# systemctl daemon-reload
# systemctl start docker
# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2020-02-24 22:35:47 JST; 6s ago
・・・
```

##kubernetesのパッケージインストール
###リポジトリの登録
以下のファイルを作成する。

```/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
exclude=kube*
```
###パッケージインストール
```
# yum install kubelet --disableexcludes=kubernetes
# yum install kubeadm --disableexcludes=kubernetes
# yum install kubectl --disableexcludes=kubernetes
```
念のため確認

```
# yum list installed | grep kube
cri-tools.x86_64                           1.13.0-0                  @kubernetes
kubeadm.x86_64                             1.17.3-0                  @kubernetes
kubectl.x86_64                             1.17.3-0                  @kubernetes
kubelet.x86_64                             1.17.3-0                  @kubernetes
kubernetes-cni.x86_64                      0.7.5-0                   @kubernetes
```

###cgroupドライバの確認と設定

```
# docker info | grep Cgroup
 Cgroup Driver: systemd
```
以下のファイルを作成する。

```/var/lib/kubelet/config.yaml
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: "systemd"
```

###kubeletサービスオプションの設定
以下のファイルを作成する。

```
# mkdir /etc/systemd/system/kubelet.service.d
```
```/etc/systemd/system/kubelet.service.d/20-extra-args.conf
[Service]
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
```

サービスをロードする

```
# systemctl enable --now kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
# systemctl daemon-reload
# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
```

#まとめ
これでmasterノードはinitすればいいはず。
initする前に、workerノードをクローンで作る。

#続き
[kubeadmでのk8sクラスタの構築　3/3](https://qiita.com/dingtianhongjie/items/c906b52154c6d501c107)

#参考資料
[Kubernetes実践ガイド](https://www.amazon.co.jp/dp/B07TSBP3CZ/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)