containerdをインストールする!(Locky Linux 9)

Kubernatesインストールのために、containerdをLocky Linux 9にインストールします。

OSのバージョンを確認する!

OSのバージョンを確認します。

# cat /etc/rocky-release
Rocky Linux release 9.1 (Blue Onyx)
# uname -r
5.14.0-162.6.1.el9_1.0.1.x86_64

SELinuxを無効化する!

SELinuxを無効化します。

# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

インストール済みのDocker関連のパッケージを削除する!

インストール済みのDocker関連のパッケージを削除しておきます。

# dnf remove docker docker-common docker-selinux docker-engine -y
No match for argument: docker
No match for argument: docker-common
No match for argument: docker-engine
Dependencies resolved.
========================================================================================================================
 Package                              Architecture        Version                         Repository               Size
========================================================================================================================
Removing:
 container-selinux                    noarch              3:2.189.0-1.el9                 @appstream               57 k
Removing dependent packages:
 flatpak-selinux                      noarch              1.12.7-2.el9                    @appstream               12 k
 selinux-policy                       noarch              34.1.43-1.el9                   @baseos                  25 k
 selinux-policy-targeted              noarch              34.1.43-1.el9                   @baseos                  18 M
Removing unused dependencies:
 rpm-plugin-selinux                   x86_64              4.16.1.3-19.el9_1               @baseos                  16 k

Transaction Summary
========================================================================================================================
Remove  5 Packages
...
Complete!

カーネルモジュールを追加でロードする!

現在の使用中の環境にもコマンドでカーネルモジュールのロードを行います。

# modprobe overlay
# modprobe br_netfilter

起動時にカーネルモジュールをロードする設定を行います。

# cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

システム設定を変更する!

システム設定を変更します。

# cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

システム設定の変更を反映する!

システム設定の変更を反映します。

# sysctl --system

カーネルのモジュールが読み込まれたことを確認します。

$ lsmod | grep br_netfilter
br_netfilter           32768  0
bridge                315392  1 br_netfilter
$ lsmod | grep overlay
overlay               155648  0

Dockerのリポジトリを登録する!

Dockerのリポジトリを登録します。

# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo

リポジトリの情報をアップデートします。

# dnf update
Docker CE Stable - x86_64                                                                23 kB/s |  14 kB     00:00    
Rocky Linux 9 - BaseOS                                                                  3.8 kB/s | 3.6 kB     00:00    
Rocky Linux 9 - AppStream                                                               5.5 kB/s | 4.1 kB     00:00    
Rocky Linux 9 - AppStream                                                               2.8 MB/s | 6.4 MB     00:02    
Rocky Linux 9 - Extras                                                                  3.1 kB/s | 2.9 kB     00:00    
Rocky Linux 9 - Extras                                                                  6.9 kB/s | 8.5 kB     00:01    
Error: 
 Problem: package buildah-1:1.27.2-2.el9_1.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
  - package containerd.io-1.6.14-3.1.el9.x86_64 conflicts with runc provided by runc-4:1.1.4-1.el9_1.x86_64
  - package containerd.io-1.6.14-3.1.el9.x86_64 obsoletes runc provided by runc-4:1.1.4-1.el9_1.x86_64
  - cannot install the best update candidate for package runc-4:1.1.4-1.el9_1.x86_64
  - cannot install the best update candidate for package buildah-1:1.27.2-2.el9_1.x86_64
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

私の環境では、エラーが出力されてしまいました。containerdのインストール時に解消を図ります。

conternerdをインストールする!

containerdをインストールします。「--allowerasing」のオプションでパッケージの依存関係のエラーの解消を図ります。

# dnf install -y containerd.io --allowerasing
Last metadata expiration check: 0:03:19 ago on Sun 08 Jan 2023 02:59:43 PM JST.
Dependencies resolved.
========================================================================================================================
 Package                            Architecture      Version                         Repository                   Size
========================================================================================================================
Installing:
 containerd.io                      x86_64            1.6.14-3.1.el9                  docker-ce-stable             32 M
     replacing  runc.x86_64 4:1.1.4-1.el9_1
Installing dependencies:
 container-selinux                  noarch            3:2.189.0-1.el9                 appstream                    47 k
 flatpak-selinux                    noarch            1.12.7-2.el9                    appstream                    22 k
 rpm-plugin-selinux                 x86_64            4.16.1.3-19.el9_1               baseos                       17 k
 selinux-policy                     noarch            34.1.43-1.el9                   baseos                       62 k
 selinux-policy-targeted            noarch            34.1.43-1.el9                   baseos                      6.4 M
Removing dependent packages:
 buildah                            x86_64            1:1.27.2-2.el9_1                @appstream                   26 M

Transaction Summary
========================================================================================================================
Install  6 Packages
Remove   1 Package
...
Complete!

containerdの設定を初期化する!

containerdの設定を初期化します。

# containerd config default > /etc/containerd/config.toml

その後、以下の設定を「false」から「true」に変更します。

SystemdCgroup = true

CNIプラグインの初期設定を行う!

CNIプラグインの初期設定を行います。

# cat << EOF | tee /etc/cni/net.d/10-containerd-net.conflist
{
  "cniVersion": "1.0.0",
  "name": "containerd-net",
  "plugins": [
    {
      "type": "bridge",
      "bridge": "cni0",
      "isGateway": true,
      "ipMasq": true,
      "promiscMode": true,
      "ipam": {
        "type": "host-local",
        "ranges": [
          [{
            "subnet": "10.88.0.0/16"
          }],
          [{
            "subnet": "2001:4860:4860::/64"
          }]
        ],
        "routes": [
          { "dst": "0.0.0.0/0" },
          { "dst": "::/0" }
        ]
      }
    },
    {
      "type": "portmap",
      "capabilities": {"portMappings": true}
    }
  ]
}
EOF

containerdをサービスに登録して起動する!

containerdをサービスに登録して起動します。再起動時にも自動起動するように設定します。

# systemctl enable --now containerd.servicesystemctl enable --now containerd.service
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /usr/lib/systemd/system/containerd.service.
# systemctl status containerd.service
● containerd.service - containerd container runtime
     Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; vendor preset: disabled)
     Active: active (running) since Sun 2023-01-08 15:14:32 JST; 2s ago

おわりに

Kubernatesインストールのために、ContainerdをLocky Linux 9にインストールし、自動起動の設定を行いました。

参考情報

関連記事

関連書籍(Amazon)