kubernetes the hard way on PC (２．ホストPC設定)

#初めに
「[kubernetes the hard way](https://github.com/kelseyhightower/kubernetes-the-hard-way) を PC でやってみる」の2回目、「ホストPC設定」についてです。（ [目次](https://qiita.com/shimauma_Zzzzz/items/84ecf5c748ceafd05380#%E8%AA%AC%E6%98%8E%E8%A8%98%E4%BA%8B%E7%9B%AE%E6%AC%A1) ）
今回は、kubernetes the hard way をやるための準備として、 PC のセットアップについて記載します。
（よってまだ kubernetes the hard way の入り口にもたどり着いていません。。。）

ホストのPC は CentOS 8 を入れ、そのうえで KVM を構成しています。
概要の図は「[１．概要](https://qiita.com/shimauma_Zzzzz/items/84ecf5c748ceafd05380)」をご覧ください。

この記事では、 最小限の設定の CentOS 8 上で以下の作業を行うという内容です。
- SE Linux の無効化
- firewalld の無効化
- ipv6 の無効化
- nfs クライアントの導入
- kvm の導入
- ブリッジの構成

SE Linux や firewalld は利用する方がセキュリティ的には良いのですが、
今回は勉強メインなので無効化しています。
ipv6 無効化はやってもやらなくてもどちらでもよいです。　ip addr コマンドの見た目をすっきりさせたい程度の動機です。
NFS は、各種ファイルをやり取りするために使う程度なのでこれもなくてもOKです。
KVM とブリッジ接続は今回は必須です。

#環境

Cent OS 8

#SE Linux 無効化

/etc/selinux/config ファイルを修正し、
SELINUX=disabled に修正します。

````
[root@sakura selinux]# cat 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=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
````

再起動し、その後確認します。

```shell-session
[root@sakura etc]# getenforce
Disabled
```


#firewalld 無効化

systemd から stop して、disable するだけです。

```shell-session
[root@sakura]# systemctl stop firewalld
[root@sakura]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
````

無効化されていることを確認します。

```shell-session
[root@sakura]# systemctl is-enabled firewalld
disabled
````

#ipv6 無効化

IPv6 の無効化は行わなくても稼働に影響はありませんが、
個人的に、 ip addr コマンドを実行した際に IPv6 のエントリーが表示されて見づらいのが嫌でいつも実施します。
sysctl.d 以下に IPv6 を無効化する設定ファイルを作成し、 sysctl -p で反映させます。

```shell-session
[root@sakura]# cd /etc/sysctl.d
[root@sakura sysctl.d]# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> disable_ipv6.conf
[root@sakura sysctl.d]# echo "net.ipv6.conf.default.disable_ipv6 = 1" >> disable_ipv6.conf

[root@sakura sysctl.d]# cat disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

[root@sakura sysctl.d]# sysctl -p /etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
```

ipv6 関連エントリーが消えていることを確認します。

```shell-session
[root@sakura sysctl.d]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether f0:de:f1:7c:68:5e brd ff:ff:ff:ff:ff:ff
    inet 192.168.199.2/24 brd 192.168.199.255 scope global noprefixroute enp0s25
       valid_lft forever preferred_lft forever
3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether a0:88:b4:d3:89:8c brd ff:ff:ff:ff:ff:ff
```

そして今気づいたのですが、  物理NIC が  enp0s3 ではなく、 enp0s25 ですね。。。
図が間違っています。。。（が、修正する気力がない。。）

また、 NIC (今回は enp0s25 の Network Manager の ipv6 設定を確認しておきます。

```shell-session
[root@sakura etc]# nmcli con show enp0s25 | grep ipv6
ipv6.method:                            ignore
ipv6.dns:                               --
ipv6.dns-search:                        --
ipv6.dns-options:                       --

```
ipv6.method が ignore になっていることを確認します。
なっていなければ、 ````nmcli con mod enp0s25 ipv6.method=ignore```` で無視設定にしておきましょう



#NFSクライアント導入

これは dnf で入れるだけです。

```shell-session
[root@sakura etc]# dnf -y install nfs-utils
CentOS-8 - AppStream                                                                                   7.5 kB/s | 4.3 kB     00:00
CentOS-8 - Base                                                                                        7.6 kB/s | 3.9 kB     00:00
CentOS-8 - Extras                                                                                      1.8 kB/s | 1.5 kB     00:00
依存関係が解決しました。
=======================================================================================================================================
 パッケージ                            アーキテクチャー           バージョン                          リポジトリー               サイズ
=======================================================================================================================================
インストール:
 nfs-utils                             x86_64                     1:2.3.3-26.el8                      BaseOS                     472 k
依存関係のインストール:
 gssproxy                              x86_64                     0.8.0-14.el8                        BaseOS                     118 k
 keyutils                              x86_64                     1.5.10-6.el8                        BaseOS                      63 k
 libverto-libevent                     x86_64                     0.3.0-5.el8                         BaseOS                      16 k
 quota                                 x86_64                     1:4.04-10.el8                       BaseOS                     214 k
 quota-nls                             noarch                     1:4.04-10.el8                       BaseOS                      94 k
 rpcbind                               x86_64                     1.2.5-4.el8                         BaseOS                      70 k

... 略

```

#KVM の導入

どこかの Web を参考にしたのですが、忘れました。。。
以下のものを導入します。
- qemu-kvm
- virt-install
- virt-manager
- libvirt

```shell-session
[root@sakura ~]# dnf install qemu-kvm virt-install virt-manager libvirt

=======================================================================================================================================
 パッケージ                                  Arch         バージョン                                             リポジトリー    サイズ
=======================================================================================================================================
インストール:
 libvirt                                     x86_64       4.5.0-35.3.module_el8.1.0+297+df420408                 AppStream        50 k
 qemu-kvm                                    x86_64       15:2.12.0-88.module_el8.1.0+297+df420408.3             AppStream        90 k
 virt-install                                noarch       2.2.1-2.el8                                            AppStream        99 k


... 略


 xml-common                                  noarch       0.6.3-50.el8                                           BaseOS           39 k
弱い依存関係のインストール:
 libvirt-daemon-kvm                          x86_64       4.5.0-35.3.module_el8.1.0+297+df420408                 AppStream        49 k
モジュールストリームの有効化:
 llvm-toolset                                             rhel8
 virt                                                     rhel

トランザクションの概要
=======================================================================================================================================
インストール  254 パッケージ

ダウンロードサイズの合計: 118 M
インストール済みのサイズ: 456 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/254): abattis-cantarell-fonts-0.0.25-4.el8.noarch.rpm                                               574 kB/s | 155 kB     00:00


... 略

  userspace-rcu-0.10.1-2.el8.x86_64
  xml-common-0.6.3-50.el8.noarch

完了しました!

```

完了後、 OS を再起動します。

```shell-session
[root@sakura]# shutdown -r now 
```

再起動後、libvirt が作成するブリッジインターフェースができていることを確認します。
下図の virtbr0, virtbr0-nic  です。
これらは VM から外部に通信する際の NAT を行ってくれます。
ただし、ただでさえわかりにくい kubernetes の NW 関連に、NAT が追加で入るとさらにわかりにくくなるため
今回は利用しません。そのため、このあと削除します。

```shell-session
[root@sakura ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether f0:de:f1:7c:68:5e brd ff:ff:ff:ff:ff:ff
    inet 192.168.199.2/24 brd 192.168.199.255 scope global noprefixroute enp0s25
       valid_lft forever preferred_lft forever
3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether a0:88:b4:d3:89:8c brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:8f:5e:82 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:8f:5e:82 brd ff:ff:ff:ff:ff:ff
```

削除ですが、NIC を消すのではなく、　KVM 上でネットワークを削除します。
virsh コマンドでネットワークを確認すると、 default というネットワークが作成されています。

```shell-session
[root@sakura ~]# virsh net-list
 名前               状態     自動起動  永続
----------------------------------------------------------
 default              動作中  はい (yes)  はい (yes)
```

virsh コマンドでネットワークを停止します。

```shell-session
[root@sakura ~]# virsh net-destroy default
ネットワーク default は強制停止されました

[root@sakura ~]# virsh net-list
 名前               状態     自動起動  永続
----------------------------------------------------------


```

その後、ネットワークの自動起動を無効化します。
確認コマンドでは、　````--all```` を付けて　停止中のものも表示させています。
状態：停止、　自動起動：いいえ　となっています。

```shell-session
[root@sakura ~]# virsh net-autostart default --disable
ネットワーク default の自動起動設定が解除されました

[root@sakura ~]# virsh net-list --all
 名前               状態     自動起動  永続
----------------------------------------------------------
 default              停止状態 いいえ (no) はい (yes)
```

最後に、 ip addr で再度状況を確認しておきます。
virtbr0 などが消えています。

```shell-session
[root@sakura ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether f0:de:f1:7c:68:5e brd ff:ff:ff:ff:ff:ff
    inet 192.168.199.2/24 brd 192.168.199.255 scope global noprefixroute enp0s25
       valid_lft forever preferred_lft forever
3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether a0:88:b4:d3:89:8c brd ff:ff:ff:ff:ff:ff

```

#ブリッジの構成

最後に、VM と外部を接続するためのブリッジインターフェースを作成します。
よく調べれば、　先程削除した virtbr0 などを使って、NAT ではなく ブリッジ接続することも
できると思いますが、今回はそこまで深く調べず、 KVM の default ネットワークを削除し、
普通の（？）ブリッジインターフェースを作成します。

まず、現時点の NIC を確認します。

```shell-session
[root@sakura ~]# nmcli device
DEVICE   TYPE      STATE     CONNECTION
enp0s25  ethernet  接続済み  enp0s25
lo       loopback  管理無し  --
wlp3s0   wifi      管理無し  --
```

なお、この時点では enp0s25 に IP アドレスがついています。
次に、インターフェース br0 を追加します。

```shell-session
[root@sakura ~]# nmcli connection add type bridge autoconnect yes con-name br0 ifname br0
接続 'br0' (0b17c3ce-e7ea-4546-8e56-4af054ac760c) が正常に追加されました。

[root@sakura ~]# nmcli device
DEVICE   TYPE      STATE                     CONNECTION
enp0s25  ethernet  接続済み                  enp0s25
br0      bridge    接続中 (IP 設定を取得中)  br0
lo       loopback  管理無し                  --
wlp3s0   wifi      管理無し                  --
```

この時点では、　br0 には IP Address はついていません。

```shell-session
[root@sakura ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether f0:de:f1:7c:68:5e brd ff:ff:ff:ff:ff:ff
    inet 192.168.199.2/24 brd 192.168.199.255 scope global noprefixroute enp0s25
       valid_lft forever preferred_lft forever
3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether a0:88:b4:d3:89:8c brd ff:ff:ff:ff:ff:ff
6: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether fe:c1:d9:6b:8a:46 brd ff:ff:ff:ff:ff:ff

```

次に br0 の各種設定を行います。 Network manager 関連設定変更になります。
内容としては、以下の通りです。
今回の構成でNW がループすることは無いので STP も no に設定しています。

- IPアドレス設定
- デフォルトゲートウェイ設定
- DNS設定
- IPv4 のマニュアル設定指定
- IPv6 の無視指定
- ブリッジの STP 解除設定

```shell-session
[root@sakura ~]# nmcli con mod br0 ipv4.addresses 192.168.199.2/24
[root@sakura ~]# nmcli con mod br0 ipv4.gateway 192.168.199.254
[root@sakura ~]# nmcli con mod br0 ipv4.dns 192.168.199.254
[root@sakura ~]# nmcli con mod br0 ipv4.method manual
[root@sakura ~]# nmcli con mod br0 ipv6.method ignore
[root@sakura ~]# nmcli con mod br0 bridge.stp no
```

設定できたか確認します。 (設定した個所をインデントして表示しています）

```shell-session
[root@sakura ~]# nmcli con show br0
connection.id:                          br0
connection.uuid:                        0b17c3ce-e7ea-4546-8e56-4af054ac760c
connection.stable-id:                   --
connection.type:                        bridge
connection.interface-name:              br0
connection.autoconnect:                 はい
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   0
connection.read-only:                   いいえ
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
connection.metered:                     不明
connection.lldp:                        default
connection.mdns:                        -1 (default)
connection.llmnr:                       -1 (default)
connection.wait-device-timeout:         -1
    ipv4.method:                            manual
    ipv4.dns:                               192.168.199.254
ipv4.dns-search:                        --
ipv4.dns-options:                       --
ipv4.dns-priority:                      0
    ipv4.addresses:                         192.168.199.2/24 
    ipv4.gateway:                           192.168.199.254
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.routing-rules:                     --
ipv4.ignore-auto-routes:                いいえ
ipv4.ignore-auto-dns:                   いいえ
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                はい
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     いいえ
ipv4.may-fail:                          はい
ipv4.dad-timeout:                       -1 (default)
    ipv6.method:                            ignore
ipv6.dns:                               --
ipv6.dns-search:                        --
ipv6.dns-options:                       --
ipv6.dns-priority:                      0
ipv6.addresses:                         --
ipv6.gateway:                           --
ipv6.routes:                            --
ipv6.route-metric:                      -1
ipv6.route-table:                       0 (unspec)
ipv6.routing-rules:                     --
ipv6.ignore-auto-routes:                いいえ
ipv6.ignore-auto-dns:                   いいえ
ipv6.never-default:                     いいえ
ipv6.may-fail:                          はい
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.addr-gen-mode:                     stable-privacy
ipv6.dhcp-duid:                         --
ipv6.dhcp-send-hostname:                はい
ipv6.dhcp-hostname:                     --
ipv6.token:                             --
bridge.mac-address:                     --
   bridge.stp:                             いいえ
bridge.priority:                        32768
bridge.forward-delay:                   15
bridge.hello-time:                      2
bridge.max-age:                         20
bridge.ageing-time:                     300
bridge.group-forward-mask:              0
bridge.multicast-snooping:              はい
bridge.vlan-filtering:                  いいえ
bridge.vlan-default-pvid:               1
bridge.vlans:                           --
proxy.method:                           none
proxy.browser-only:                     いいえ
proxy.pac-url:                          --
proxy.pac-script:                       --
GENERAL.NAME:                           br0
GENERAL.UUID:                           0b17c3ce-e7ea-4546-8e56-4af054ac760c
GENERAL.DEVICES:                        br0
GENERAL.STATE:                          アクティベート中
GENERAL.DEFAULT:                        いいえ
GENERAL.DEFAULT6:                       いいえ
GENERAL.SPEC-OBJECT:                    --
GENERAL.VPN:                            いいえ
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/4
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/4
GENERAL.ZONE:                           --
GENERAL.MASTER-PATH:                    --
[root@sakura ~]#


```

最後に、 物理NIC をブリッジの下に付けます。
（※　このコマンドを ssh 等  NW 越しに (enp0s25経由で)  実施すると通信が切れて操作できなくなります。）

```shell-session
[root@sakura ~]# nmcli con add type bridge-slave ifname enp0s25 master br0 1
[root@sakura ~]# shutdown -r now

```

再起動完了後、 br0 が有効で IP がついているかどうか確認します。

```shell-session
[root@sakura ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether f0:de:f1:7c:68:5e brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether a0:88:b4:d3:89:8c brd ff:ff:ff:ff:ff:ff
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether f0:de:f1:7c:68:5e brd ff:ff:ff:ff:ff:ff
    inet 192.168.199.2/24 brd 192.168.199.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever

```

これで、下図の状態になりました。

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310495/f81f07b4-af5e-f490-0c2f-8bc6c4dc7511.png)


今回はここまでとして、次回は VMを作成していきます。


----
← [１．概要](https://qiita.com/shimauma_Zzzzz/items/84ecf5c748ceafd05380)
↑ [目次](https://qiita.com/shimauma_Zzzzz/items/84ecf5c748ceafd05380#%E8%AA%AC%E6%98%8E%E8%A8%98%E4%BA%8B%E7%9B%AE%E6%AC%A1)
→ [３．VM作成](https://qiita.com/shimauma_Zzzzz/items/4c436a6030f7ed120d5d)

----