LoginSignup
5
2

containerdとkubeadmを使用してkubernetesを構築①

Last updated at Posted at 2023-11-05

環境

  • ubuntu:22.0.4.1 LTS
  • kubernetes:1.28.2

要件確認

公式ドキュメントより確認

以下、抜粋。ここでは、Swapのオフについてのみ記載します。
(Swapについては、v1.22以降では有効でも使用できるらしいです(後述)。)

  • 1台あたり2GB以上のメモリ(2GBの場合、アプリ用のスペースはほとんどありません)
  • 2コア以上のCPU
  • クラスター内のすべてのマシン間で通信可能なネットワーク(パブリックネットワークでもプライベートネットワークでも構いません)
  • ユニークなhostname、MACアドレス、とproduct_uuidが各ノードに必要です。詳細はここを参照してください。
  • マシン内の特定のポートが開いていること。詳細はここを参照してください。
  • Swapがオフであること。kubeletが正常に動作するためにはswapは必ずオフでなければなりません。

※Swapを使用する場合はKubeletConfigurationで修正できるようです。
(動作確認はできていないです。)

swapのオフ

/etc/fstabの修正

以下をコメントアウトする

/etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
/dev/disk/by-id/dm-uuid-LVM-TyqXbx0yg0a711NQgPrCGSXBSnt6VFU4b995cVb1DSgP2k6GwyyHlQFPDxhfMKrU / ext4 defaults 0 1
# /boot was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/c2cc52fd-0ac5-41c9-91d2-e17ec2687ec9 /boot ext4 defaults 0 1
- /swap.img      none    swap    sw      0       0
+ #/swap.img      none    swap    sw      0       0

再起動

再起動を実行

sudo reboot

確認

swap領域を確認する

free -h
出力例
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       305Mi       2.3Gi       1.0Mi       1.2Gi       3.3Gi
Swap:             0B          0B          0B

コンテナランタイム用の設定

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

sudo modprobe overlay
sudo modprobe br_netfilter

# カーネルパラメーターの設定
cat <<EOF | sudo 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

# カーネルパラメーターを適用
sudo sysctl --system

確認 - モジュール

以下のコマンドで、モジュールが読み込まれていることを確認する。

lsmod | grep br_netfilter
出力例
br_netfilter           32768  0
bridge                307200  1 br_netfilter
lsmod | grep overlay
出力例
overlay               151552  0

確認 - カーネルパラメータ

以下のコマンドで、カーネルパラメータが反映されていることを確認します。

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables 
出力例
net.ipv4.ip_forward
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1

containerdのインストール

コンテナランタイムには、containerdを使用します。
インストール方法はいくつかありますが、ここではDockerより配布されているcontainerd.ioをインストールします。その他の方法についてもgetting-started.mdに記載があります。

aptレポジトリの追加

以下の一連のコマンドでレポジトリを追加します。

# GPG鍵を追加
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# レポジトリを追加
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

container.ioのインストール

sudo apt-get install containerd.io

configの作成、修正

公式ドキュメントを確認すると、kubelet用のcgroupドライバーにsystemdに設定する際は、コンテナランタイムのcgroupドライバーもsystemdに変更する必要があります。

kubelet用のcgroupドライバーとしてsystemdを設定する場合、コンテナランタイムのcgroupドライバーにもsystemdを設定する必要があります。 具体的な手順については、以下のリンクなどの、お使いのコンテナランタイムのドキュメントを参照してください。

はじめに以下のコマンドで、デフォルトのコンフィグを作成できます。

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

上記で作成したファイルを以下のように修正します。
後にkubenetesを起動する際は、kubeletのcgroupドライバーの設定をする。
加えて、デフォルトのままだと、以下のエラーが出るので、sandboxのバージョンを変更する。

W1110 12:27:27.248837 1905882 checks.go:835] detected that the sandbox image "registry.k8s.io/pause:3.6" of the container runtime is inconsistent with that used by kubeadm. It is recommended that using "registry.k8s.io/pause:3.9" as the CRI sandbox image.
/etc/containerd/config.toml
  [plugins."io.containerd.grpc.v1.cri"]
-   sandbox_image = "registry.k8s.io/pause:3.6"
+   sandbox_image = "registry.k8s.io/pause:3.9"
...
           [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.opti    ons]
-            SystemdCgroup = false
+            SystemdCgroup = true

containerdの再起動

sudo systemctl restart containerd

cniプラグインのインストール

以下のアーカイブをダウンロードする

  • cni-plugins-linux-amd64-v1.3.0.tgz
wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz

インストール

sudo mkdir -p /opt/cni/bin
sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.3.0.tgz

kubeadm, kubelet, kubectlのインストール

aptレポジトリの追加

# 必要なパッケージをインストール
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# Google Cloudの公開鍵をダウンロード
curl -fsSL https://dl.k8s.io/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
# レポジトリを追加
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

kubernetesに必要なソフトウェアをインストール

kubectlは必要に応じてインストールする。

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

以上で準備は完了です。
次回は、kubeadmを使用してkubernetesを構築していきます。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2