#初めに
「kubernetes the hard way を PC でやってみる」の2回目、「ホストPC設定」についてです。( 目次 )
今回は、kubernetes the hard way をやるための準備として、 PC のセットアップについて記載します。
(よってまだ kubernetes the hard way の入り口にもたどり着いていません。。。)
ホストのPC は CentOS 8 を入れ、そのうえで KVM を構成しています。
概要の図は「1.概要」をご覧ください。
この記事では、 最小限の設定の 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
再起動し、その後確認します。
[root@sakura etc]# getenforce
Disabled
#firewalld 無効化
systemd から stop して、disable するだけです。
[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.
無効化されていることを確認します。
[root@sakura]# systemctl is-enabled firewalld
disabled
#ipv6 無効化
IPv6 の無効化は行わなくても稼働に影響はありませんが、
個人的に、 ip addr コマンドを実行した際に IPv6 のエントリーが表示されて見づらいのが嫌でいつも実施します。
sysctl.d 以下に IPv6 を無効化する設定ファイルを作成し、 sysctl -p で反映させます。
[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 関連エントリーが消えていることを確認します。
[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 設定を確認しておきます。
[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 で入れるだけです。
[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
[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 を再起動します。
[root@sakura]# shutdown -r now
再起動後、libvirt が作成するブリッジインターフェースができていることを確認します。
下図の virtbr0, virtbr0-nic です。
これらは VM から外部に通信する際の NAT を行ってくれます。
ただし、ただでさえわかりにくい kubernetes の NW 関連に、NAT が追加で入るとさらにわかりにくくなるため
今回は利用しません。そのため、このあと削除します。
[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 というネットワークが作成されています。
[root@sakura ~]# virsh net-list
名前 状態 自動起動 永続
----------------------------------------------------------
default 動作中 はい (yes) はい (yes)
virsh コマンドでネットワークを停止します。
[root@sakura ~]# virsh net-destroy default
ネットワーク default は強制停止されました
[root@sakura ~]# virsh net-list
名前 状態 自動起動 永続
----------------------------------------------------------
その後、ネットワークの自動起動を無効化します。
確認コマンドでは、 --all
を付けて 停止中のものも表示させています。
状態:停止、 自動起動:いいえ となっています。
[root@sakura ~]# virsh net-autostart default --disable
ネットワーク default の自動起動設定が解除されました
[root@sakura ~]# virsh net-list --all
名前 状態 自動起動 永続
----------------------------------------------------------
default 停止状態 いいえ (no) はい (yes)
最後に、 ip addr で再度状況を確認しておきます。
virtbr0 などが消えています。
[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 を確認します。
[root@sakura ~]# nmcli device
DEVICE TYPE STATE CONNECTION
enp0s25 ethernet 接続済み enp0s25
lo loopback 管理無し --
wlp3s0 wifi 管理無し --
なお、この時点では enp0s25 に IP アドレスがついています。
次に、インターフェース br0 を追加します。
[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 はついていません。
[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 解除設定
[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
設定できたか確認します。 (設定した個所をインデントして表示しています)
[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経由で) 実施すると通信が切れて操作できなくなります。)
[root@sakura ~]# nmcli con add type bridge-slave ifname enp0s25 master br0 1
[root@sakura ~]# shutdown -r now
再起動完了後、 br0 が有効で IP がついているかどうか確認します。
[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
これで、下図の状態になりました。
今回はここまでとして、次回は VMを作成していきます。