Ubuntu で Kubernetes 三昧その３

[Ubuntu で Kubernetes 三昧その２](https://qiita.com/intrajp/items/37a283ab2f089fd0a2b9)の続きです。

Container Runtimesを入れます。この[説明]((https://kubernetes.io/docs/setup/production-environment/container-runtimes/))にしたがいます。

IPv4 packet forwarding　を有効にします。
```
$ cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
net.ipv4.ip_forward = 1
```
再起動しても有効になるように設定します。
```
$ sudo sysctl --system
$ sudo shutdown -r now
```
確認します。
```
$ sysctl net.ipv4.ip_forward
```

CRI をインストールします。[containerd](https://github.com/containerd/containerd/blob/main/docs/getting-started.md) を入れましょう。
とりあえず、ホストマシンに containerd-2.1.3-linux-amd64.tar.gz をダウンロードしました。これを仮想マシンに送るため、ホストアダプタを有効化しました。
既存のアダプタは、「NATネットワーク」にしています。

マスター１で
```
$ ip a
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
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:9e:cb:2f brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
       valid_lft 506sec preferred_lft 506sec
    inet6 fe80::a00:27ff:fe9e:cb2f/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:91:4f:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.107/24 brd 192.168.56.255 scope global dynamic noprefixroute enp0s8
       valid_lft 506sec preferred_lft 506sec
    inet6 fe80::8193:8bef:9f55:246b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
```
ワーカー１で
```
$ ip a

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
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:b2:38:f1 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.7/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
       valid_lft 464sec preferred_lft 464sec
    inet6 fe80::a00:27ff:feb2:38f1/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:6b:f5:60 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.108/24 brd 192.168.56.255 scope global dynamic noprefixroute enp0s8
       valid_lft 464sec preferred_lft 464sec
    inet6 fe80::1300:2a81:41f2:2f41/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
```
そもそも、ssh サーバがはいっていないので、入れます。それぞれの仮想マシンでおこないます。
```
$ sudo apt install openssh-server
$ sudo systemctl enable --now ssh
$ systemctl is-enabled ssh
enabled
$ nc 127.0.0.1 22 -zv -w 2
Connection to 127.0.0.1 22 port [tcp/ssh] succeeded!
```
ホストマシンの公開鍵を、それぞれの仮想マシンの .ssh/authorized_keys にコピーしておきます。

.ssh/config に、マシンの指定(master1, worker1)をしたので、ファイルを転送します。
```
$ scp containerd-2.1.3-linux-amd64.tar.gz master1:/home/<user>
containerd-2.1.3-linux-amd64.tar.gz 

$ scp containerd-2.1.3-linux-amd64.tar.gz worker1:/home/fujiwara
containerd-2.1.3-linux-amd64.tar.gz 
```
これからは、仮想マシンに ssh でログインして作業を実施できます。
```
@masternode1:~$ sudo tar Cxzvf /usr/local containerd-2.1.3-linux-amd64.tar.gz
@workernode1:~$ sudo tar Cxzvf /usr/local containerd-2.1.3-linux-amd64.tar.gz
(表示)
bin/
bin/containerd
bin/containerd-shim-runc-v2
bin/ctr
bin/containerd-stress
```
systemd の unit ファイルを[ここ](https://raw.githubusercontent.com/containerd/containerd/main/containerd.service)からコピーして投入します。
```
@masternode1:~$ sudo mkdir -p /usr/local/lib/systemd/system
@masternode1:~$ sudo vim /usr/local/lib/systemd/system/containerd.service

@workernode1:~$ sudo mkdir -p /usr/local/lib/systemd/system
@workernode1:~$ sudo vim /usr/local/lib/systemd/system/containerd.service
```
containerd を起動します。
```
@masternode1:~$ sudo systemctl daemon-reload
@masternode1:~$ sudo systemctl enable --now containerd
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /usr/local/lib/systemd/system/containerd.service.

@workernode1:~$ sudo systemctl daemon-reload
@workernode1:~$ sudo systemctl enable --now containerd
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /usr/local/lib/systemd/system/containerd.service.
```
[runc](https://github.com/opencontainers/runc/releases) をインストールします。
```
@masternode1:~$ sudo install -m 755 runc.amd64 /usr/local/sbin/runc
```

[CNI plugins](https://github.com/containernetworking/plugins/releases )をインストールします。
```
@masternode1:~$ sudo mkdir -p /opt/cni/bin
@masternode1:~$ sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.7.1.tgz 
@workernode1:~$ sudo mkdir -p /opt/cni/bin
@workernode1:~$ sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.7.1.tgz 

(表示)
./
./dummy
./tap
./sbr
./bandwidth
./LICENSE
./host-device
./dhcp
./firewall
./loopback
./host-local
./static
./ipvlan
./vlan
./vrf
./bridge
./ptp
./portmap
./macvlan
./README.md
./tuning
```

```
root@masternode1:~# mkdir /etc/containerd
root@masternode1:~# containerd config default > /etc/containerd/config.toml
root@workernode1:~# mkdir /etc/containerd
root@workernode1:~# containerd config default > /etc/containerd/config.toml
```
systemd cgroup driver の設定を施します。
```
マスター、ワーカー両方で実施。
# vim /etc/containerd/config.toml
---
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true <<--- この行を追加
---
containerd を再起動する。
$ sudo systemctl restart containerd
```

[Ubuntu で Kubernetes 三昧その４](https://qiita.com/intrajp/items/9f800a68502a845fd4f1)につづく。

参考：

https://kubernetes.io/docs/setup/production-environment/container-runtimes/